From 0e8e3123cff80ce8e927adf6a45e4d868ac16a97 Mon Sep 17 00:00:00 2001 From: Maxim Kukushkin Date: Tue, 2 Oct 2018 00:02:31 +0100 Subject: [PATCH 1/2] Added support of CleanSession flag during connect --- src/PubSubClient.cpp | 13 ++++++++----- src/PubSubClient.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/PubSubClient.cpp b/src/PubSubClient.cpp index 29fbbfa..a8c0560 100755 --- a/src/PubSubClient.cpp +++ b/src/PubSubClient.cpp @@ -102,18 +102,18 @@ PubSubClient::PubSubClient(const char* domain, uint16_t port, MQTT_CALLBACK_SIGN } boolean PubSubClient::connect(const char *id) { - return connect(id,NULL,NULL,0,0,0,0); + return connect(id,NULL,NULL,0,0,0,0,1); } boolean PubSubClient::connect(const char *id, const char *user, const char *pass) { - return connect(id,user,pass,0,0,0,0); + return connect(id,user,pass,0,0,0,0,1); } boolean PubSubClient::connect(const char *id, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage) { - return connect(id,NULL,NULL,willTopic,willQos,willRetain,willMessage); + return connect(id,NULL,NULL,willTopic,willQos,willRetain,willMessage,1); } -boolean PubSubClient::connect(const char *id, const char *user, const char *pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage) { +boolean PubSubClient::connect(const char *id, const char *user, const char *pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage, boolean cleanSession) { if (!connected()) { int result = 0; @@ -143,9 +143,12 @@ boolean PubSubClient::connect(const char *id, const char *user, const char *pass if (willTopic) { v = 0x06|(willQos<<3)|(willRetain<<5); } else { - v = 0x02; + v = 0; } + if (cleanSession) + v = v|0x02; + if(user != NULL) { v = v|0x80; diff --git a/src/PubSubClient.h b/src/PubSubClient.h index be4bd67..97f92ec 100755 --- a/src/PubSubClient.h +++ b/src/PubSubClient.h @@ -125,7 +125,7 @@ public: boolean connect(const char* id); boolean connect(const char* id, const char* user, const char* pass); boolean connect(const char* id, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage); - boolean connect(const char* id, const char* user, const char* pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage); + boolean connect(const char* id, const char* user, const char* pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage, boolean cleanSession); void disconnect(); boolean publish(const char* topic, const char* payload); boolean publish(const char* topic, const char* payload, boolean retained); From 8154cbc09cdf72258d9f1783f308fca9cc876fde Mon Sep 17 00:00:00 2001 From: Maxim Kukushkin Date: Mon, 22 Oct 2018 23:35:47 +0100 Subject: [PATCH 2/2] Fixed an issue with clean session flag set when willTopic is provided --- src/PubSubClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PubSubClient.cpp b/src/PubSubClient.cpp index a8c0560..97ae909 100755 --- a/src/PubSubClient.cpp +++ b/src/PubSubClient.cpp @@ -141,7 +141,7 @@ boolean PubSubClient::connect(const char *id, const char *user, const char *pass uint8_t v; if (willTopic) { - v = 0x06|(willQos<<3)|(willRetain<<5); + v = 0x04|(willQos<<3)|(willRetain<<5); } else { v = 0; }