SNode.C
Loading...
Searching...
No Matches
iot::mqtt::client::Mqtt Class Reference

#include <Mqtt.h>

Inheritance diagram for iot::mqtt::client::Mqtt:
Collaboration diagram for iot::mqtt::client::Mqtt:

Public Types

using Super = iot::mqtt::Mqtt
 

Public Member Functions

 Mqtt (const std::string &connectionName, const std::string &clientId)
 
 ~Mqtt () override
 
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)
 
void sendSubscribe (const std::list< Topic > &topics)
 
void sendUnsubscribe (const std::list< std::string > &topics)
 
void sendPingreq () const
 
void sendDisconnect () const
 
- Public Member Functions inherited from iot::mqtt::Mqtt
 Mqtt (const std::string &connectionName)
 
 Mqtt (const std::string &connectionName, const std::string &clientId)
 
 Mqtt (Mqtt &&)=delete
 
 Mqtt (const Mqtt &)=delete
 
Mqttoperator= (Mqtt &&)=delete
 
Mqttoperator= (const Mqtt &)=delete
 
virtual void onConnected ()
 
virtual void onDisconnected ()
 
const std::string & getConnectionName () const
 
const MqttContextgetMqttContext () const
 
void sendPublish (const std::string &topic, const std::string &message, uint8_t qoS, bool retain)
 
void sendPuback (uint16_t packetIdentifier) const
 
void sendPubrec (uint16_t packetIdentifier) const
 
void sendPubrel (uint16_t packetIdentifier) const
 
void sendPubcomp (uint16_t packetIdentifier) const
 

Protected Member Functions

bool onSignal (int sig) override
 
- Protected Member Functions inherited from iot::mqtt::Mqtt
void initSession (Session *session, utils::Timeval keepAlive)
 
virtual void onPublish (const iot::mqtt::packets::Publish &publish)
 
virtual void onPuback (const iot::mqtt::packets::Puback &puback)
 
virtual void onPubrec (const iot::mqtt::packets::Pubrec &pubrec)
 
virtual void onPubrel (const iot::mqtt::packets::Pubrel &pubrel)
 
virtual void onPubcomp (const iot::mqtt::packets::Pubcomp &pubcomp)
 
bool _onPublish (const iot::mqtt::packets::Publish &publish)
 
void _onPuback (const iot::mqtt::packets::Puback &puback)
 
void _onPubrec (const iot::mqtt::packets::Pubrec &pubrec)
 
void _onPubrel (const iot::mqtt::packets::Pubrel &pubrel)
 
void _onPubcomp (const iot::mqtt::packets::Pubcomp &pubcomp)
 
uint16_t getPacketIdentifier ()
 
void send (const iot::mqtt::ControlPacket &controlPacket) const
 
void printVP (const iot::mqtt::ControlPacket &packet) const
 
void printFixedHeader (const iot::mqtt::FixedHeader &fixedHeader) const
 

Private Member Functions

iot::mqtt::ControlPacketDeserializercreateControlPacketDeserializer (iot::mqtt::FixedHeader &fixedHeader) final
 
void deliverPacket (iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
 
virtual void onConnack (const iot::mqtt::packets::Connack &connack)
 
virtual void onSuback (const iot::mqtt::packets::Suback &suback)
 
virtual void onUnsuback (const iot::mqtt::packets::Unsuback &unsuback)
 
virtual void onPingresp (const iot::mqtt::packets::Pingresp &pingresp)
 
void _onConnack (const iot::mqtt::client::packets::Connack &connack)
 
void _onPublish (const iot::mqtt::client::packets::Publish &publish)
 
void _onSuback (const iot::mqtt::client::packets::Suback &suback)
 
void _onUnsuback (const iot::mqtt::client::packets::Unsuback &unsuback)
 
void _onPingresp (const iot::mqtt::client::packets::Pingresp &pingresp)
 

Private Attributes

uint16_t keepAlive = 0
 
std::string sessionStoreFileName
 
iot::mqtt::Session session
 
core::timer::Timer pingTimer
 

Friends

class iot::mqtt::client::packets::Connack
 
class iot::mqtt::client::packets::Suback
 
class iot::mqtt::client::packets::Unsuback
 
class iot::mqtt::client::packets::Pingresp
 
class iot::mqtt::client::packets::Publish
 
class iot::mqtt::client::packets::Pubcomp
 
class iot::mqtt::client::packets::Pubrec
 
class iot::mqtt::client::packets::Puback
 
class iot::mqtt::client::packets::Pubrel
 

Additional Inherited Members

- Static Public Member Functions inherited from iot::mqtt::Mqtt
static std::string toHexString (const std::vector< char > &data)
 
static std::string toHexString (const std::string &data)
 
- Protected Attributes inherited from iot::mqtt::Mqtt
std::string connectionName
 
std::string clientId
 
MqttContextmqttContext = nullptr
 

Detailed Description

Definition at line 62 of file Mqtt.h.

Member Typedef Documentation

◆ Super

Definition at line 64 of file Mqtt.h.

Constructor & Destructor Documentation

◆ Mqtt()

iot::mqtt::client::Mqtt::Mqtt ( const std::string & connectionName,
const std::string & clientId )
explicit

Definition at line 57 of file Mqtt.cpp.

59 , sessionStoreFileName((getenv("MQTT_SESSION_STORE") != nullptr) ? getenv("MQTT_SESSION_STORE") : "") { // NOLINT
60 if (!sessionStoreFileName.empty()) {
61 std::ifstream sessionStoreFile(sessionStoreFileName);
62
63 if (sessionStoreFile.is_open()) {
64 try {
65 nlohmann::json sessionStoreJson;
66
67 sessionStoreFile >> sessionStoreJson;
68
69 session.fromJson(sessionStoreJson);
70
71 LOG(DEBUG) << connectionName << " MQTT Client: ... Persistent session data loaded successful";
72 } catch (const nlohmann::json::exception&) {
73 LOG(DEBUG) << connectionName << " MQTT Client: ... Starting with empty session: Session store '"
74 << sessionStoreFileName << "' empty or corrupted";
75
76 session.clear();
77 }
78
79 sessionStoreFile.close();
80 std::remove(sessionStoreFileName.data()); // NOLINT
81
82 LOG(INFO) << connectionName << " MQTT Client: Restoring saved session done";
83 } else {
84 PLOG(WARNING) << connectionName << " MQTT Client: ... Could not read session store '" << sessionStoreFileName << "'";
85 }
86 } else {
87 LOG(INFO) << connectionName << " MQTT Client: Session not reloaded: Session store filename empty";
88 }
89 }
std::string connectionName
Definition Mqtt.h:120
std::string clientId
Definition Mqtt.h:121
void fromJson(const nlohmann::json &json)
Definition Session.cpp:67
iot::mqtt::Session session
Definition Mqtt.h:119
std::string sessionStoreFileName
Definition Mqtt.h:118
iot::mqtt::Mqtt Super
Definition Mqtt.h:64

References Mqtt().

Referenced by Mqtt().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~Mqtt()

iot::mqtt::client::Mqtt::~Mqtt ( )
overridevirtual

Reimplemented from iot::mqtt::Mqtt.

Definition at line 91 of file Mqtt.cpp.

91 {
92 if (!sessionStoreFileName.empty()) {
93 const nlohmann::json sessionJson = session.toJson();
94
95 std::ofstream sessionStoreFile(sessionStoreFileName);
96
97 if (sessionStoreFile.is_open()) {
98 if (!sessionJson.empty()) {
99 sessionStoreFile << sessionJson;
100 }
101
102 sessionStoreFile.close();
103 } else {
104 PLOG(DEBUG) << connectionName << " MQTT Client: Could not write session store '" << sessionStoreFileName << "'";
105 }
106 } else {
107 LOG(INFO) << connectionName << " MQTT Client: Session not saved: Session store filename empty";
108 }
109
111 }
void cancel()
Definition Timer.cpp:62
virtual nlohmann::json toJson() const
Definition Session.cpp:37
core::timer::Timer pingTimer
Definition Mqtt.h:121

Member Function Documentation

◆ _onConnack()

void iot::mqtt::client::Mqtt::_onConnack ( const iot::mqtt::client::packets::Connack & connack)
private

Definition at line 172 of file Mqtt.cpp.

172 {
173 LOG(INFO) << connectionName << " MQTT Client: Acknowledge Flag: " << static_cast<int>(connack.getAcknowledgeFlags());
174 LOG(INFO) << connectionName << " MQTT Client: Return code: " << static_cast<int>(connack.getReturnCode());
175 LOG(INFO) << connectionName << " MQTT Client: Session present: " << connack.getSessionPresent();
176
177 if (connack.getReturnCode() != MQTT_CONNACK_ACCEPT) {
178 LOG(ERROR) << connectionName << " MQTT Client: Negative ack received";
179 } else {
181
183 [this]() {
184 sendPingreq();
185 },
186 keepAlive);
187
188 onConnack(connack);
189 }
190 }
static Timer intervalTimer(const std::function< void(const std::function< void()> &)> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:39
void initSession(Session *session, utils::Timeval keepAlive)
Definition Mqtt.cpp:152
virtual void onConnack(const iot::mqtt::packets::Connack &connack)
Definition Mqtt.cpp:160
void sendPingreq() const
Definition Mqtt.cpp:268
uint8_t getReturnCode() const
Definition Connack.cpp:54
bool getSessionPresent() const
Definition Connack.cpp:58
uint8_t getAcknowledgeFlags() const
Definition Connack.cpp:50
#define MQTT_CONNACK_ACCEPT
Definition Connack.h:37

References onConnack().

Here is the call graph for this function:

◆ _onPingresp()

void iot::mqtt::client::Mqtt::_onPingresp ( const iot::mqtt::client::packets::Pingresp & pingresp)
private

Definition at line 236 of file Mqtt.cpp.

236 {
237 onPingresp(pingresp);
238 }
virtual void onPingresp(const iot::mqtt::packets::Pingresp &pingresp)
Definition Mqtt.cpp:169

References onPingresp().

Here is the call graph for this function:

◆ _onPublish()

void iot::mqtt::client::Mqtt::_onPublish ( const iot::mqtt::client::packets::Publish & publish)
private

Definition at line 192 of file Mqtt.cpp.

192 {
193 if (Super::_onPublish(publish)) {
194 onPublish(publish);
195 }
196 }
virtual void onPublish(const iot::mqtt::packets::Publish &publish)
Definition Mqtt.cpp:231
bool _onPublish(const iot::mqtt::packets::Publish &publish)
Definition Mqtt.cpp:246

◆ _onSuback()

void iot::mqtt::client::Mqtt::_onSuback ( const iot::mqtt::client::packets::Suback & suback)
private

Definition at line 198 of file Mqtt.cpp.

198 {
199 if (suback.getPacketIdentifier() == 0) {
200 LOG(ERROR) << connectionName << " MQTT Client: PackageIdentifier missing";
201 mqttContext->end(true);
202 } else {
203 LOG(DEBUG) << connectionName << " MQTT Client: PacketIdentifier: 0x" << std::hex << std::setfill('0') << std::setw(4)
204 << suback.getPacketIdentifier();
205
206 std::stringstream ss;
207 std::list<uint8_t>::size_type i = 0;
208
209 for (const uint8_t returnCode : suback.getReturnCodes()) {
210 if (i != 0 && i % 8 == 0 && i != suback.getReturnCodes().size()) {
211 ss << std::endl;
212 ss << " ";
213 }
214 ++i;
215 ss << "0x" << std::hex << std::setfill('0') << std::setw(2) << static_cast<uint16_t>(returnCode) << " "; // << " | ";
216 }
217
218 LOG(DEBUG) << connectionName << " MQTT Client: Return codes: " << ss.str();
219
220 onSuback(suback);
221 }
222 }
virtual void end(bool fatal=false)=0
MqttContext * mqttContext
Definition Mqtt.h:136
virtual void onSuback(const iot::mqtt::packets::Suback &suback)
Definition Mqtt.cpp:163
uint16_t getPacketIdentifier() const
Definition Suback.cpp:49
const std::list< uint8_t > & getReturnCodes() const
Definition Suback.cpp:53

References onSuback().

Here is the call graph for this function:

◆ _onUnsuback()

void iot::mqtt::client::Mqtt::_onUnsuback ( const iot::mqtt::client::packets::Unsuback & unsuback)
private

Definition at line 224 of file Mqtt.cpp.

224 {
225 if (unsuback.getPacketIdentifier() == 0) {
226 LOG(ERROR) << connectionName << " MQTT Client: PacketIdentifier missing";
227 mqttContext->end(true);
228 } else {
229 LOG(DEBUG) << connectionName << " MQTT Client: PacketIdentifier: 0x" << std::hex << std::setfill('0') << std::setw(4)
230 << unsuback.getPacketIdentifier();
231
232 onUnsuback(unsuback);
233 }
234 }
virtual void onUnsuback(const iot::mqtt::packets::Unsuback &unsuback)
Definition Mqtt.cpp:166
uint16_t getPacketIdentifier() const
Definition Unsuback.cpp:44

References onUnsuback().

Here is the call graph for this function:

◆ createControlPacketDeserializer()

iot::mqtt::ControlPacketDeserializer * iot::mqtt::client::Mqtt::createControlPacketDeserializer ( iot::mqtt::FixedHeader & fixedHeader)
finalprivatevirtual

Implements iot::mqtt::Mqtt.

Definition at line 113 of file Mqtt.cpp.

113 {
114 iot::mqtt::ControlPacketDeserializer* currentPacket = nullptr;
115
116 switch (fixedHeader.getType()) {
117 case MQTT_CONNACK:
119 break;
120 case MQTT_PUBLISH:
122 break;
123 case MQTT_PUBACK:
125 break;
126 case MQTT_PUBREC:
128 break;
129 case MQTT_PUBREL:
131 break;
132 case MQTT_PUBCOMP:
134 break;
135 case MQTT_SUBACK:
137 break;
138 case MQTT_UNSUBACK:
140 break;
141 case MQTT_PINGRESP:
143 break;
144 default:
145 currentPacket = nullptr;
146 break;
147 }
148
149 return currentPacket;
150 }
uint8_t getType() const
uint32_t getRemainingLength() const
uint8_t getFlags() const
iot::mqtt::FixedHeader fixedHeader
Definition Mqtt.h:124
#define MQTT_CONNACK
Definition Connack.h:35
#define MQTT_PINGRESP
Definition Pingresp.h:33
#define MQTT_PUBACK
Definition Puback.h:35
#define MQTT_PUBCOMP
Definition Pubcomp.h:35
#define MQTT_PUBLISH
Definition Publish.h:36
#define MQTT_PUBREC
Definition Pubrec.h:35
#define MQTT_PUBREL
Definition Pubrel.h:35
#define MQTT_SUBACK
Definition Suback.h:36
#define MQTT_UNSUBACK
Definition Unsuback.h:35

◆ deliverPacket()

void iot::mqtt::client::Mqtt::deliverPacket ( iot::mqtt::ControlPacketDeserializer * controlPacketDeserializer)
overrideprivatevirtual

Implements iot::mqtt::Mqtt.

Definition at line 152 of file Mqtt.cpp.

152 {
154 }
iot::mqtt::ControlPacketDeserializer * controlPacketDeserializer
Definition Mqtt.h:125
void deliverPacket(iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
Definition Mqtt.cpp:152

◆ onConnack()

void iot::mqtt::client::Mqtt::onConnack ( const iot::mqtt::packets::Connack & connack)
privatevirtual

Definition at line 160 of file Mqtt.cpp.

160 {
161 }

Referenced by _onConnack().

Here is the caller graph for this function:

◆ onPingresp()

void iot::mqtt::client::Mqtt::onPingresp ( const iot::mqtt::packets::Pingresp & pingresp)
privatevirtual

Definition at line 169 of file Mqtt.cpp.

169 {
170 }

Referenced by _onPingresp().

Here is the caller graph for this function:

◆ onSignal()

bool iot::mqtt::client::Mqtt::onSignal ( int sig)
overrideprotectedvirtual

Implements iot::mqtt::Mqtt.

Definition at line 156 of file Mqtt.cpp.

156 {
157 return false;
158 }

◆ onSuback()

void iot::mqtt::client::Mqtt::onSuback ( const iot::mqtt::packets::Suback & suback)
privatevirtual

Definition at line 163 of file Mqtt.cpp.

163 {
164 }

Referenced by _onSuback().

Here is the caller graph for this function:

◆ onUnsuback()

void iot::mqtt::client::Mqtt::onUnsuback ( const iot::mqtt::packets::Unsuback & unsuback)
privatevirtual

Definition at line 166 of file Mqtt.cpp.

166 {
167 }

Referenced by _onUnsuback().

Here is the caller graph for this function:

◆ sendConnect()

void iot::mqtt::client::Mqtt::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 at line 240 of file Mqtt.cpp.

249 { // Client
250 this->clientId = clientId;
251
252 LOG(INFO) << connectionName << " MQTT Client: CONNECT send: " << clientId;
253
255 clientId, keepAlive, cleanSession, willTopic, willMessage, willQoS, willRetain, username, password, loopPrevention));
256
257 this->keepAlive = keepAlive;
258 }
void send(const iot::mqtt::ControlPacket &controlPacket) const
Definition Mqtt.cpp:183

References keepAlive.

◆ sendDisconnect()

void iot::mqtt::client::Mqtt::sendDisconnect ( ) const

Definition at line 272 of file Mqtt.cpp.

◆ sendPingreq()

void iot::mqtt::client::Mqtt::sendPingreq ( ) const

Definition at line 268 of file Mqtt.cpp.

◆ sendSubscribe()

void iot::mqtt::client::Mqtt::sendSubscribe ( const std::list< Topic > & topics)

Definition at line 260 of file Mqtt.cpp.

260 { // Client
262 }
uint16_t getPacketIdentifier()
Definition Mqtt.cpp:376

◆ sendUnsubscribe()

void iot::mqtt::client::Mqtt::sendUnsubscribe ( const std::list< std::string > & topics)

Definition at line 264 of file Mqtt.cpp.

Friends And Related Symbol Documentation

◆ iot::mqtt::client::packets::Connack

Definition at line 105 of file Mqtt.h.

◆ iot::mqtt::client::packets::Pingresp

Definition at line 108 of file Mqtt.h.

◆ iot::mqtt::client::packets::Puback

Definition at line 112 of file Mqtt.h.

◆ iot::mqtt::client::packets::Pubcomp

Definition at line 110 of file Mqtt.h.

◆ iot::mqtt::client::packets::Publish

Definition at line 109 of file Mqtt.h.

◆ iot::mqtt::client::packets::Pubrec

Definition at line 111 of file Mqtt.h.

◆ iot::mqtt::client::packets::Pubrel

Definition at line 113 of file Mqtt.h.

◆ iot::mqtt::client::packets::Suback

Definition at line 106 of file Mqtt.h.

◆ iot::mqtt::client::packets::Unsuback

Definition at line 107 of file Mqtt.h.

Member Data Documentation

◆ keepAlive

uint16_t iot::mqtt::client::Mqtt::keepAlive = 0
private

Definition at line 116 of file Mqtt.h.

Referenced by sendConnect().

◆ pingTimer

core::timer::Timer iot::mqtt::client::Mqtt::pingTimer
private

Definition at line 121 of file Mqtt.h.

◆ session

iot::mqtt::Session iot::mqtt::client::Mqtt::session
private

Definition at line 119 of file Mqtt.h.

◆ sessionStoreFileName

std::string iot::mqtt::client::Mqtt::sessionStoreFileName
private

Definition at line 118 of file Mqtt.h.


The documentation for this class was generated from the following files: