@@ -152,10 +152,12 @@ int8_t Adafruit_MQTT::connect() {
152
152
153
153
// Read connect response packet and verify it
154
154
len = readFullPacket (buffer, MAXBUFFERSIZE, CONNECT_TIMEOUT_MS);
155
- if (len != 4 )
155
+ if (len != 4 ) {
156
156
return -1 ;
157
- if ((buffer[0 ] != (MQTT_CTRL_CONNECTACK << 4 )) || (buffer[1 ] != 2 ))
157
+ }
158
+ if ((buffer[0 ] != (MQTT_CTRL_CONNECTACK << 4 )) || (buffer[1 ] != 2 )) {
158
159
return -1 ;
160
+ }
159
161
if (buffer[3 ] != 0 )
160
162
return buffer[3 ];
161
163
@@ -182,7 +184,6 @@ int8_t Adafruit_MQTT::connect() {
182
184
// the Subscription before the Server sends the SUBACK Packet. (will
183
185
// really need to use callbacks - ada)
184
186
185
- // Serial.println("\t**looking for suback");
186
187
if (processPacketsUntil (buffer, MQTT_CTRL_SUBACK, SUBACK_TIMEOUT_MS)) {
187
188
success = true ;
188
189
break ;
@@ -213,10 +214,15 @@ uint16_t Adafruit_MQTT::processPacketsUntil(uint8_t *buffer,
213
214
break ;
214
215
}
215
216
216
- if ((buffer[0 ] >> 4 ) == waitforpackettype) {
217
+ uint8_t packetType = (buffer[0 ] >> 4 );
218
+ if (packetType == waitforpackettype) {
217
219
return len;
218
220
} else {
219
- ERROR_PRINTLN (F (" Dropped a packet" ));
221
+ if (packetType == MQTT_CTRL_PUBLISH) {
222
+ handleSubscriptionPacket (len);
223
+ } else {
224
+ ERROR_PRINTLN (F (" Dropped a packet" ));
225
+ }
220
226
}
221
227
}
222
228
return 0 ;
@@ -432,30 +438,21 @@ void Adafruit_MQTT::processPackets(int16_t timeout) {
432
438
while (elapsed < (uint32_t )timeout) {
433
439
Adafruit_MQTT_Subscribe *sub = readSubscription (timeout - elapsed);
434
440
if (sub) {
435
- // Serial.println("**** sub packet received");
436
441
if (sub->callback_uint32t != NULL ) {
437
442
// huh lets do the callback in integer mode
438
443
uint32_t data = 0 ;
439
444
data = atoi ((char *)sub->lastread );
440
- // Serial.print("*** calling int callback with : ");
441
- // Serial.println(data);
442
445
sub->callback_uint32t (data);
443
446
} else if (sub->callback_double != NULL ) {
444
447
// huh lets do the callback in doublefloat mode
445
448
double data = 0 ;
446
449
data = atof ((char *)sub->lastread );
447
- // Serial.print("*** calling double callback with : ");
448
- // Serial.println(data);
449
450
sub->callback_double (data);
450
451
} else if (sub->callback_buffer != NULL ) {
451
452
// huh lets do the callback in buffer mode
452
- // Serial.print("*** calling buffer callback with : ");
453
- // Serial.println((char *)sub->lastread);
454
453
sub->callback_buffer ((char *)sub->lastread , sub->datalen );
455
454
} else if (sub->callback_io != NULL ) {
456
455
// huh lets do the callback in io mode
457
- // Serial.print("*** calling io instance callback with : ");
458
- // Serial.println((char *)sub->lastread);
459
456
((sub->io_mqtt )->*(sub->callback_io ))((char *)sub->lastread ,
460
457
sub->datalen );
461
458
}
@@ -469,23 +466,29 @@ void Adafruit_MQTT::processPackets(int16_t timeout) {
469
466
elapsed += (endtime - starttime);
470
467
}
471
468
}
472
-
473
469
Adafruit_MQTT_Subscribe *Adafruit_MQTT::readSubscription (int16_t timeout) {
474
- uint16_t i, topiclen, datalen;
475
-
476
470
// Check if data is available to read.
477
471
uint16_t len =
478
472
readFullPacket (buffer, MAXBUFFERSIZE, timeout); // return one full packet
479
- if (!len)
473
+ return handleSubscriptionPacket (len);
474
+ }
475
+
476
+ Adafruit_MQTT_Subscribe *Adafruit_MQTT::handleSubscriptionPacket (uint16_t len) {
477
+ uint16_t i, topiclen, datalen;
478
+
479
+ if (!len) {
480
480
return NULL ; // No data available, just quit.
481
+ }
481
482
DEBUG_PRINT (" Packet len: " );
482
483
DEBUG_PRINTLN (len);
483
484
DEBUG_PRINTBUFFER (buffer, len);
484
485
485
- if (len < 3 )
486
+ if (len < 3 ) {
486
487
return NULL ;
487
- if ((buffer[0 ] & 0xF0 ) != (MQTT_CTRL_PUBLISH) << 4 )
488
+ }
489
+ if ((buffer[0 ] & 0xF0 ) != (MQTT_CTRL_PUBLISH) << 4 ) {
488
490
return NULL ;
491
+ }
489
492
490
493
// Parse out length of packet.
491
494
topiclen = buffer[3 ];
0 commit comments