SNode.C
Loading...
Searching...
No Matches
Mqtt.h
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef IOT_MQTT_CLIENT_SOCKETCONTEXT_H
21#define IOT_MQTT_CLIENT_SOCKETCONTEXT_H
22
23#include "iot/mqtt/Mqtt.h" // IWYU pragma: export
24#include "iot/mqtt/Session.h"
25
26// IWYU pra gma: no_include "iot/mqtt/ControlPacketDeserializer.h"
27
28namespace iot::mqtt {
29 class Topic;
30
31 namespace packets {
32 class Connack;
33 class Pingresp;
34 class Suback;
35 class Unsuback;
36
37 } // namespace packets
38
39 namespace client::packets {
40 class Connack;
41 class Pingresp;
42 class Publish;
43 class Puback;
44 class Pubcomp;
45 class Pubrec;
46 class Pubrel;
47 class Suback;
48 class Unsuback;
49 } // namespace client::packets
50} // namespace iot::mqtt
51
52#ifndef DOXYGEN_SHOULD_SKIP_THIS
53
54#include <cstdint>
55#include <list>
56#include <string>
57
58#endif // DOXYGEN_SHOULD_SKIP_THIS
59
60namespace iot::mqtt::client {
61
62 class Mqtt : public iot::mqtt::Mqtt {
63 public:
64 using Super = iot::mqtt::Mqtt;
65
66 explicit Mqtt(const std::string& connectionName, const std::string& clientId);
67
68 ~Mqtt() override;
69
70 private:
72 void deliverPacket(iot::mqtt::ControlPacketDeserializer* controlPacketDeserializer) override;
73
74 protected:
75 bool onSignal(int sig) override;
76
77 private:
78 virtual void onConnack(const iot::mqtt::packets::Connack& connack);
79 virtual void onSuback(const iot::mqtt::packets::Suback& suback);
80 virtual void onUnsuback(const iot::mqtt::packets::Unsuback& unsuback);
81 virtual void onPingresp(const iot::mqtt::packets::Pingresp& pingresp);
82
83 void _onConnack(const iot::mqtt::client::packets::Connack& connack);
84 void _onPublish(const iot::mqtt::client::packets::Publish& publish);
85 void _onSuback(const iot::mqtt::client::packets::Suback& suback);
86 void _onUnsuback(const iot::mqtt::client::packets::Unsuback& unsuback);
87 void _onPingresp(const iot::mqtt::client::packets::Pingresp& pingresp);
88
89 public:
90 void sendConnect(uint16_t keepAlive,
91 const std::string& clientId,
92 bool cleanSession,
93 const std::string& willTopic,
94 const std::string& willMessage,
95 uint8_t willQoS,
96 bool willRetain,
97 const std::string& username,
98 const std::string& password,
99 bool loopPrevention = false);
100 void sendSubscribe(const std::list<Topic>& topics);
101 void sendUnsubscribe(const std::list<std::string>& topics);
102 void sendPingreq() const;
103 void sendDisconnect() const;
104
105 friend class iot::mqtt::client::packets::Connack;
106 friend class iot::mqtt::client::packets::Suback;
107 friend class iot::mqtt::client::packets::Unsuback;
108 friend class iot::mqtt::client::packets::Pingresp;
109 friend class iot::mqtt::client::packets::Publish;
110 friend class iot::mqtt::client::packets::Pubcomp;
111 friend class iot::mqtt::client::packets::Pubrec;
112 friend class iot::mqtt::client::packets::Puback;
113 friend class iot::mqtt::client::packets::Pubrel;
114
115 private:
116 uint16_t keepAlive = 0;
117
119 iot::mqtt::Session session;
120
122 };
123
124} // namespace iot::mqtt::client
125
126#endif // IOT_MQTT_CLIENT_SOCKETCONTEXT_H
std::size_t deserialize(iot::mqtt::MqttContext *mqttContext)
virtual std::size_t deserializeVP(iot::mqtt::MqttContext *mqttContext)=0
ControlPacketDeserializer & operator=(const ControlPacketDeserializer &)=default
ControlPacketDeserializer(uint32_t remainingLength, uint8_t flags, uint8_t mustFlags)
virtual void deliverPacket(iot::mqtt::client::Mqtt *mqtt)=0
void _onPublish(const iot::mqtt::client::packets::Publish &publish)
Definition Mqtt.cpp:192
void sendConnect(uint16_t keepAlive, const std::string &clientId, bool cleanSession, const std::string &willTopic, const std::string &willMessage, uint8_t willQoS, bool willRetain, const std::string &username, const std::string &password, bool loopPrevention=false)
Definition Mqtt.cpp:240
iot::mqtt::Session session
Definition Mqtt.h:119
std::string sessionStoreFileName
Definition Mqtt.h:118
void _onPingresp(const iot::mqtt::client::packets::Pingresp &pingresp)
Definition Mqtt.cpp:236
virtual void onConnack(const iot::mqtt::packets::Connack &connack)
Definition Mqtt.cpp:160
virtual void onPingresp(const iot::mqtt::packets::Pingresp &pingresp)
Definition Mqtt.cpp:169
void sendSubscribe(const std::list< Topic > &topics)
Definition Mqtt.cpp:260
iot::mqtt::ControlPacketDeserializer * createControlPacketDeserializer(iot::mqtt::FixedHeader &fixedHeader) final
Definition Mqtt.cpp:113
void _onSuback(const iot::mqtt::client::packets::Suback &suback)
Definition Mqtt.cpp:198
virtual void onUnsuback(const iot::mqtt::packets::Unsuback &unsuback)
Definition Mqtt.cpp:166
void _onConnack(const iot::mqtt::client::packets::Connack &connack)
Definition Mqtt.cpp:172
void _onUnsuback(const iot::mqtt::client::packets::Unsuback &unsuback)
Definition Mqtt.cpp:224
void sendUnsubscribe(const std::list< std::string > &topics)
Definition Mqtt.cpp:264
bool onSignal(int sig) override
Definition Mqtt.cpp:156
virtual void onSuback(const iot::mqtt::packets::Suback &suback)
Definition Mqtt.cpp:163
void deliverPacket(iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
Definition Mqtt.cpp:152
void sendPingreq() const
Definition Mqtt.cpp:268
void sendDisconnect() const
Definition Mqtt.cpp:272
Mqtt(const std::string &connectionName, const std::string &clientId)
Definition Mqtt.cpp:57
core::timer::Timer pingTimer
Definition Mqtt.h:121
std::size_t deserializeVP(iot::mqtt::MqttContext *mqttContext) override
Definition Connack.cpp:35
Connack(uint32_t remainingLength, uint8_t flags)
Definition Connack.cpp:30
void deliverPacket(iot::mqtt::client::Mqtt *mqtt) override
Definition Connack.cpp:65
uint8_t getReturnCode() const
Definition Connack.cpp:54
std::vector< char > serializeVP() const override
Definition Connack.cpp:41
Connack(uint8_t returncode, uint8_t acknowledgeFlags)
Definition Connack.cpp:35
iot::mqtt::types::UInt8 acknowledgeFlags
Definition Connack.h:59
bool getSessionPresent() const
Definition Connack.cpp:58
uint8_t getAcknowledgeFlags() const
Definition Connack.cpp:50
iot::mqtt::types::UInt8 returnCode
Definition Connack.h:60
UInt8 & operator=(const uint8_t &newValue)
Definition UInt8.cpp:35
UInt8(UInt8 &&) noexcept=default
UInt8 & operator=(UInt8 &&) noexcept=default
UInt8 & operator=(const UInt8 &)=default
UInt8(const UInt8 &)=default
#define MQTT_CONNACK_FLAGS