File tree Expand file tree Collapse file tree 2 files changed +21
-6
lines changed
Expand file tree Collapse file tree 2 files changed +21
-6
lines changed Original file line number Diff line number Diff line change @@ -567,14 +567,22 @@ void MqttClient::poll()
567567 if (_onMessage) {
568568 _onMessage (_rxLength);
569569 }
570+
571+ if (_rxLength == 0 ) {
572+ // no payload to read, ack zero length message
573+ ackRxMessage ();
574+ }
570575 }
571576
572577 break ;
573578 }
574579
575580 case MQTT_CLIENT_RX_STATE_READ_PUBLISH_PAYLOAD:
576581 case MQTT_CLIENT_RX_STATE_DISCARD_PUBLISH_PAYLOAD: {
577- _rxLength--;
582+ if (_rxLength > 0 ) {
583+ _rxLength--;
584+ }
585+
578586 if (_rxLength == 0 ) {
579587 _rxState = MQTT_CLIENT_RX_STATE_READ_TYPE;
580588 } else {
@@ -688,11 +696,7 @@ int MqttClient::read(uint8_t *buf, size_t size)
688696 _rxLength -= result;
689697
690698 if (_rxLength == 0 ) {
691- if (_txMessageQoS == 1 ) {
692- puback (_txPacketId);
693- } else if (_txMessageQoS == 2 ) {
694- pubrec (_txPacketId);
695- }
699+ ackRxMessage ();
696700
697701 _rxState = MQTT_CLIENT_RX_STATE_READ_TYPE;
698702 }
@@ -1057,6 +1061,15 @@ int MqttClient::endPacket()
10571061 return result;
10581062}
10591063
1064+ void MqttClient::ackRxMessage ()
1065+ {
1066+ if (_rxMessageQoS == 1 ) {
1067+ puback (_rxPacketId);
1068+ } else if (_rxMessageQoS == 2 ) {
1069+ pubrec (_rxPacketId);
1070+ }
1071+ }
1072+
10601073int MqttClient::clientRead ()
10611074{
10621075 int result = _client->read ();
Original file line number Diff line number Diff line change @@ -107,6 +107,8 @@ class MqttClient : public Client {
107107 int writeData (const void * data, size_t length);
108108 int endPacket ();
109109
110+ void ackRxMessage ();
111+
110112 uint8_t clientConnected ();
111113 int clientAvailable ();
112114 int clientRead ();
You can’t perform that action at this time.
0 commit comments