diff --git a/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp b/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp index 6bca10f..cd4bc30 100644 --- a/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp +++ b/MQTTSNGateway/src/MQTTSNGWSubscribeHandler.cpp @@ -59,6 +59,8 @@ MQTTGWPacket* MQTTSNSubscribeHandler::handleSubscribe(Client* client, MQTTSNPack if ( topicFilter.type == MQTTSN_TOPIC_TYPE_PREDEFINED ) { topic = client->getTopics()->getTopicById(&topicFilter); + + if ( topic ) { topicId = topic->getTopicId(); @@ -67,7 +69,15 @@ MQTTGWPacket* MQTTSNSubscribeHandler::handleSubscribe(Client* client, MQTTSNPack } else { - goto RespExit; + topic = _gateway->getTopics()->getTopicById(&topicFilter); + if ( !topic ) + { + topic = client->getTopics()->add(topic->getTopicName()->c_str(), topic->getTopicId()); + } + else + { + goto RespExit; + } } } else if (topicFilter.type == MQTTSN_TOPIC_TYPE_NORMAL)