SNode.C
Loading...
Searching...
No Matches
Message.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/*
21 * MIT License
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to deal
25 * in the Software without restriction, including without limitation the rights
26 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27 * copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
39 * THE SOFTWARE.
40 */
41
42#ifndef IOT_MQTT_SERVER_BROKER_MESSAGE_H
43#define IOT_MQTT_SERVER_BROKER_MESSAGE_H
44
45#ifndef DOXYGEN_SHOULD_SKIP_THIS
46
47#include <cstdint>
48#include <nlohmann/json_fwd.hpp>
49#include <string>
50
51#endif // DOXYGEN_SHOULD_SKIP_THIS
52
53namespace iot::mqtt::server::broker {
54
55 class Message {
56 public:
57 Message() = default;
58 Message(const std::string& originClientId, const std::string& topic, const std::string& message, uint8_t qoS, bool originRetain);
59 Message(const Message& message) = default;
60
61 Message& operator=(const Message&) = default;
62
63 const std::string& getOriginClientId() const;
64
65 const std::string& getTopic() const;
66 void setTopic(const std::string& topic);
67
68 const std::string& getMessage() const;
69 void setMessage(const std::string& message);
70
71 uint8_t getQoS() const;
72 void setQoS(uint8_t qoS);
73
74 bool getOriginRetain() const;
75
76 nlohmann::json toJson() const;
77 Message& fromJson(const nlohmann::json& json);
78
79 private:
80 std::string originClientId;
81 std::string topic;
82 std::string message;
83 uint8_t qoS = 0;
84 bool originRetain = false;
85 };
86
87} // namespace iot::mqtt::server::broker
88
89#endif // IOT_MQTT_SERVER_BROKER_MESSAGE_H
uint8_t getType() const
uint32_t getRemainingLength() const
uint8_t getFlags() const
virtual void end(bool fatal=false)=0
MqttContext * mqttContext
Definition Mqtt.h:158
virtual void onPublish(const iot::mqtt::packets::Publish &publish)
Definition Mqtt.cpp:253
std::string connectionName
Definition Mqtt.h:142
bool _onPublish(const iot::mqtt::packets::Publish &publish)
Definition Mqtt.cpp:268
void send(const iot::mqtt::ControlPacket &controlPacket) const
Definition Mqtt.cpp:205
std::string clientId
Definition Mqtt.h:143
Mqtt(const std::string &connectionName)
Definition Mqtt.cpp:69
void initSession(Session *session, utils::Timeval keepAlive)
Definition Mqtt.cpp:174
const std::string & getName() const
Definition Topic.cpp:58
uint8_t getQoS() const
Definition Topic.cpp:62
Connack(uint8_t returncode, uint8_t acknowledgeFlags)
Definition Connack.cpp:57
uint8_t getLevel() const
Definition Connect.cpp:124
uint8_t getWillQoS() const
Definition Connect.cpp:152
std::string getClientId() const
Definition Connect.cpp:136
std::string getWillTopic() const
Definition Connect.cpp:168
uint16_t getKeepAlive() const
Definition Connect.cpp:132
std::string getUsername() const
Definition Connect.cpp:176
uint8_t getConnectFlags() const
Definition Connect.cpp:128
std::string getPassword() const
Definition Connect.cpp:180
std::string getWillMessage() const
Definition Connect.cpp:172
std::string getProtocol() const
Definition Connect.cpp:120
uint8_t getQoS() const
Definition Publish.cpp:85
std::string getTopic() const
Definition Publish.cpp:93
std::string getMessage() const
Definition Publish.cpp:97
Suback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes)
Definition Suback.cpp:57
const std::list< iot::mqtt::Topic > & getTopics() const
Definition Subscribe.cpp:86
uint16_t getPacketIdentifier() const
Definition Subscribe.cpp:82
Unsuback(uint16_t packetIdentifier)
Definition Unsuback.cpp:57
uint16_t getPacketIdentifier() const
const std::list< std::string > & getTopics() const
virtual void deliverPacket(iot::mqtt::server::Mqtt *mqtt)=0
bool getReflect() const
Definition Mqtt.cpp:436
virtual void onConnect(const iot::mqtt::packets::Connect &connect)
Definition Mqtt.cpp:206
uint8_t getLevel() const
Definition Mqtt.cpp:380
bool getPasswordFlag() const
Definition Mqtt.cpp:416
void subscribe(const std::string &topic, uint8_t qoS) const
Definition Mqtt.cpp:86
void sendSuback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes) const
Definition Mqtt.cpp:360
bool getCleanSession() const
Definition Mqtt.cpp:432
std::string password
Definition Mqtt.h:158
bool onSignal(int sig) override
Definition Mqtt.cpp:94
uint8_t getConnectFlags() const
Definition Mqtt.cpp:384
virtual void onSubscribe(const iot::mqtt::packets::Subscribe &subscribe)
Definition Mqtt.cpp:209
uint16_t getKeepAlive() const
Definition Mqtt.cpp:388
void _onPingreq(const iot::mqtt::server::packets::Pingreq &pingreq)
Definition Mqtt.cpp:342
virtual void onPingreq(const iot::mqtt::packets::Pingreq &pingreq)
Definition Mqtt.cpp:215
bool getWillRetain() const
Definition Mqtt.cpp:420
std::string getProtocol() const
Definition Mqtt.cpp:376
void _onUnsubscribe(const iot::mqtt::server::packets::Unsubscribe &unsubscribe)
Definition Mqtt.cpp:320
bool getUsernameFlag() const
Definition Mqtt.cpp:412
virtual void onDisconnect(const iot::mqtt::packets::Disconnect &disconnect)
Definition Mqtt.cpp:218
void _onPublish(const iot::mqtt::server::packets::Publish &publish)
Definition Mqtt.cpp:287
void deliverPacket(iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
Definition Mqtt.cpp:151
void _onSubscribe(const iot::mqtt::server::packets::Subscribe &subscribe)
Definition Mqtt.cpp:295
iot::mqtt::ControlPacketDeserializer * createControlPacketDeserializer(iot::mqtt::FixedHeader &fixedHeader) final
Definition Mqtt.cpp:99
bool initSession(const utils::Timeval &keepAlive)
Definition Mqtt.cpp:155
std::list< std::string > getSubscriptions() const
Definition Mqtt.cpp:372
std::string getWillMessage() const
Definition Mqtt.cpp:400
void _onConnect(const iot::mqtt::server::packets::Connect &connect)
Definition Mqtt.cpp:221
void sendPingresp() const
Definition Mqtt.cpp:368
std::string willMessage
Definition Mqtt.h:156
void sendConnack(uint8_t returnCode, uint8_t flags) const
Definition Mqtt.cpp:356
std::string username
Definition Mqtt.h:157
std::string protocol
Definition Mqtt.h:150
std::string getClientId() const
Definition Mqtt.cpp:392
uint8_t getWillQoS() const
Definition Mqtt.cpp:424
virtual void onUnsubscribe(const iot::mqtt::packets::Unsubscribe &unsubscribe)
Definition Mqtt.cpp:212
std::string getWillTopic() const
Definition Mqtt.cpp:396
bool getWillFlag() const
Definition Mqtt.cpp:428
std::string willTopic
Definition Mqtt.h:155
void sendUnsuback(uint16_t packetIdentifier) const
Definition Mqtt.cpp:364
void _onDisconnect(const iot::mqtt::server::packets::Disconnect &disconnect)
Definition Mqtt.cpp:348
Mqtt(const std::string &connectionName, const std::shared_ptr< broker::Broker > &broker)
Definition Mqtt.cpp:73
std::string getUsername() const
Definition Mqtt.cpp:404
void unsubscribe(const std::string &topic) const
Definition Mqtt.cpp:90
std::string getPassword() const
Definition Mqtt.cpp:408
void restartSession(const std::string &clientId)
Definition Broker.cpp:220
uint8_t subscribe(const std::string &clientId, const std::string &topic, uint8_t qoS)
Definition Broker.cpp:163
bool hasActiveSession(const std::string &clientId)
Definition Broker.cpp:198
bool isActiveSession(const std::string &clientId, const Mqtt *mqtt)
Definition Broker.cpp:206
iot::mqtt::server::broker::RetainTree retainTree
Definition Broker.h:112
void publish(const std::string &originClientId, const std::string &topic, const std::string &message, uint8_t qoS, bool retain)
Definition Broker.cpp:155
std::map< std::string, iot::mqtt::server::broker::Session > sessionStore
Definition Broker.h:114
std::list< std::string > getSubscriptions(const std::string &clientId) const
Definition Broker.cpp:182
Broker(uint8_t maxQoS, const std::string &sessionStoreFileName)
Definition Broker.cpp:60
bool hasSession(const std::string &clientId)
Definition Broker.cpp:194
void appear(const std::string &clientId, const std::string &topic, uint8_t qoS)
Definition Broker.cpp:146
static std::shared_ptr< Broker > instance(uint8_t maxQoS, const std::string &sessionStoreFileName)
Definition Broker.cpp:140
void unsubscribe(const std::string &clientId, const std::string &topic)
Definition Broker.cpp:178
Session * renewSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
Definition Broker.cpp:216
void deleteSession(const std::string &clientId)
Definition Broker.cpp:232
iot::mqtt::server::broker::RetainTree & getRetainedTree()
Definition Broker.cpp:190
void unsubscribe(const std::string &clientId)
Definition Broker.cpp:150
std::map< std::string, std::list< std::pair< std::string, uint8_t > > > getSubscriptionTree() const
Definition Broker.cpp:186
bool hasRetainedSession(const std::string &clientId)
Definition Broker.cpp:202
iot::mqtt::server::broker::SubscribtionTree subscribtionTree
Definition Broker.h:111
Session * newSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
Definition Broker.cpp:210
void sendPublish(const std::string &clientId, Message &message, uint8_t qoS, bool retain)
Definition Broker.cpp:237
void retainSession(const std::string &clientId)
Definition Broker.cpp:228
void setMessage(const std::string &message)
Definition Message.cpp:78
const std::string & getOriginClientId() const
Definition Message.cpp:62
nlohmann::json toJson() const
Definition Message.cpp:94
const std::string & getTopic() const
Definition Message.cpp:66
void setTopic(const std::string &topic)
Definition Message.cpp:70
const std::string & getMessage() const
Definition Message.cpp:74
Message & operator=(const Message &)=default
Message(const Message &message)=default
Message(const std::string &originClientId, const std::string &topic, const std::string &message, uint8_t qoS, bool originRetain)
Definition Message.cpp:53
Message & fromJson(const nlohmann::json &json)
Definition Message.cpp:105
void retain(const Message &message, std::string topic)
std::list< std::pair< std::string, std::string > > getRetainTree(const std::string &absoluteTopicLevel) const
void appear(const std::string &clientId, uint8_t clientQoS)
TopicLevel(iot::mqtt::server::broker::Broker *broker)
TopicLevel & fromJson(const nlohmann::json &json)
void appear(const std::string &clientId, std::string topic, uint8_t qoS)
std::list< std::pair< std::string, std::string > > getRetainTree() const
std::map< std::string, TopicLevel > subTopicLevels
Definition RetainTree.h:105
void appear(const std::string &clientId, const std::string &topic, uint8_t qoS)
void fromJson(const nlohmann::json &json)
std::list< std::pair< std::string, std::string > > getRetainedTree() const
RetainTree(iot::mqtt::server::broker::Broker *broker)
void release(const std::string &topic)
Connect(uint32_t remainingLength, uint8_t flags)
Definition Connect.cpp:56
Disconnect(uint32_t remainingLength, uint8_t flags)
Pingreq(uint32_t remainingLength, uint8_t flags)
Definition Pingreq.cpp:52
Puback(uint32_t remainingLength, uint8_t flags)
Definition Puback.cpp:52
Pubcomp(uint32_t remainingLength, uint8_t flags)
Definition Pubcomp.cpp:52
Publish(uint32_t remainingLength, uint8_t flags)
Definition Publish.cpp:52
Pubrec(uint32_t remainingLength, uint8_t flags)
Definition Pubrec.cpp:52
Pubrel(uint32_t remainingLength, uint8_t flags)
Definition Pubrel.cpp:52
Subscribe(uint32_t remainingLength, uint8_t flags)
Definition Subscribe.cpp:54
Unsubscribe(uint32_t remainingLength, uint8_t flags)
#define MQTT_SESSION_NEW
Definition Connack.h:66
#define MQTT_CONNACK_ACCEPT
Definition Connack.h:59
#define MQTT_CONNACK_UNACEPTABLEVERSION
Definition Connack.h:60
#define MQTT_SESSION_PRESENT
Definition Connack.h:67
#define MQTT_CONNACK_IDENTIFIERREJECTED
Definition Connack.h:61
#define MQTT_CONNECT
Definition Connect.h:58
#define MQTT_VERSION_3_1_1
Definition Connect.h:60
#define MQTT_DISCONNECT
Definition Disconnect.h:55
#define MQTT_PINGREQ
Definition Pingreq.h:55
#define MQTT_PUBACK
Definition Puback.h:57
#define MQTT_PUBCOMP
Definition Pubcomp.h:57
#define MQTT_PUBLISH
Definition Publish.h:58
#define MQTT_PUBREC
Definition Pubrec.h:57
#define MQTT_PUBREL
Definition Pubrel.h:57
#define MQTT_SUBSCRIBE
Definition Subscribe.h:59
#define MQTT_UNSUBSCRIBE
Definition Unsubscribe.h:59