2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#ifndef IOT_MQTT_SERVER_BROKER_SESSION_H
43#define IOT_MQTT_SERVER_BROKER_SESSION_H
45#include "iot/mqtt/Session.h"
46#include "iot/mqtt/server/broker/Message.h"
48namespace iot::mqtt::server {
52#ifndef DOXYGEN_SHOULD_SKIP_THIS
56#include <nlohmann/json_fwd.hpp>
60namespace iot::mqtt::server::
broker {
78 nlohmann::json
toJson()
const final;
79 void fromJson(
const nlohmann::json& json);
82 iot::mqtt::server::
Mqtt* mqtt =
nullptr;
virtual void end(bool fatal=false)=0
MqttContext * mqttContext
virtual void onPublish(const iot::mqtt::packets::Publish &publish)
std::string connectionName
bool _onPublish(const iot::mqtt::packets::Publish &publish)
void send(const iot::mqtt::ControlPacket &controlPacket) const
Mqtt(const std::string &connectionName)
void initSession(Session *session, utils::Timeval keepAlive)
const std::string & getName() const
Connack(uint8_t returncode, uint8_t acknowledgeFlags)
uint8_t getWillQoS() const
std::string getClientId() const
std::string getWillTopic() const
uint16_t getKeepAlive() const
bool getUsernameFlag() const
bool getCleanSession() const
std::string getUsername() const
uint8_t getConnectFlags() const
bool getPasswordFlag() const
std::string getPassword() const
std::string getWillMessage() const
bool getWillRetain() const
std::string getProtocol() const
std::string getTopic() const
std::string getMessage() const
Suback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes)
const std::list< iot::mqtt::Topic > & getTopics() const
uint16_t getPacketIdentifier() const
Unsuback(uint16_t packetIdentifier)
uint16_t getPacketIdentifier() const
const std::list< std::string > & getTopics() const
virtual void deliverPacket(iot::mqtt::server::Mqtt *mqtt)=0
virtual void onConnect(const iot::mqtt::packets::Connect &connect)
bool getPasswordFlag() const
void subscribe(const std::string &topic, uint8_t qoS) const
void sendSuback(uint16_t packetIdentifier, const std::list< uint8_t > &returnCodes) const
bool getCleanSession() const
bool onSignal(int sig) override
uint8_t getConnectFlags() const
virtual void onSubscribe(const iot::mqtt::packets::Subscribe &subscribe)
uint16_t getKeepAlive() const
void _onPingreq(const iot::mqtt::server::packets::Pingreq &pingreq)
virtual void onPingreq(const iot::mqtt::packets::Pingreq &pingreq)
bool getWillRetain() const
std::string getProtocol() const
void _onUnsubscribe(const iot::mqtt::server::packets::Unsubscribe &unsubscribe)
bool getUsernameFlag() const
virtual void onDisconnect(const iot::mqtt::packets::Disconnect &disconnect)
void _onPublish(const iot::mqtt::server::packets::Publish &publish)
void deliverPacket(iot::mqtt::ControlPacketDeserializer *controlPacketDeserializer) override
void _onSubscribe(const iot::mqtt::server::packets::Subscribe &subscribe)
iot::mqtt::ControlPacketDeserializer * createControlPacketDeserializer(iot::mqtt::FixedHeader &fixedHeader) final
bool initSession(const utils::Timeval &keepAlive)
std::list< std::string > getSubscriptions() const
std::string getWillMessage() const
void _onConnect(const iot::mqtt::server::packets::Connect &connect)
void sendPingresp() const
void sendConnack(uint8_t returnCode, uint8_t flags) const
std::string getClientId() const
uint8_t getWillQoS() const
virtual void onUnsubscribe(const iot::mqtt::packets::Unsubscribe &unsubscribe)
std::string getWillTopic() const
void sendUnsuback(uint16_t packetIdentifier) const
void _onDisconnect(const iot::mqtt::server::packets::Disconnect &disconnect)
Mqtt(const std::string &connectionName, const std::shared_ptr< broker::Broker > &broker)
std::string getUsername() const
void unsubscribe(const std::string &topic) const
std::string getPassword() const
void restartSession(const std::string &clientId)
std::string sessionStoreFileName
uint8_t subscribe(const std::string &clientId, const std::string &topic, uint8_t qoS)
bool hasActiveSession(const std::string &clientId)
bool isActiveSession(const std::string &clientId, const Mqtt *mqtt)
iot::mqtt::server::broker::RetainTree retainTree
void publish(const std::string &originClientId, const std::string &topic, const std::string &message, uint8_t qoS, bool retain)
std::map< std::string, iot::mqtt::server::broker::Session > sessionStore
std::list< std::string > getSubscriptions(const std::string &clientId) const
Broker(uint8_t maxQoS, const std::string &sessionStoreFileName)
bool hasSession(const std::string &clientId)
void appear(const std::string &clientId, const std::string &topic, uint8_t qoS)
static std::shared_ptr< Broker > instance(uint8_t maxQoS, const std::string &sessionStoreFileName)
void unsubscribe(const std::string &clientId, const std::string &topic)
Session * renewSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
void deleteSession(const std::string &clientId)
iot::mqtt::server::broker::RetainTree & getRetainedTree()
void unsubscribe(const std::string &clientId)
std::map< std::string, std::list< std::pair< std::string, uint8_t > > > getSubscriptionTree() const
bool hasRetainedSession(const std::string &clientId)
iot::mqtt::server::broker::SubscribtionTree subscribtionTree
Session * newSession(const std::string &clientId, iot::mqtt::server::Mqtt *mqtt)
void sendPublish(const std::string &clientId, Message &message, uint8_t qoS, bool retain)
void retainSession(const std::string &clientId)
void setMessage(const std::string &message)
const std::string & getOriginClientId() const
std::string originClientId
nlohmann::json toJson() const
const std::string & getTopic() const
void setTopic(const std::string &topic)
bool getOriginRetain() const
const std::string & getMessage() const
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)
Message & fromJson(const nlohmann::json &json)
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)
nlohmann::json toJson() const
std::list< std::pair< std::string, std::string > > getRetainTree() const
std::map< std::string, TopicLevel > subTopicLevels
bool release(std::string topic)
void appear(const std::string &clientId, const std::string &topic, uint8_t qoS)
void retain(Message &&message)
void fromJson(const nlohmann::json &json)
std::list< std::pair< std::string, std::string > > getRetainedTree() const
RetainTree(iot::mqtt::server::broker::Broker *broker)
nlohmann::json toJson() const
void release(const std::string &topic)
void sendPublish(iot::mqtt::server::broker::Message &message, uint8_t qoS, bool retain)
std::deque< Message > messageQueue
nlohmann::json toJson() const final
Session(iot::mqtt::server::Mqtt *mqtt)
void fromJson(const nlohmann::json &json)
Session * renew(iot::mqtt::server::Mqtt *mqtt)
bool isOwnedBy(const iot::mqtt::server::Mqtt *mqtt) const
Connect(uint32_t remainingLength, uint8_t flags)
bool isFakedClientId() const
Disconnect(uint32_t remainingLength, uint8_t flags)
Pingreq(uint32_t remainingLength, uint8_t flags)
Puback(uint32_t remainingLength, uint8_t flags)
Pubcomp(uint32_t remainingLength, uint8_t flags)
Publish(uint32_t remainingLength, uint8_t flags)
Pubrec(uint32_t remainingLength, uint8_t flags)
Pubrel(uint32_t remainingLength, uint8_t flags)
Subscribe(uint32_t remainingLength, uint8_t flags)
Unsubscribe(uint32_t remainingLength, uint8_t flags)
#define MQTT_CONNACK_ACCEPT
#define MQTT_CONNACK_UNACEPTABLEVERSION
#define MQTT_SESSION_PRESENT
#define MQTT_CONNACK_IDENTIFIERREJECTED
#define MQTT_VERSION_3_1_1