Commit e3ad153ce46c38b642d289a92172f2968d6302c6
1 parent
21bf9bf5
Will stuff in connect
Showing
3 changed files
with
21 additions
and
0 deletions
client.cpp
| @@ -241,6 +241,14 @@ void Client::setClientProperties(const std::string &clientId, const std::string | @@ -241,6 +241,14 @@ void Client::setClientProperties(const std::string &clientId, const std::string | ||
| 241 | this->keepalive = keepalive; | 241 | this->keepalive = keepalive; |
| 242 | } | 242 | } |
| 243 | 243 | ||
| 244 | +void Client::setWill(const std::string &topic, const std::string &payload, bool retain, char qos) | ||
| 245 | +{ | ||
| 246 | + this->will_topic = topic; | ||
| 247 | + this->will_payload = payload; | ||
| 248 | + this->will_retain = retain; | ||
| 249 | + this->will_qos = qos; | ||
| 250 | +} | ||
| 251 | + | ||
| 244 | 252 | ||
| 245 | 253 | ||
| 246 | 254 |
client.h
| @@ -41,6 +41,11 @@ class Client | @@ -41,6 +41,11 @@ class Client | ||
| 41 | std::string username; | 41 | std::string username; |
| 42 | uint16_t keepalive = 0; | 42 | uint16_t keepalive = 0; |
| 43 | 43 | ||
| 44 | + std::string will_topic; | ||
| 45 | + std::string will_payload; | ||
| 46 | + bool will_retain = false; | ||
| 47 | + char will_qos = 0; | ||
| 48 | + | ||
| 44 | ThreadData_p threadData; | 49 | ThreadData_p threadData; |
| 45 | std::mutex writeBufMutex; | 50 | std::mutex writeBufMutex; |
| 46 | 51 | ||
| @@ -108,6 +113,7 @@ public: | @@ -108,6 +113,7 @@ public: | ||
| 108 | bool readFdIntoBuffer(); | 113 | bool readFdIntoBuffer(); |
| 109 | bool bufferToMqttPackets(std::vector<MqttPacket> &packetQueueIn, Client_p &sender); | 114 | bool bufferToMqttPackets(std::vector<MqttPacket> &packetQueueIn, Client_p &sender); |
| 110 | void setClientProperties(const std::string &clientId, const std::string username, bool connectPacketSeen, uint16_t keepalive); | 115 | void setClientProperties(const std::string &clientId, const std::string username, bool connectPacketSeen, uint16_t keepalive); |
| 116 | + void setWill(const std::string &topic, const std::string &payload, bool retain, char qos); | ||
| 111 | void setAuthenticated(bool value) { authenticated = value;} | 117 | void setAuthenticated(bool value) { authenticated = value;} |
| 112 | bool getAuthenticated() { return authenticated; } | 118 | bool getAuthenticated() { return authenticated; } |
| 113 | bool hasConnectPacketSeen() { return connectPacketSeen; } | 119 | bool hasConnectPacketSeen() { return connectPacketSeen; } |
mqttpacket.cpp
| @@ -133,10 +133,16 @@ void MqttPacket::handleConnect() | @@ -133,10 +133,16 @@ void MqttPacket::handleConnect() | ||
| 133 | 133 | ||
| 134 | std::string username; | 134 | std::string username; |
| 135 | std::string password; | 135 | std::string password; |
| 136 | + std::string will_topic; | ||
| 137 | + std::string will_payload; | ||
| 136 | 138 | ||
| 137 | if (will_flag) | 139 | if (will_flag) |
| 138 | { | 140 | { |
| 141 | + uint16_t will_topic_length = readTwoBytesToUInt16(); | ||
| 142 | + will_topic = std::string(readBytes(will_topic_length), will_topic_length); | ||
| 139 | 143 | ||
| 144 | + uint16_t will_payload_length = readTwoBytesToUInt16(); | ||
| 145 | + will_payload = std::string(readBytes(will_payload_length), will_payload_length); | ||
| 140 | } | 146 | } |
| 141 | if (user_name_flag) | 147 | if (user_name_flag) |
| 142 | { | 148 | { |
| @@ -152,6 +158,7 @@ void MqttPacket::handleConnect() | @@ -152,6 +158,7 @@ void MqttPacket::handleConnect() | ||
| 152 | // TODO: validate UTF8 encoded username/password. | 158 | // TODO: validate UTF8 encoded username/password. |
| 153 | 159 | ||
| 154 | sender->setClientProperties(client_id, username, true, keep_alive); | 160 | sender->setClientProperties(client_id, username, true, keep_alive); |
| 161 | + sender->setWill(will_topic, will_payload, will_retain, will_qos); | ||
| 155 | sender->setAuthenticated(true); | 162 | sender->setAuthenticated(true); |
| 156 | 163 | ||
| 157 | std::cout << "Connect: " << sender->repr() << std::endl; | 164 | std::cout << "Connect: " << sender->repr() << std::endl; |