From 4935d2aa866c18bcbc6ba88b169f1f47290edeb8 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Thu, 21 Sep 2017 15:59:40 +0900 Subject: [PATCH 1/6] BugFix of #86 Fix of warning: comparison between signed and unsigned integer expressions Set a null string to the client ID when it of CONNECT is empty. Signed-off-by: tomoaki --- MQTTSNGateway/GatewayTester/src/LGwProxy.h | 5 +++-- MQTTSNGateway/GatewayTester/src/LPublishManager.h | 3 ++- MQTTSNGateway/GatewayTester/src/LRegisterManager.h | 3 ++- MQTTSNGateway/GatewayTester/src/LSubscribeManager.h | 3 ++- MQTTSNGateway/GatewayTester/src/LTaskManager.h | 5 +++-- MQTTSNGateway/GatewayTester/src/LTimer.cpp | 4 +++- MQTTSNGateway/GatewayTester/src/LTimer.h | 2 +- MQTTSNGateway/src/MQTTSNGWClient.cpp | 10 ++++++++++ 8 files changed, 26 insertions(+), 9 deletions(-) diff --git a/MQTTSNGateway/GatewayTester/src/LGwProxy.h b/MQTTSNGateway/GatewayTester/src/LGwProxy.h index 41d6078..2c45001 100644 --- a/MQTTSNGateway/GatewayTester/src/LGwProxy.h +++ b/MQTTSNGateway/GatewayTester/src/LGwProxy.h @@ -19,6 +19,7 @@ #include #include +#include #include "LMqttsnClientApp.h" #include "LNetworkUdp.h" @@ -92,11 +93,11 @@ private: uint8_t _gwId; uint16_t _tkeepAlive; uint32_t _tAdv; - uint32_t _sendUTC; + time_t _sendUTC; int _retryCount; int _connectRetry; uint8_t _status; - uint32_t _pingSendUTC; + time_t _pingSendUTC; uint8_t _pingRetryCount; uint8_t _pingStatus; LRegisterManager _regMgr; diff --git a/MQTTSNGateway/GatewayTester/src/LPublishManager.h b/MQTTSNGateway/GatewayTester/src/LPublishManager.h index b6015ee..231f601 100644 --- a/MQTTSNGateway/GatewayTester/src/LPublishManager.h +++ b/MQTTSNGateway/GatewayTester/src/LPublishManager.h @@ -16,6 +16,7 @@ #ifndef PUBLISHMANAGER_H_ #define PUBLISHMANAGER_H_ +#include #include "LMqttsnClientApp.h" #include "LTimer.h" #include "LTopicTable.h" @@ -42,7 +43,7 @@ typedef struct PubElement{ const char* topicName; uint8_t* payload; uint16_t payloadlen; - uint32_t sendUTC; + time_t sendUTC; int (*callback)(void); int retryCount; int taskIndex; diff --git a/MQTTSNGateway/GatewayTester/src/LRegisterManager.h b/MQTTSNGateway/GatewayTester/src/LRegisterManager.h index d58c041..5e2234a 100644 --- a/MQTTSNGateway/GatewayTester/src/LRegisterManager.h +++ b/MQTTSNGateway/GatewayTester/src/LRegisterManager.h @@ -17,6 +17,7 @@ #ifndef REGISTERQUE_H_ #define REGISTERQUE_H_ +#include #include "LMqttsnClientApp.h" namespace linuxAsyncClient { @@ -27,7 +28,7 @@ typedef struct RegQueElement{ const char* topicName; uint16_t msgId; int retryCount; - uint32_t sendUTC; + time_t sendUTC; RegQueElement* prev; RegQueElement* next; }RegQueElement; diff --git a/MQTTSNGateway/GatewayTester/src/LSubscribeManager.h b/MQTTSNGateway/GatewayTester/src/LSubscribeManager.h index 8bb35a3..be6eae3 100644 --- a/MQTTSNGateway/GatewayTester/src/LSubscribeManager.h +++ b/MQTTSNGateway/GatewayTester/src/LSubscribeManager.h @@ -19,6 +19,7 @@ #include #include +#include #include "LMqttsnClientApp.h" #include "LRegisterManager.h" @@ -33,7 +34,7 @@ typedef struct SubElement{ TopicCallback callback; const char* topicName; uint16_t msgId; - uint32_t sendUTC; + time_t sendUTC; uint16_t topicId; uint8_t msgType; uint8_t topicType; diff --git a/MQTTSNGateway/GatewayTester/src/LTaskManager.h b/MQTTSNGateway/GatewayTester/src/LTaskManager.h index d65f6a6..3303c92 100644 --- a/MQTTSNGateway/GatewayTester/src/LTaskManager.h +++ b/MQTTSNGateway/GatewayTester/src/LTaskManager.h @@ -19,6 +19,7 @@ #include #include +#include #include "LMqttsnClientApp.h" #include "LTimer.h" @@ -29,8 +30,8 @@ namespace linuxAsyncClient { struct TaskList{ void (*callback)(void); - uint32_t interval; - uint32_t prevTime; + time_t interval; + time_t prevTime; uint8_t count; }; diff --git a/MQTTSNGateway/GatewayTester/src/LTimer.cpp b/MQTTSNGateway/GatewayTester/src/LTimer.cpp index 781693b..346f181 100644 --- a/MQTTSNGateway/GatewayTester/src/LTimer.cpp +++ b/MQTTSNGateway/GatewayTester/src/LTimer.cpp @@ -16,10 +16,12 @@ #include #include +#include + #include "LMqttsnClientApp.h" #include "LTimer.h" -using namespace std; +//using namespace std; using namespace linuxAsyncClient; /*===================================== diff --git a/MQTTSNGateway/GatewayTester/src/LTimer.h b/MQTTSNGateway/GatewayTester/src/LTimer.h index cb44cc0..9c666cf 100644 --- a/MQTTSNGateway/GatewayTester/src/LTimer.h +++ b/MQTTSNGateway/GatewayTester/src/LTimer.h @@ -17,7 +17,7 @@ #ifndef TIMER_H_ #define TIMER_H_ -#include +#include #include "LMqttsnClientApp.h" diff --git a/MQTTSNGateway/src/MQTTSNGWClient.cpp b/MQTTSNGateway/src/MQTTSNGWClient.cpp index d31e3f0..19c7b91 100644 --- a/MQTTSNGateway/src/MQTTSNGWClient.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClient.cpp @@ -227,6 +227,16 @@ Client* ClientList::createClient(SensorNetAddress* addr, MQTTSNString* clientId, { client->setClientId(*clientId); } + else + { + MQTTSNString dummyId; + char* id = (char*)malloc(1); + *id = 0; + dummyId.cstring = id; + dummyId.lenstring.len = 0; + client->setClientId(dummyId); + free(id); + } /* add the list */ if ( _firstClient == 0 ) From 6905e7aa1c34779ec630febbe22ad9e2d7d99841 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Thu, 28 Sep 2017 07:59:46 +0900 Subject: [PATCH 2/6] Fix of warning: may be used uninitialized in this function Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTGWPacket.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/MQTTSNGateway/src/MQTTGWPacket.cpp b/MQTTSNGateway/src/MQTTGWPacket.cpp index 8bba53f..06d8fe7 100644 --- a/MQTTSNGateway/src/MQTTGWPacket.cpp +++ b/MQTTSNGateway/src/MQTTGWPacket.cpp @@ -500,6 +500,7 @@ char* MQTTGWPacket::getMsgId(char* pbuf) { case PUBLISH: Publish pub; + pub.msgId = 0; getPUBLISH(&pub); if ( _header.bits.dup ) { From 8a2ac67b4f992a95abbf9666ab839937302d7143 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Thu, 28 Sep 2017 16:01:50 +0900 Subject: [PATCH 3/6] Update Makefile to add command line parameters Parameters are additional include and lib directories for future useage. e.g. make INCLUDE="-I/foo" LIB="-L/bar" Signed-off-by: tomoaki --- MQTTSNGateway/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/MQTTSNGateway/Makefile b/MQTTSNGateway/Makefile index 0591067..fa5ad97 100644 --- a/MQTTSNGateway/Makefile +++ b/MQTTSNGateway/Makefile @@ -62,14 +62,16 @@ $(SUBDIR)/MQTTSNUnsubscribeServer.c CXX := g++ CPPFLAGS += -INCLUDES += -I$(SRCDIR) \ +INCLUDE := +INCLUDES += $(INCLUDE) -I$(SRCDIR) \ -I$(SRCDIR)/$(OS) \ -I$(SRCDIR)/$(OS)/$(SENSORNET) \ -I$(SUBDIR) \ -I$(SRCDIR)/$(TEST) DEFS := -LIBS += -L/usr/local/lib +LIB := +LIBS += $(LIB) -L/usr/local/lib LDFLAGS := CXXFLAGS := -Wall -O3 -std=c++11 LDADD := -lpthread -lssl -lcrypto -lrt From 9d258cf53a59192bf85b14009905aa93c7ab5218 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Thu, 28 Sep 2017 22:13:23 +0900 Subject: [PATCH 4/6] Update: change codes simple #86 Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTSNGWClient.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/MQTTSNGateway/src/MQTTSNGWClient.cpp b/MQTTSNGateway/src/MQTTSNGWClient.cpp index 19c7b91..9a8a043 100644 --- a/MQTTSNGateway/src/MQTTSNGWClient.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClient.cpp @@ -230,12 +230,10 @@ Client* ClientList::createClient(SensorNetAddress* addr, MQTTSNString* clientId, else { MQTTSNString dummyId; - char* id = (char*)malloc(1); - *id = 0; - dummyId.cstring = id; + dummyId.cstring = strdup(""); dummyId.lenstring.len = 0; client->setClientId(dummyId); - free(id); + free(dummyId.cstring); } /* add the list */ From 9540c748f529e769ff7234462961999c05f5a660 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Wed, 20 Dec 2017 15:26:36 +0900 Subject: [PATCH 5/6] Bugfix of #91, #93 Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTGWPacket.cpp | 4 ++-- .../src/MQTTSNGWPacketHandleTask.cpp | 2 +- MQTTSNGateway/src/MQTTSNGWPublishHandler.cpp | 23 +++++++++++++++++++ MQTTSNGateway/src/MQTTSNGWPublishHandler.h | 2 +- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/MQTTSNGateway/src/MQTTGWPacket.cpp b/MQTTSNGateway/src/MQTTGWPacket.cpp index 06d8fe7..55532fc 100644 --- a/MQTTSNGateway/src/MQTTGWPacket.cpp +++ b/MQTTSNGateway/src/MQTTGWPacket.cpp @@ -534,8 +534,8 @@ char* MQTTGWPacket::print(char* pbuf) char* ptr = pbuf; char** pptr = &pbuf; int len = getPacketData(packetData); - - for (int i = 0; i < len; i++) + int size = len > SIZE_OF_LOG_PACKET ? SIZE_OF_LOG_PACKET : len; + for (int i = 0; i < size; i++) { sprintf(*pptr, " %02X", packetData[i]); *pptr += 3; diff --git a/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp b/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp index 5149a85..43cdd24 100644 --- a/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp @@ -167,7 +167,7 @@ void PacketHandleTask::run() _mqttsnPublish->handleRegister(client, snPacket); break; case MQTTSN_REGACK: - // NOP + _mqttsnPublish->handleRegAck(client, snPacket); break; case MQTTSN_SUBSCRIBE: _mqttsnSubscribe->handleSubscribe(client, snPacket); diff --git a/MQTTSNGateway/src/MQTTSNGWPublishHandler.cpp b/MQTTSNGateway/src/MQTTSNGWPublishHandler.cpp index 52dff3e..ea7f9b0 100644 --- a/MQTTSNGateway/src/MQTTSNGWPublishHandler.cpp +++ b/MQTTSNGateway/src/MQTTSNGWPublishHandler.cpp @@ -245,5 +245,28 @@ void MQTTSNPublishHandler::handleRegister(Client* client, MQTTSNPacket* packet) ev->setClientSendEvent(client, regAck); _gateway->getClientSendQue()->post(ev); } +} + +void MQTTSNPublishHandler::handleRegAck( Client* client, MQTTSNPacket* packet) +{ + uint16_t id; + uint16_t msgId; + uint8_t rc; + if ( client->isActive() || client->isAwake()) + { + if ( packet->getREGACK(&id, &msgId, &rc) == 0 ) + { + return; + } + + MQTTSNPacket* regAck = client->getWaitREGACKPacketList()->getPacket(msgId); + if ( regAck != 0 ) + { + client->getWaitREGACKPacketList()->erase(msgId); + Event* ev = new Event(); + ev->setClientSendEvent(client, regAck); + _gateway->getClientSendQue()->post(ev); + } + } } diff --git a/MQTTSNGateway/src/MQTTSNGWPublishHandler.h b/MQTTSNGateway/src/MQTTSNGWPublishHandler.h index 7213cbe..f7fc2d8 100644 --- a/MQTTSNGateway/src/MQTTSNGWPublishHandler.h +++ b/MQTTSNGateway/src/MQTTSNGWPublishHandler.h @@ -31,7 +31,7 @@ public: void handlePuback(Client* client, MQTTSNPacket* packet); void handleAck(Client* client, MQTTSNPacket* packet, uint8_t packetType); void handleRegister(Client* client, MQTTSNPacket* packet); - + void handleRegAck( Client* client, MQTTSNPacket* packet); private: Gateway* _gateway; }; From 23b358ad088dd5190ae446c6a4b033f957a4f978 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Thu, 21 Dec 2017 22:43:20 +0900 Subject: [PATCH 6/6] BugFix of #93 Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTGWPublishHandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MQTTSNGateway/src/MQTTGWPublishHandler.cpp b/MQTTSNGateway/src/MQTTGWPublishHandler.cpp index cfd6772..c6ebcef 100644 --- a/MQTTSNGateway/src/MQTTGWPublishHandler.cpp +++ b/MQTTSNGateway/src/MQTTGWPublishHandler.cpp @@ -122,7 +122,7 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet) if (id > 0) { - /* create REGACK */ + /* create REGISTER */ MQTTSNPacket* regPacket = new MQTTSNPacket(); MQTTSNString topicName; @@ -143,6 +143,7 @@ void MQTTGWPublishHandler::handlePublish(Client* client, MQTTGWPacket* packet) (uint8_t) pub.header.bits.retain, (uint16_t) pub.msgId, topicId, (uint8_t*) pub.payload, pub.payloadlen); client->getWaitREGACKPacketList()->setPacket(snPacket, regackMsgId); + return; } else {