File tree 2 files changed +21
-6
lines changed
2 files changed +21
-6
lines changed Original file line number Diff line number Diff line change @@ -567,14 +567,22 @@ void MqttClient::poll()
567
567
if (_onMessage) {
568
568
_onMessage (_rxLength);
569
569
}
570
+
571
+ if (_rxLength == 0 ) {
572
+ // no payload to read, ack zero length message
573
+ ackRxMessage ();
574
+ }
570
575
}
571
576
572
577
break ;
573
578
}
574
579
575
580
case MQTT_CLIENT_RX_STATE_READ_PUBLISH_PAYLOAD:
576
581
case MQTT_CLIENT_RX_STATE_DISCARD_PUBLISH_PAYLOAD: {
577
- _rxLength--;
582
+ if (_rxLength > 0 ) {
583
+ _rxLength--;
584
+ }
585
+
578
586
if (_rxLength == 0 ) {
579
587
_rxState = MQTT_CLIENT_RX_STATE_READ_TYPE;
580
588
} else {
@@ -688,11 +696,7 @@ int MqttClient::read(uint8_t *buf, size_t size)
688
696
_rxLength -= result;
689
697
690
698
if (_rxLength == 0 ) {
691
- if (_txMessageQoS == 1 ) {
692
- puback (_txPacketId);
693
- } else if (_txMessageQoS == 2 ) {
694
- pubrec (_txPacketId);
695
- }
699
+ ackRxMessage ();
696
700
697
701
_rxState = MQTT_CLIENT_RX_STATE_READ_TYPE;
698
702
}
@@ -1057,6 +1061,15 @@ int MqttClient::endPacket()
1057
1061
return result;
1058
1062
}
1059
1063
1064
+ void MqttClient::ackRxMessage ()
1065
+ {
1066
+ if (_rxMessageQoS == 1 ) {
1067
+ puback (_rxPacketId);
1068
+ } else if (_rxMessageQoS == 2 ) {
1069
+ pubrec (_rxPacketId);
1070
+ }
1071
+ }
1072
+
1060
1073
int MqttClient::clientRead ()
1061
1074
{
1062
1075
int result = _client->read ();
Original file line number Diff line number Diff line change @@ -107,6 +107,8 @@ class MqttClient : public Client {
107
107
int writeData (const void * data, size_t length);
108
108
int endPacket ();
109
109
110
+ void ackRxMessage ();
111
+
110
112
uint8_t clientConnected ();
111
113
int clientAvailable ();
112
114
int clientRead ();
You can’t perform that action at this time.
0 commit comments