Commit e3ad153ce46c38b642d289a92172f2968d6302c6

Authored by Wiebe Cazemier
1 parent 21bf9bf5

Will stuff in connect

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;