Skip to content

Commit 253a12e

Browse files
committed
Fix message RX ack and zero size payload handling
1 parent ff90ddb commit 253a12e

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

src/MqttClient.cpp

+19-6
Original file line numberDiff line numberDiff 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+
10601073
int MqttClient::clientRead()
10611074
{
10621075
int result = _client->read();

src/MqttClient.h

+2
Original file line numberDiff line numberDiff 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();

0 commit comments

Comments
 (0)