Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix how subscription packet length is calculated #227

Merged
merged 4 commits into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 5 additions & 2 deletions Adafruit_MQTT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -563,9 +563,12 @@ Adafruit_MQTT_Subscribe *Adafruit_MQTT::handleSubscriptionPacket(uint16_t len) {
}

// Parse out length of packet.
uint16_t const topicoffset = packetAdditionalLen(len);
// NOTE: This includes data in the variable header and the payload.
uint16_t remainingLen = len - 4; // subtract the 4 header bytes
uint16_t const topicoffset = packetAdditionalLen(remainingLen);
uint16_t const topicstart = topicoffset + 4;
topiclen = buffer[3 + topicoffset];

topiclen = int((buffer[2 + topicoffset]) << 8 | buffer[3 + topicoffset]);
DEBUG_PRINT(F("Looking for subscription len "));
DEBUG_PRINTLN(topiclen);

Expand Down
9 changes: 8 additions & 1 deletion Adafruit_MQTT.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,14 @@
// Largest full packet we're able to send.
// Need to be able to store at least ~90 chars for a connect packet with full
// 23 char client ID.
// Future TODO: This should be replaced by the ability to dynamically allocate a
// buffer as needed.
#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) || \
defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_SAMD)
#define MAXBUFFERSIZE (512)
#else
#define MAXBUFFERSIZE (150)
#endif

#define MQTT_CONN_USERNAMEFLAG 0x80
#define MQTT_CONN_PASSWORDFLAG 0x40
Expand All @@ -124,7 +131,7 @@
#define SUBSCRIPTIONDATALEN 20
#else
#define MAXSUBSCRIPTIONS 15
#define SUBSCRIPTIONDATALEN 100
#define SUBSCRIPTIONDATALEN MAXBUFFERSIZE
#endif

class AdafruitIO_MQTT; // forward decl
Expand Down
2 changes: 1 addition & 1 deletion library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=Adafruit MQTT Library
version=2.5.7
version=2.5.8
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=MQTT library that supports the FONA, ESP8266, ESP32, Yun, and generic Arduino Client hardware.
Expand Down