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_SERVER_SOCKETCONTEXT_H
21#define IOT_MQTT_SERVER_SOCKETCONTEXT_H
22
23#include "iot/mqtt/Mqtt.h" // IWYU pragma: export
24
25namespace iot::mqtt {
26 namespace packets {
27 class Connect;
28 class Disconnect;
29 class Pingreq;
30 class Subscribe;
31 class Unsubscribe;
32 } // namespace packets
33
34 namespace server {
35 namespace broker {
36 class Broker;
37 } // namespace broker
38
39 namespace packets {
40 class Connect;
41 class Disconnect;
42 class Pingreq;
43 class Publish;
44 class Puback;
45 class Pubcomp;
46 class Pubrec;
47 class Pubrel;
48 class Subscribe;
49 class Unsubscribe;
50 } // namespace packets
51 } // namespace server
52} // namespace iot::mqtt
53
54#ifndef DOXYGEN_SHOULD_SKIP_THIS
55
56#include <cstdint>
57#include <list>
58#include <memory>
59#include <string>
60
61#endif // DOXYGEN_SHOULD_SKIP_THIS
62
63namespace iot::mqtt::server {
64
65 class Mqtt : public iot::mqtt::Mqtt {
66 private:
67 using Super = iot::mqtt::Mqtt;
68
69 public:
70 explicit Mqtt(const std::string& connectionName, const std::shared_ptr<broker::Broker>& broker);
71
72 ~Mqtt() override;
73
74 private:
75 iot::mqtt::ControlPacketDeserializer* createControlPacketDeserializer(iot::mqtt::FixedHeader& fixedHeader) final;
76 void deliverPacket(iot::mqtt::ControlPacketDeserializer* controlPacketDeserializer) override;
77
78 protected:
79 bool onSignal(int sig) override;
80
81 private:
82 using Super::initSession;
83 bool initSession(const utils::Timeval& keepAlive);
84 void releaseSession();
85
86 virtual void onConnect(const iot::mqtt::packets::Connect& connect);
87 virtual void onSubscribe(const iot::mqtt::packets::Subscribe& subscribe);
88 virtual void onUnsubscribe(const iot::mqtt::packets::Unsubscribe& unsubscribe);
89 virtual void onPingreq(const iot::mqtt::packets::Pingreq& pingreq);
90 virtual void onDisconnect(const iot::mqtt::packets::Disconnect& disconnect);
91
92 void _onConnect(const iot::mqtt::server::packets::Connect& connect);
93 void _onPublish(const iot::mqtt::server::packets::Publish& publish);
94 void _onSubscribe(const iot::mqtt::server::packets::Subscribe& subscribe);
95 void _onUnsubscribe(const iot::mqtt::server::packets::Unsubscribe& unsubscribe);
96 void _onPingreq(const iot::mqtt::server::packets::Pingreq& pingreq);
97 void _onDisconnect(const iot::mqtt::server::packets::Disconnect& disconnect);
98
99 public:
100 void sendConnack(uint8_t returnCode, uint8_t flags) const;
101 void sendSuback(uint16_t packetIdentifier, const std::list<uint8_t>& returnCodes) const;
102 void sendUnsuback(uint16_t packetIdentifier) const;
103 void sendPingresp() const;
104
105 std::string getProtocol() const;
106 uint8_t getLevel() const;
107 uint8_t getConnectFlags() const;
108 uint16_t getKeepAlive() const;
109 std::string getClientId() const;
110 std::string getWillTopic() const;
111 std::string getWillMessage() const;
112 std::string getUsername() const;
113 std::string getPassword() const;
114 bool getUsernameFlag() const;
115 bool getPasswordFlag() const;
116 bool getWillRetain() const;
117 uint8_t getWillQoS() const;
118 bool getWillFlag() const;
119 bool getCleanSession() const;
120 bool getReflect() const;
121
122 protected:
124 uint8_t level = 0;
125 uint8_t connectFlags = 0;
126 uint16_t keepAlive = 0;
127
132
133 bool usernameFlag = false;
134 bool passwordFlag = false;
135 bool willRetain = false;
136 uint8_t willQoS = 0;
137 bool willFlag = false;
138 bool cleanSession = false;
139 bool reflect = true;
140
141 std::shared_ptr<iot::mqtt::server::broker::Broker> broker;
142
143 friend class iot::mqtt::server::packets::Connect;
144 friend class iot::mqtt::server::packets::Subscribe;
145 friend class iot::mqtt::server::packets::Unsubscribe;
146 friend class iot::mqtt::server::packets::Pingreq;
147 friend class iot::mqtt::server::packets::Disconnect;
148 friend class iot::mqtt::server::packets::Publish;
149 friend class iot::mqtt::server::packets::Pubcomp;
150 friend class iot::mqtt::server::packets::Pubrec;
151 friend class iot::mqtt::server::packets::Puback;
152 friend class iot::mqtt::server::packets::Pubrel;
153 };
154
155} // namespace iot::mqtt::server
156
157#endif // IOT_MQTT_SERVER_SOCKETCONTEXT_H
bool getReflect() const
Definition Mqtt.cpp:402
std::shared_ptr< iot::mqtt::server::broker::Broker > broker
Definition Mqtt.h:141
uint8_t getLevel() const
Definition Mqtt.cpp:346
bool getPasswordFlag() const
Definition Mqtt.cpp:382
void sendSuback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes) const
Definition Mqtt.cpp:330
bool getCleanSession() const
Definition Mqtt.cpp:398
std::string password
Definition Mqtt.h:131
bool onSignal(int sig) override
Definition Mqtt.cpp:64
uint8_t getConnectFlags() const
Definition Mqtt.cpp:350
uint16_t getKeepAlive() const
Definition Mqtt.cpp:354
bool getWillRetain() const
Definition Mqtt.cpp:386
std::string getProtocol() const
Definition Mqtt.cpp:342
bool getUsernameFlag() const
Definition Mqtt.cpp:378
std::string getWillMessage() const
Definition Mqtt.cpp:366
void sendPingresp() const
Definition Mqtt.cpp:338
std::string willMessage
Definition Mqtt.h:129
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
std::string getClientId() const
Definition Mqtt.cpp:358
uint8_t getWillQoS() const
Definition Mqtt.cpp:390
std::string getWillTopic() const
Definition Mqtt.cpp:362
bool getWillFlag() const
Definition Mqtt.cpp:394
std::string willTopic
Definition Mqtt.h:128
void sendUnsuback(uint16_t packetIdentifier) const
Definition Mqtt.cpp:334
std::string getUsername() const
Definition Mqtt.cpp:370
std::string getPassword() const
Definition Mqtt.cpp:374
void sendPublish(iot::mqtt::server::broker::Message &message, uint8_t qoS, bool retain)
Definition Session.cpp:44
nlohmann::json toJson() const final
Definition Session.cpp:99
Session(iot::mqtt::server::Mqtt *mqtt)
Definition Session.cpp:40
void fromJson(const nlohmann::json &json)
Definition Session.cpp:109
Session * renew(iot::mqtt::server::Mqtt *mqtt)
Definition Session.cpp:81
bool isOwnedBy(const iot::mqtt::server::Mqtt *mqtt) const
Definition Session.cpp:95
Definition Config.h:37