diff --git a/rsmb/src/MQTTSProtocol.c b/rsmb/src/MQTTSProtocol.c index 049dc68..c8e9ea3 100644 --- a/rsmb/src/MQTTSProtocol.c +++ b/rsmb/src/MQTTSProtocol.c @@ -986,9 +986,15 @@ int MQTTSProtocol_handleSubscribes(void* pack, int sock, char* clientAddr, Clien // Topic name if (sub->flags.topicIdType == MQTTS_TOPIC_TYPE_NORMAL && !Topics_hasWildcards(topicName)) { - char* regTopicName = malloc(strlen(topicName)+1); - strcpy(regTopicName, topicName); - topicId = (MQTTSProtocol_registerTopic(client, regTopicName))->id; + ListElement* elem; + if ((elem = ListFindItem(client->registrations, topicName, registeredTopicNameCompare)) == NULL) + { + char* regTopicName = malloc(strlen(topicName)+1); + strcpy(regTopicName, topicName); + topicId = (MQTTSProtocol_registerTopic(client, regTopicName))->id; + } + else + topicId = ((Registration*)(elem->content))->id; } // Pre-defined topic else if (sub->flags.topicIdType == MQTTS_TOPIC_TYPE_PREDEFINED)