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

#include <Mqtt.h>

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

Public Member Functions

 Mqtt (const std::string &connectionName, const std::shared_ptr< broker::Broker > &broker)
 
 ~Mqtt () override
 
void sendConnack (uint8_t returnCode, uint8_t flags) const
 
void sendSuback (uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes) const
 
void sendUnsuback (uint16_t packetIdentifier) const
 
void sendPingresp () const
 
std::string getProtocol () const
 
uint8_t getLevel () const
 
uint8_t getConnectFlags () const
 
uint16_t getKeepAlive () const
 
std::string getClientId () const
 
std::string getWillTopic () const
 
std::string getWillMessage () const
 
std::string getUsername () const
 
std::string getPassword () const
 
bool getUsernameFlag () const
 
bool getPasswordFlag () const
 
bool getWillRetain () const
 
uint8_t getWillQoS () const
 
bool getWillFlag () const
 
bool getCleanSession () const
 
bool getReflect () 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
 

Protected Attributes

std::string protocol
 
uint8_t level = 0
 
uint8_t connectFlags = 0
 
uint16_t keepAlive = 0
 
std::string willTopic
 
std::string willMessage
 
std::string username
 
std::string password
 
bool usernameFlag = false
 
bool passwordFlag = false
 
bool willRetain = false
 
uint8_t willQoS = 0
 
bool willFlag = false
 
bool cleanSession = false
 
bool reflect = true
 
std::shared_ptr< iot::mqtt::server::broker::Brokerbroker
 
- Protected Attributes inherited from iot::mqtt::Mqtt
std::string connectionName
 
std::string clientId
 
MqttContextmqttContext = nullptr
 

Private Types

using Super = iot::mqtt::Mqtt
 

Private Member Functions

iot::mqtt::ControlPacketDeserializercreateControlPacketDeserializer (iot::mqtt::FixedHeader &fixedHeader) final
 
void deliverPacket (iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
 
bool initSession (const utils::Timeval &keepAlive)
 
void releaseSession ()
 
virtual void onConnect (const iot::mqtt::packets::Connect &connect)
 
virtual void onSubscribe (const iot::mqtt::packets::Subscribe &subscribe)
 
virtual void onUnsubscribe (const iot::mqtt::packets::Unsubscribe &unsubscribe)
 
virtual void onPingreq (const iot::mqtt::packets::Pingreq &pingreq)
 
virtual void onDisconnect (const iot::mqtt::packets::Disconnect &disconnect)
 
void _onConnect (const iot::mqtt::server::packets::Connect &connect)
 
void _onPublish (const iot::mqtt::server::packets::Publish &publish)
 
void _onSubscribe (const iot::mqtt::server::packets::Subscribe &subscribe)
 
void _onUnsubscribe (const iot::mqtt::server::packets::Unsubscribe &unsubscribe)
 
void _onPingreq (const iot::mqtt::server::packets::Pingreq &pingreq)
 
void _onDisconnect (const iot::mqtt::server::packets::Disconnect &disconnect)
 
void initSession (Session *session, utils::Timeval keepAlive)
 

Friends

class iot::mqtt::server::packets::Connect
 
class iot::mqtt::server::packets::Subscribe
 
class iot::mqtt::server::packets::Unsubscribe
 
class iot::mqtt::server::packets::Pingreq
 
class iot::mqtt::server::packets::Disconnect
 
class iot::mqtt::server::packets::Publish
 
class iot::mqtt::server::packets::Pubcomp
 
class iot::mqtt::server::packets::Pubrec
 
class iot::mqtt::server::packets::Puback
 
class iot::mqtt::server::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)
 

Detailed Description

Definition at line 65 of file Mqtt.h.

Member Typedef Documentation

◆ Super

Definition at line 67 of file Mqtt.h.

Constructor & Destructor Documentation

◆ Mqtt()

iot::mqtt::server::Mqtt::Mqtt ( const std::string & connectionName,
const std::shared_ptr< broker::Broker > & broker )
explicit

Definition at line 51 of file Mqtt.cpp.

53 , broker(broker) {
54 }
std::string connectionName
Definition Mqtt.h:120
std::shared_ptr< iot::mqtt::server::broker::Broker > broker
Definition Mqtt.h:141
iot::mqtt::Mqtt Super
Definition Mqtt.h:67

◆ ~Mqtt()

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

Reimplemented from iot::mqtt::Mqtt.

Definition at line 56 of file Mqtt.cpp.

56 {
58
59 if (willFlag) {
61 }
62 }
std::string clientId
Definition Mqtt.h:121
std::string willMessage
Definition Mqtt.h:129
std::string willTopic
Definition Mqtt.h:128
void publish(const std::string &originClientId, const std::string &topic, const std::string &message, uint8_t qoS, bool retain)
Definition Broker.cpp:134

References releaseSession(), and willFlag.

Here is the call graph for this function:

Member Function Documentation

◆ _onConnect()

void iot::mqtt::server::Mqtt::_onConnect ( const iot::mqtt::server::packets::Connect & connect)
private

Definition at line 191 of file Mqtt.cpp.

191 {
192 LOG(INFO) << connectionName << " MQTT Broker: Protocol: " << connect.getProtocol();
193 LOG(INFO) << connectionName << " MQTT Broker: Version: " << static_cast<uint16_t>(connect.getLevel());
194 LOG(INFO) << connectionName << " MQTT Broker: ConnectFlags: 0x" << std::hex << std::setfill('0') << std::setw(2)
195 << static_cast<uint16_t>(connect.getConnectFlags()) << std::dec << std::setw(0);
196 LOG(INFO) << connectionName << " MQTT Broker: KeepAlive: " << connect.getKeepAlive();
197 LOG(INFO) << connectionName << " MQTT Broker: ClientID: " << connect.getClientId();
198 LOG(INFO) << connectionName << " MQTT Broker: CleanSession: " << connect.getCleanSession();
199
200 if (connect.getWillFlag()) {
201 LOG(INFO) << connectionName << " MQTT Broker: WillTopic: " << connect.getWillTopic();
202 LOG(INFO) << connectionName << " MQTT Broker: WillMessage: " << connect.getWillMessage();
203 LOG(INFO) << connectionName << " MQTT Broker: WillQoS: " << static_cast<uint16_t>(connect.getWillQoS());
204 LOG(INFO) << connectionName << " MQTT Broker: WillRetain: " << connect.getWillRetain();
205 }
206 if (connect.getUsernameFlag()) {
207 LOG(INFO) << connectionName << " MQTT Broker: Username: " << connect.getUsername();
208 }
209 if (connect.getPasswordFlag()) {
210 LOG(INFO) << connectionName << " MQTT Broker: Password: " << connect.getPassword();
211 }
212
213 if (connect.getProtocol() != "MQTT") {
214 LOG(ERROR) << connectionName << " MQTT Broker: Wrong Protocol: " << connect.getProtocol();
215 mqttContext->end(true);
216 } else if ((connect.getLevel()) != MQTT_VERSION_3_1_1) {
217 LOG(ERROR) << connectionName << " MQTT Broker: Wrong Protocol Level: " << MQTT_VERSION_3_1_1 << " != " << connect.getLevel();
219
220 mqttContext->end(true);
221 } else if (connect.isFakedClientId() && !connect.getCleanSession()) {
222 LOG(ERROR) << connectionName << " MQTT Broker: Resume session but no ClientId present";
224
225 mqttContext->end(true);
226 } else {
227 // V-Header
228 protocol = connect.getProtocol();
229 level = connect.getLevel();
230 reflect = connect.getReflect();
231 connectFlags = connect.getConnectFlags();
232 keepAlive = connect.getKeepAlive();
233
234 // Payload
235 clientId = connect.getClientId();
236 willTopic = connect.getWillTopic();
237 willMessage = connect.getWillMessage();
238 username = connect.getUsername();
239 password = connect.getPassword();
240
241 // Derived from flags
242 usernameFlag = connect.getUsernameFlag();
243 passwordFlag = connect.getPasswordFlag();
244 willRetain = connect.getWillRetain();
245 willQoS = connect.getWillQoS();
246 willFlag = connect.getWillFlag();
247 cleanSession = connect.getCleanSession();
248
249 if (initSession(1.5 * keepAlive)) {
250 onConnect(connect);
251 } else {
252 mqttContext->end(true);
253 }
254 }
255 }
virtual void end(bool fatal=false)=0
MqttContext * mqttContext
Definition Mqtt.h:136
virtual void onConnect(const iot::mqtt::packets::Connect &connect)
Definition Mqtt.cpp:176
std::string password
Definition Mqtt.h:131
bool initSession(const utils::Timeval &keepAlive)
Definition Mqtt.cpp:125
void sendConnack(uint8_t returnCode, uint8_t flags) const
Definition Mqtt.cpp:326
std::string username
Definition Mqtt.h:130
std::string protocol
Definition Mqtt.h:123
#define MQTT_SESSION_NEW
Definition Connack.h:44
#define MQTT_CONNACK_UNACEPTABLEVERSION
Definition Connack.h:38
#define MQTT_CONNACK_IDENTIFIERREJECTED
Definition Connack.h:39
#define MQTT_VERSION_3_1_1
Definition Connect.h:38
int connect(int sockfd, const sockaddr *addr, socklen_t addrlen)
Definition socket.cpp:54

References cleanSession, connectFlags, initSession(), keepAlive, level, passwordFlag, reflect, sendConnack(), usernameFlag, willFlag, willQoS, and willRetain.

Here is the call graph for this function:

◆ _onDisconnect()

void iot::mqtt::server::Mqtt::_onDisconnect ( const iot::mqtt::server::packets::Disconnect & disconnect)
private

Definition at line 318 of file Mqtt.cpp.

318 {
319 willFlag = false;
320
321 onDisconnect(disconnect);
322
324 }
virtual void onDisconnect(const iot::mqtt::packets::Disconnect &disconnect)
Definition Mqtt.cpp:188

References releaseSession(), and willFlag.

Here is the call graph for this function:

◆ _onPingreq()

void iot::mqtt::server::Mqtt::_onPingreq ( const iot::mqtt::server::packets::Pingreq & pingreq)
private

Definition at line 312 of file Mqtt.cpp.

312 {
313 sendPingresp();
314
315 onPingreq(pingreq);
316 }
virtual void onPingreq(const iot::mqtt::packets::Pingreq &pingreq)
Definition Mqtt.cpp:185
void sendPingresp() const
Definition Mqtt.cpp:338

References sendPingresp().

Here is the call graph for this function:

◆ _onPublish()

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

Definition at line 257 of file Mqtt.cpp.

257 {
258 if (Super::_onPublish(publish)) {
259 broker->publish(clientId, publish.getTopic(), publish.getMessage(), publish.getQoS(), publish.getRetain());
260
261 onPublish(publish);
262 }
263 }
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
uint8_t getQoS() const
Definition Publish.cpp:63
std::string getTopic() const
Definition Publish.cpp:71
std::string getMessage() const
Definition Publish.cpp:75

◆ _onSubscribe()

void iot::mqtt::server::Mqtt::_onSubscribe ( const iot::mqtt::server::packets::Subscribe & subscribe)
private

Definition at line 265 of file Mqtt.cpp.

265 {
266 if (subscribe.getPacketIdentifier() == 0) {
267 LOG(ERROR) << connectionName << " MQTT Broker: PackageIdentifier missing";
268 mqttContext->end(true);
269 } else {
270 LOG(DEBUG) << connectionName << " MQTT Broker: PacketIdentifier: 0x" << std::hex << std::setfill('0') << std::setw(4)
271 << subscribe.getPacketIdentifier();
272
273 for (const iot::mqtt::Topic& topic : subscribe.getTopics()) {
274 LOG(INFO) << connectionName << " MQTT Broker: Topic filter: '" << topic.getName()
275 << "', QoS: " << static_cast<uint16_t>(topic.getQoS());
276 }
277
278 std::list<uint8_t> returnCodes;
279 for (const iot::mqtt::Topic& topic : subscribe.getTopics()) {
280 const uint8_t returnCode = broker->subscribe(clientId, topic.getName(), topic.getQoS());
281 returnCodes.push_back(returnCode);
282 }
283
284 sendSuback(subscribe.getPacketIdentifier(), returnCodes);
285
286 onSubscribe(subscribe);
287 }
288 }
uint16_t getPacketIdentifier() const
Definition Subscribe.cpp:60
void sendSuback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes) const
Definition Mqtt.cpp:330
virtual void onSubscribe(const iot::mqtt::packets::Subscribe &subscribe)
Definition Mqtt.cpp:179
uint8_t subscribe(const std::string &clientId, const std::string &topic, uint8_t qoS)
Definition Broker.cpp:142

◆ _onUnsubscribe()

void iot::mqtt::server::Mqtt::_onUnsubscribe ( const iot::mqtt::server::packets::Unsubscribe & unsubscribe)
private

Definition at line 290 of file Mqtt.cpp.

290 {
291 if (unsubscribe.getPacketIdentifier() == 0) {
292 LOG(ERROR) << connectionName << " MQTT Broker: PackageIdentifier missing";
293 mqttContext->end(true);
294 } else {
295 LOG(DEBUG) << connectionName << " MQTT Broker: PacketIdentifier: 0x" << std::hex << std::setfill('0') << std::setw(4)
296 << unsubscribe.getPacketIdentifier();
297
298 for (const std::string& topic : unsubscribe.getTopics()) {
299 LOG(INFO) << connectionName << " MQTT Broker: Topic: " << topic;
300 }
301
302 for (const std::string& topic : unsubscribe.getTopics()) {
303 broker->unsubscribe(clientId, topic);
304 }
305
306 sendUnsuback(unsubscribe.getPacketIdentifier());
307
308 onUnsubscribe(unsubscribe);
309 }
310 }
uint16_t getPacketIdentifier() const
virtual void onUnsubscribe(const iot::mqtt::packets::Unsubscribe &unsubscribe)
Definition Mqtt.cpp:182
void sendUnsuback(uint16_t packetIdentifier) const
Definition Mqtt.cpp:334
void unsubscribe(const std::string &clientId)
Definition Broker.cpp:129

References sendUnsuback().

Here is the call graph for this function:

◆ createControlPacketDeserializer()

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

Implements iot::mqtt::Mqtt.

Definition at line 69 of file Mqtt.cpp.

69 {
71
72 switch (fixedHeader.getType()) {
73 case MQTT_CONNECT:
76 break;
77 case MQTT_PUBLISH:
80 break;
81 case MQTT_PUBACK:
84 break;
85 case MQTT_PUBREC:
88 break;
89 case MQTT_PUBREL:
92 break;
93 case MQTT_PUBCOMP:
96 break;
97 case MQTT_SUBSCRIBE:
100 break;
101 case MQTT_UNSUBSCRIBE:
104 break;
105 case MQTT_PINGREQ:
108 break;
109 case MQTT_DISCONNECT:
112 break;
113 default:
115 break;
116 }
117
119 }
uint8_t getType() const
uint32_t getRemainingLength() const
uint8_t getFlags() const
iot::mqtt::FixedHeader fixedHeader
Definition Mqtt.h:124
iot::mqtt::ControlPacketDeserializer * controlPacketDeserializer
Definition Mqtt.h:125
#define MQTT_CONNECT
Definition Connect.h:36
#define MQTT_DISCONNECT
Definition Disconnect.h:33
#define MQTT_PINGREQ
Definition Pingreq.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_SUBSCRIBE
Definition Subscribe.h:37
#define MQTT_UNSUBSCRIBE
Definition Unsubscribe.h:37

◆ deliverPacket()

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

Implements iot::mqtt::Mqtt.

Definition at line 121 of file Mqtt.cpp.

121 {
123 }
void deliverPacket(iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
Definition Mqtt.cpp:121

◆ getCleanSession()

bool iot::mqtt::server::Mqtt::getCleanSession ( ) const

Definition at line 398 of file Mqtt.cpp.

398 {
399 return cleanSession;
400 }

References cleanSession.

◆ getClientId()

std::string iot::mqtt::server::Mqtt::getClientId ( ) const

Definition at line 358 of file Mqtt.cpp.

358 {
359 return clientId;
360 }

◆ getConnectFlags()

uint8_t iot::mqtt::server::Mqtt::getConnectFlags ( ) const

Definition at line 350 of file Mqtt.cpp.

350 {
351 return connectFlags;
352 }

References connectFlags.

◆ getKeepAlive()

uint16_t iot::mqtt::server::Mqtt::getKeepAlive ( ) const

Definition at line 354 of file Mqtt.cpp.

354 {
355 return keepAlive;
356 }

References keepAlive.

◆ getLevel()

uint8_t iot::mqtt::server::Mqtt::getLevel ( ) const

Definition at line 346 of file Mqtt.cpp.

346 {
347 return level;
348 }

References level.

◆ getPassword()

std::string iot::mqtt::server::Mqtt::getPassword ( ) const

Definition at line 374 of file Mqtt.cpp.

374 {
375 return password;
376 }

◆ getPasswordFlag()

bool iot::mqtt::server::Mqtt::getPasswordFlag ( ) const

Definition at line 382 of file Mqtt.cpp.

382 {
383 return passwordFlag;
384 }

References passwordFlag.

◆ getProtocol()

std::string iot::mqtt::server::Mqtt::getProtocol ( ) const

Definition at line 342 of file Mqtt.cpp.

342 {
343 return protocol;
344 }

◆ getReflect()

bool iot::mqtt::server::Mqtt::getReflect ( ) const

Definition at line 402 of file Mqtt.cpp.

402 {
403 return reflect;
404 }

References reflect.

Referenced by iot::mqtt::server::broker::Session::sendPublish().

Here is the caller graph for this function:

◆ getUsername()

std::string iot::mqtt::server::Mqtt::getUsername ( ) const

Definition at line 370 of file Mqtt.cpp.

370 {
371 return username;
372 }

◆ getUsernameFlag()

bool iot::mqtt::server::Mqtt::getUsernameFlag ( ) const

Definition at line 378 of file Mqtt.cpp.

378 {
379 return usernameFlag;
380 }

References usernameFlag.

◆ getWillFlag()

bool iot::mqtt::server::Mqtt::getWillFlag ( ) const

Definition at line 394 of file Mqtt.cpp.

394 {
395 return willFlag;
396 }

References willFlag.

◆ getWillMessage()

std::string iot::mqtt::server::Mqtt::getWillMessage ( ) const

Definition at line 366 of file Mqtt.cpp.

366 {
367 return willMessage;
368 }

◆ getWillQoS()

uint8_t iot::mqtt::server::Mqtt::getWillQoS ( ) const

Definition at line 390 of file Mqtt.cpp.

390 {
391 return willQoS;
392 }

References willQoS.

◆ getWillRetain()

bool iot::mqtt::server::Mqtt::getWillRetain ( ) const

Definition at line 386 of file Mqtt.cpp.

386 {
387 return willRetain;
388 }

References willRetain.

◆ getWillTopic()

std::string iot::mqtt::server::Mqtt::getWillTopic ( ) const

Definition at line 362 of file Mqtt.cpp.

362 {
363 return willTopic;
364 }

◆ initSession() [1/2]

bool iot::mqtt::server::Mqtt::initSession ( const utils::Timeval & keepAlive)
private

Definition at line 125 of file Mqtt.cpp.

125 {
126 bool success = true;
127
129 LOG(ERROR) << connectionName << " MQTT Broker: Existing session found for ClientId = " << clientId;
130 LOG(ERROR) << connectionName << " MQTT Broker: closing";
132
133 willFlag = false;
134 success = false;
135 } else if (broker->hasRetainedSession(clientId)) {
136 LOG(INFO) << connectionName << " MQTT Broker: Retained session found for ClientId = " << clientId;
137 if (cleanSession) {
138 LOG(DEBUG) << connectionName << " New SessionId = " << this;
140
143 } else {
144 LOG(DEBUG) << connectionName << " Renew SessionId = " << this;
146
149 }
150 } else {
151 LOG(INFO) << connectionName << " MQTT Broker: No session found for ClientId = " << clientId;
152 LOG(INFO) << connectionName << " MQTT Broker: new SessionId = " << this;
153
155
157 }
158
159 return success;
160 }
void restartSession(const std::string &clientId)
Definition Broker.cpp:187
bool hasActiveSession(const std::string &clientId)
Definition Broker.cpp:165
Session * renewSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
Definition Broker.cpp:183
bool hasRetainedSession(const std::string &clientId)
Definition Broker.cpp:169
Session * newSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
Definition Broker.cpp:177
#define MQTT_CONNACK_ACCEPT
Definition Connack.h:37
#define MQTT_SESSION_PRESENT
Definition Connack.h:45

References cleanSession, sendConnack(), and willFlag.

Referenced by _onConnect().

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

◆ initSession() [2/2]

void iot::mqtt::Mqtt::initSession ( Session * session,
utils::Timeval keepAlive )
private

Definition at line 83 of file Mqtt.cpp.

152 {
153 this->session = session;
154
155 for (const auto& [packetIdentifier, publish] : session->publishMap) {
156 LOG(INFO) << connectionName << " MQTT: PUBLISH Resend";
157
158 send(publish);
159 }
160
161 for (const uint16_t packetIdentifier : session->pubrelPacketIdentifierSet) {
162 LOG(INFO) << connectionName << " MQTT: PUBREL Resend";
163
164 send(iot::mqtt::packets::Pubrel(packetIdentifier));
165 }
166
167 if (keepAlive > 0) {
168 keepAlive *= 1.5;
169
170 LOG(INFO) << connectionName << " MQTT: Keep alive initialized with: " << keepAlive;
171
173 [this, keepAlive]() {
174 LOG(ERROR) << connectionName << " MQTT: Keep-alive timer expired. Interval was: " << keepAlive;
176 },
177 keepAlive);
178 }
179
181 }
virtual void setTimeout(const utils::Timeval &timeout)=0
static Timer singleshotTimer(const std::function< void()> &dispatcher, const utils::Timeval &timeout)
Definition Timer.cpp:35
virtual core::socket::stream::SocketConnection * getSocketConnection() const =0
virtual void close()=0
core::timer::Timer keepAliveTimer
Definition Mqtt.h:129
Session * session
Definition Mqtt.h:133
void send(const iot::mqtt::ControlPacket &controlPacket) const
Definition Mqtt.cpp:183

◆ onConnect()

void iot::mqtt::server::Mqtt::onConnect ( const iot::mqtt::packets::Connect & connect)
privatevirtual

Definition at line 176 of file Mqtt.cpp.

176 {
177 }

◆ onDisconnect()

void iot::mqtt::server::Mqtt::onDisconnect ( const iot::mqtt::packets::Disconnect & disconnect)
privatevirtual

Definition at line 188 of file Mqtt.cpp.

188 {
189 }

◆ onPingreq()

void iot::mqtt::server::Mqtt::onPingreq ( const iot::mqtt::packets::Pingreq & pingreq)
privatevirtual

Definition at line 185 of file Mqtt.cpp.

185 {
186 }

◆ onSignal()

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

Implements iot::mqtt::Mqtt.

Definition at line 64 of file Mqtt.cpp.

64 {
65 willFlag = false;
66 return true;
67 }

References willFlag.

◆ onSubscribe()

void iot::mqtt::server::Mqtt::onSubscribe ( const iot::mqtt::packets::Subscribe & subscribe)
privatevirtual

Definition at line 179 of file Mqtt.cpp.

179 {
180 }

◆ onUnsubscribe()

void iot::mqtt::server::Mqtt::onUnsubscribe ( const iot::mqtt::packets::Unsubscribe & unsubscribe)
privatevirtual

Definition at line 182 of file Mqtt.cpp.

182 {
183 }

◆ releaseSession()

void iot::mqtt::server::Mqtt::releaseSession ( )
private

Definition at line 162 of file Mqtt.cpp.

162 {
163 if (broker->isActiveSession(clientId, this)) {
164 if (cleanSession) {
165 LOG(DEBUG) << connectionName << " MQTT Broker: Delete session for ClientId = " << clientId;
166 LOG(DEBUG) << connectionName << " MQTT Broker: SessionId = " << this;
168 } else {
169 LOG(DEBUG) << connectionName << " MQTT Broker: Retain session for ClientId = " << clientId;
170 LOG(DEBUG) << connectionName << " MQTT Broker: SessionId = " << this;
172 }
173 }
174 }
bool isActiveSession(const std::string &clientId, const Mqtt *mqtt)
Definition Broker.cpp:173
void deleteSession(const std::string &clientId)
Definition Broker.cpp:199
void retainSession(const std::string &clientId)
Definition Broker.cpp:195

References cleanSession.

Referenced by _onDisconnect(), and ~Mqtt().

Here is the caller graph for this function:

◆ sendConnack()

void iot::mqtt::server::Mqtt::sendConnack ( uint8_t returnCode,
uint8_t flags ) const

Definition at line 326 of file Mqtt.cpp.

326 { // Server
327 send(iot::mqtt::packets::Connack(returnCode, flags));
328 }

Referenced by _onConnect(), and initSession().

Here is the caller graph for this function:

◆ sendPingresp()

void iot::mqtt::server::Mqtt::sendPingresp ( ) const

Definition at line 338 of file Mqtt.cpp.

Referenced by _onPingreq().

Here is the caller graph for this function:

◆ sendSuback()

void iot::mqtt::server::Mqtt::sendSuback ( uint16_t packetIdentifier,
const std::list< uint8_t > & returnCodes ) const

Definition at line 330 of file Mqtt.cpp.

330 { // Server
331 send(iot::mqtt::packets::Suback(packetIdentifier, returnCodes));
332 }

◆ sendUnsuback()

void iot::mqtt::server::Mqtt::sendUnsuback ( uint16_t packetIdentifier) const

Definition at line 334 of file Mqtt.cpp.

334 { // Server
335 send(iot::mqtt::packets::Unsuback(packetIdentifier));
336 }

Referenced by _onUnsubscribe().

Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ iot::mqtt::server::packets::Connect

Definition at line 143 of file Mqtt.h.

◆ iot::mqtt::server::packets::Disconnect

Definition at line 147 of file Mqtt.h.

◆ iot::mqtt::server::packets::Pingreq

Definition at line 146 of file Mqtt.h.

◆ iot::mqtt::server::packets::Puback

Definition at line 151 of file Mqtt.h.

◆ iot::mqtt::server::packets::Pubcomp

Definition at line 149 of file Mqtt.h.

◆ iot::mqtt::server::packets::Publish

Definition at line 148 of file Mqtt.h.

◆ iot::mqtt::server::packets::Pubrec

Definition at line 150 of file Mqtt.h.

◆ iot::mqtt::server::packets::Pubrel

Definition at line 152 of file Mqtt.h.

◆ iot::mqtt::server::packets::Subscribe

Definition at line 144 of file Mqtt.h.

◆ iot::mqtt::server::packets::Unsubscribe

Definition at line 145 of file Mqtt.h.

Member Data Documentation

◆ broker

std::shared_ptr<iot::mqtt::server::broker::Broker> iot::mqtt::server::Mqtt::broker
protected

Definition at line 141 of file Mqtt.h.

◆ cleanSession

bool iot::mqtt::server::Mqtt::cleanSession = false
protected

Definition at line 138 of file Mqtt.h.

Referenced by _onConnect(), getCleanSession(), initSession(), and releaseSession().

◆ connectFlags

uint8_t iot::mqtt::server::Mqtt::connectFlags = 0
protected

Definition at line 125 of file Mqtt.h.

Referenced by _onConnect(), and getConnectFlags().

◆ keepAlive

uint16_t iot::mqtt::server::Mqtt::keepAlive = 0
protected

Definition at line 126 of file Mqtt.h.

Referenced by _onConnect(), and getKeepAlive().

◆ level

uint8_t iot::mqtt::server::Mqtt::level = 0
protected

Definition at line 124 of file Mqtt.h.

Referenced by _onConnect(), and getLevel().

◆ password

std::string iot::mqtt::server::Mqtt::password
protected

Definition at line 131 of file Mqtt.h.

◆ passwordFlag

bool iot::mqtt::server::Mqtt::passwordFlag = false
protected

Definition at line 134 of file Mqtt.h.

Referenced by _onConnect(), and getPasswordFlag().

◆ protocol

std::string iot::mqtt::server::Mqtt::protocol
protected

Definition at line 123 of file Mqtt.h.

◆ reflect

bool iot::mqtt::server::Mqtt::reflect = true
protected

Definition at line 139 of file Mqtt.h.

Referenced by _onConnect(), and getReflect().

◆ username

std::string iot::mqtt::server::Mqtt::username
protected

Definition at line 130 of file Mqtt.h.

◆ usernameFlag

bool iot::mqtt::server::Mqtt::usernameFlag = false
protected

Definition at line 133 of file Mqtt.h.

Referenced by _onConnect(), and getUsernameFlag().

◆ willFlag

bool iot::mqtt::server::Mqtt::willFlag = false
protected

Definition at line 137 of file Mqtt.h.

Referenced by _onConnect(), _onDisconnect(), getWillFlag(), initSession(), onSignal(), and ~Mqtt().

◆ willMessage

std::string iot::mqtt::server::Mqtt::willMessage
protected

Definition at line 129 of file Mqtt.h.

◆ willQoS

uint8_t iot::mqtt::server::Mqtt::willQoS = 0
protected

Definition at line 136 of file Mqtt.h.

Referenced by _onConnect(), and getWillQoS().

◆ willRetain

bool iot::mqtt::server::Mqtt::willRetain = false
protected

Definition at line 135 of file Mqtt.h.

Referenced by _onConnect(), and getWillRetain().

◆ willTopic

std::string iot::mqtt::server::Mqtt::willTopic
protected

Definition at line 128 of file Mqtt.h.


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