From e2aa29d2eac7104edafe43daa150490f628f1d32 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Thu, 20 Feb 2020 12:37:16 +0100 Subject: [PATCH 1/2] Client: Fix C++ build failing on incorrect event enum conversion Closes https://github.com/espressif/esp-idf/issues/4787 --- include/mqtt_client.h | 1 + mqtt_client.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/include/mqtt_client.h b/include/mqtt_client.h index 796f431..37f416a 100644 --- a/include/mqtt_client.h +++ b/include/mqtt_client.h @@ -37,6 +37,7 @@ typedef struct esp_mqtt_client *esp_mqtt_client_handle_t; * */ typedef enum { + MQTT_EVENT_ANY = -1, MQTT_EVENT_ERROR = 0, /*!< on error event, additional context: connection return code, error handle from esp_tls (if supported) */ MQTT_EVENT_CONNECTED, /*!< connected event, additional context: session_present flag */ MQTT_EVENT_DISCONNECTED, /*!< disconnected event */ diff --git a/mqtt_client.c b/mqtt_client.c index fba72e3..1bf82da 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -22,6 +22,9 @@ #endif /* MQTT_USE_API_LOCKS */ _Static_assert(sizeof(uint64_t) == sizeof(outbox_tick_t), "mqtt-client tick type size different from outbox tick type"); +#ifdef ESP_EVENT_ANY_ID +_Static_assert(MQTT_EVENT_ANY == ESP_EVENT_ANY_ID, "mqtt-client event enum does not match the global EVENT_ANY_ID"); +#endif static const char *TAG = "MQTT_CLIENT"; From 62d1509961ba6eb65570537d4e682154cfa6b480 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Thu, 20 Feb 2020 16:00:15 +0100 Subject: [PATCH 2/2] Resend queued: Set duplicate flag for both qos1 and qos2 Closes https://github.com/espressif/esp-mqtt/issues/151 --- mqtt_client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mqtt_client.c b/mqtt_client.c index 1bf82da..3ee2028 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -1178,8 +1178,8 @@ static esp_err_t mqtt_resend_queued(esp_mqtt_client_handle_t client, outbox_item // decode queued data client->mqtt_state.outbound_message->data = outbox_item_get_data(item, &client->mqtt_state.outbound_message->length, &client->mqtt_state.pending_msg_id, &client->mqtt_state.pending_msg_type, &client->mqtt_state.pending_publish_qos); - // set duplicate flag for QoS-2 message - if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos == 2) { + // set duplicate flag for QoS-1 and QoS-2 messages + if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos > 0) { mqtt_set_dup(client->mqtt_state.outbound_message->data); }