diff --git a/rsmb/src/MQTTSPacket.c b/rsmb/src/MQTTSPacket.c index 4ccd60c..6565eec 100644 --- a/rsmb/src/MQTTSPacket.c +++ b/rsmb/src/MQTTSPacket.c @@ -967,7 +967,7 @@ int MQTTSPacket_send_publish(Clients* client, MQTTS_Publish* pub) } -int MQTTSPacket_send_puback(Clients* client, /*char* shortTopic, int topicId, */ int msgId, char returnCode) +int MQTTSPacket_send_puback(Clients* client, int topicId, int msgId, char returnCode) { MQTTS_PubAck packet; char *buf, *ptr; @@ -985,7 +985,7 @@ int MQTTSPacket_send_puback(Clients* client, /*char* shortTopic, int topicId, */ writeChar(&ptr, shortTopic[1]); } else */ - writeInt(&ptr, 0); /* writeInt(&ptr, topicId); */ + writeInt(&ptr, topicId); /* writeInt(&ptr, 0); */ writeInt(&ptr, msgId); writeChar(&ptr, returnCode); diff --git a/rsmb/src/MQTTSPacket.h b/rsmb/src/MQTTSPacket.h index ed42b58..cac265b 100644 --- a/rsmb/src/MQTTSPacket.h +++ b/rsmb/src/MQTTSPacket.h @@ -288,7 +288,7 @@ int MQTTSPacket_send_pingResp(Clients* client); int MQTTSPacket_send_willTopicResp(Clients* client); int MQTTSPacket_send_willMsgResp(Clients* client); int MQTTSPacket_send_regAck(Clients* client, int msgId, int topicId, char rc); -int MQTTSPacket_send_puback(Clients* client, int msgId, char returnCode); +int MQTTSPacket_send_puback(Clients* client, int topicId, int msgId, char returnCode); int MQTTSPacket_send_pubrec(Clients* client, int msgId); int MQTTSPacket_send_pubrel(Clients* client, int msgId); int MQTTSPacket_send_pubcomp(Clients* client, int msgId); diff --git a/rsmb/src/Protocol.c b/rsmb/src/Protocol.c index 153f347..16b7cf0 100644 --- a/rsmb/src/Protocol.c +++ b/rsmb/src/Protocol.c @@ -437,6 +437,9 @@ int Protocol_isClientQuiescing(Clients* client) int Protocol_handlePublishes(Publish* publish, int sock, Clients* client, char* clientid) { int rc = TCPSOCKET_COMPLETE; + #if defined(MQTTS) + int topicId = 0; + #endif #if !defined(SINGLE_LISTENER) Listener* listener = NULL; #endif @@ -474,8 +477,10 @@ int Protocol_handlePublishes(Publish* publish, int sock, Clients* client, char* { /* send puback before processing the publications because a lot of return publications could fill up the socket buffer */ #if defined(MQTTS) - if (client->protocol == PROTOCOL_MQTTS) - rc = MQTTSPacket_send_puback(client, publish->msgId, MQTTS_RC_ACCEPTED); + if (client->protocol == PROTOCOL_MQTTS){ + topicId = MQTTSProtocol_getRegisteredTopicId(client, publish->topic); + rc = MQTTSPacket_send_puback(client, topicId, publish->msgId, MQTTS_RC_ACCEPTED); + } else #endif rc = MQTTPacket_send_puback(publish->msgId, sock, clientid);