From 93e297c6d3c3b2819d9fd4717bdf4cf83cf9e8c6 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Sat, 13 Jul 2019 16:38:12 +0900 Subject: [PATCH] BugFix of #149 Signed-off-by: tomoaki --- .cproject | 4 +- .../GatewayTester/samples/mainTest.cpp | 4 +- MQTTSNGateway/gateway.conf | 10 ++++- MQTTSNGateway/src/MQTTSNGWClientList.cpp | 4 +- MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp | 5 ++- .../src/MQTTSNGWSubscribeHandler.cpp | 37 +++++++++++-------- 6 files changed, 39 insertions(+), 25 deletions(-) diff --git a/.cproject b/.cproject index 3966019..62eba26 100644 --- a/.cproject +++ b/.cproject @@ -133,7 +133,7 @@ - + @@ -277,7 +277,7 @@ - + diff --git a/MQTTSNGateway/GatewayTester/samples/mainTest.cpp b/MQTTSNGateway/GatewayTester/samples/mainTest.cpp index 06aa565..934a419 100644 --- a/MQTTSNGateway/GatewayTester/samples/mainTest.cpp +++ b/MQTTSNGateway/GatewayTester/samples/mainTest.cpp @@ -138,7 +138,7 @@ void publishTopic1(void) PUBLISH(topic1,(uint8_t*)payload, strlen(payload), QoS0); } -void subscribeTopic2(void) +void subscribeTopic10(void) { SUBSCRIBE(10, on_Topic02, QoS1); } @@ -190,7 +190,7 @@ TEST_LIST = {// e.g. TEST( Label, Test), TEST("Step0:Subscribe predef topic1", subscribePredefTopic1), TEST("Step1:Publish topic1", publishTopic1), TEST("Step2:Publish topic2", publishTopic2), - TEST("Step3:Subscribe topic2", subscribeTopic2), + TEST("Step3:Subscribe PreDefined topic10. ID is not defined.", subscribeTopic10), TEST("Step4:Publish topic2", publishTopic2), TEST("Step5:Unsubscribe topic2", unsubscribe), TEST("Step6:Publish topic2", publishTopic2), diff --git a/MQTTSNGateway/gateway.conf b/MQTTSNGateway/gateway.conf index c06853b..d01903a 100644 --- a/MQTTSNGateway/gateway.conf +++ b/MQTTSNGateway/gateway.conf @@ -1,5 +1,5 @@ #************************************************************************** -# Copyright (c) 2016-2018, Tomoaki Yamaguchi +# Copyright (c) 2016-2019, Tomoaki Yamaguchi # # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 @@ -14,7 +14,7 @@ # config file of MQTT-SN Gateway # -BrokerName=iot.eclipse.org +BrokerName=mqtt.eclipse.org BrokerPortNo=1883 BrokerSecurePortNo=8883 @@ -50,6 +50,12 @@ GatewayPortNo=10000 MulticastIP=225.1.1.1 MulticastPortNo=1883 +# UDP6 +GatewayUDP6Bind=FFFF:FFFE::1 +GatewayUDP6Port=10000 +GatewayUDP6Broadcast=FF02::1 +GatewayUDP6If=wpan0 + # XBee Baudrate=38400 SerialDevice=/dev/ttyUSB0 diff --git a/MQTTSNGateway/src/MQTTSNGWClientList.cpp b/MQTTSNGateway/src/MQTTSNGWClientList.cpp index e4e0bb9..5452765 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientList.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientList.cpp @@ -416,9 +416,9 @@ Client* ClientList::createClient(SensorNetAddress* addr, MQTTSNString* clientId, Client* ClientList::createPredefinedTopic( MQTTSNString* clientId, string topicName, uint16_t topicId, bool aggregate) { - if ( clientId->cstring == common_topic ) + if ( strcmp(clientId->cstring, common_topic) == 0 ) { - _gateway->getTopics()->add((const char*)topicName.c_str(), topicId); + theGateway->getTopics()->add((const char*)topicName.c_str(), topicId); return 0; } else diff --git a/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp b/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp index fc8c412..eaa6e68 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp @@ -18,6 +18,7 @@ #include "MQTTSNGateway.h" #include "MQTTSNGWEncapsulatedPacket.h" #include "MQTTSNGWQoSm1Proxy.h" +#include using namespace MQTTSNGW; using namespace std; @@ -75,8 +76,8 @@ void ClientSendTask::run() if ( rc < 0 ) { - WRITELOG("%s ClientSendTask can't send a packet to the client %s%s.\n", - ERRMSG_HEADER, (client ? (const char*)client->getClientId() : UNKNOWNCL ), ERRMSG_FOOTER); + WRITELOG("%s ClientSendTask can't send a packet to the client %s. Error=%d%s\n", + ERRMSG_HEADER, (client ? (const char*)client->getClientId() : UNKNOWNCL ), errno, ERRMSG_FOOTER); } delete ev; } diff --git a/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp b/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp index cd4bc30..dceb864 100644 --- a/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp +++ b/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp @@ -60,25 +60,22 @@ MQTTGWPacket* MQTTSNSubscribeHandler::handleSubscribe(Client* client, MQTTSNPack { topic = client->getTopics()->getTopicById(&topicFilter); - - if ( topic ) - { - topicId = topic->getTopicId(); - subscribe = new MQTTGWPacket(); - subscribe->setSUBSCRIBE((char*)topic->getTopicName()->c_str(), (uint8_t)qos, (uint16_t)msgId); - } - else + if ( !topic ) { topic = _gateway->getTopics()->getTopicById(&topicFilter); - if ( !topic ) - { + if ( topic ) + { topic = client->getTopics()->add(topic->getTopicName()->c_str(), topic->getTopicId()); } - else - { - goto RespExit; - } + else + { + goto RespExit; + } } + topicId = topic->getTopicId(); + subscribe = new MQTTGWPacket(); + subscribe->setSUBSCRIBE((char*)topic->getTopicName()->c_str(), (uint8_t)qos, (uint16_t)msgId); + } else if (topicFilter.type == MQTTSN_TOPIC_TYPE_NORMAL) { @@ -148,7 +145,6 @@ MQTTGWPacket* MQTTSNSubscribeHandler::handleUnsubscribe(Client* client, MQTTSNPa return nullptr; } - Topic* topic = client->getTopics()->getTopicById(&topicFilter); if (topicFilter.type == MQTTSN_TOPIC_TYPE_SHORT) { @@ -161,6 +157,17 @@ MQTTGWPacket* MQTTSNSubscribeHandler::handleUnsubscribe(Client* client, MQTTSNPa } else { + Topic* topic = nullptr; + + if (topicFilter.type == MQTTSN_TOPIC_TYPE_PREDEFINED) + { + topic = client->getTopics()->getTopicById(&topicFilter); + } + else + { + topic = client->getTopics()->getTopicByName(&topicFilter); + } + if ( topic == nullptr ) { MQTTSNPacket* sUnsuback = new MQTTSNPacket();