From 72b3ce172eebac00fb7e5436a241ff84b2b75fef Mon Sep 17 00:00:00 2001 From: ladyada Date: Sun, 10 Jan 2016 02:21:54 -0500 Subject: [PATCH] verify PUBACK for QoS 1 --- Adafruit_MQTT.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Adafruit_MQTT.cpp b/Adafruit_MQTT.cpp index 8d6beda..96bf77e 100644 --- a/Adafruit_MQTT.cpp +++ b/Adafruit_MQTT.cpp @@ -240,7 +240,18 @@ bool Adafruit_MQTT::publish(const char *topic, const char *data, uint8_t qos) { len = readPacket(buffer, 4, PUBLISH_TIMEOUT_MS); DEBUG_PRINT(F("Publish QOS1+ reply:\t")); DEBUG_PRINTBUFFER(buffer, len); - //TODO: Verify response packet? + if (len != 4) + return false; + if ((buffer[0] >> 4) != MQTT_CTRL_PUBACK) + return false; + uint16_t packnum = buffer[2]; + packnum <<= 8; + packnum |= buffer[3]; + + // we increment the packet_id_counter right after publishing so inc here too to match + packnum++; + if (packnum != packet_id_counter) + return false; } return true;