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; };