From 40faa2e8cfe3149e6fa14b69238d798dfe457c96 Mon Sep 17 00:00:00 2001 From: Johannes Schriewer Date: Mon, 6 Aug 2018 02:35:00 +0200 Subject: [PATCH] Bugfix: Multiple packets in buffer handling was broken --- src/mqtt.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mqtt.c b/src/mqtt.c index ffa1b6e..1e1f2eb 100644 --- a/src/mqtt.c +++ b/src/mqtt.c @@ -107,16 +107,18 @@ static inline void parse_packet(MQTTHandle *handle, MQTTPacket *packet) { break; case MQTT_QOS_1: if (send_puback_packet(handle, payload->packet_id)) { - DEBUG_LOG("Dispatching subscription..."); dispatch_subscription(handle, payload); - } else { - DEBUG_LOG("Error sending PubAck"); } break; case MQTT_QOS_2: - DEBUG_LOG("Sending PubRec packet"); send_pubrec_packet(handle, payload->packet_id, dispatch_subscription_direct, payload); break; + default: + DEBUG_LOG("Invalid QoS! (packet_id: %d)", payload->packet_id); + (void)platform_destroy_timer(handle, handle->keepalive_timer); + handle->keepalive_timer = -1; + (void)platform_disconnect(handle); + break; } break; } @@ -184,14 +186,12 @@ PlatformTaskFunc(_reader) { free_MQTTPacket(packet); if (!buffer_eof(buffer)) { - buffer->position = buffer->len; buffer->len = max_receive_buffer_size; // Not complete recv buffer was consumed, so we have more than one packet in there size_t remaining = max_receive_buffer_size - buffer->position; memmove(buffer->data, buffer->data + buffer->position, remaining); buffer->position = 0; - break; } else { // buffer consumed completely, read another chunk buffer->position = 0;