From df8dc928700e68d92e3d0abddbb2f12630c74696 Mon Sep 17 00:00:00 2001 From: yuanjm Date: Thu, 25 Nov 2021 16:38:26 +0800 Subject: [PATCH] Client: Fix use esp_mqtt_client_enqueue API to send data, data dup flag will be set 1 --- lib/include/mqtt_outbox.h | 1 + lib/mqtt_outbox.c | 8 ++++++++ mqtt_client.c | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/include/mqtt_outbox.h b/lib/include/mqtt_outbox.h index 4866838..fbeb5a5 100644 --- a/lib/include/mqtt_outbox.h +++ b/lib/include/mqtt_outbox.h @@ -54,6 +54,7 @@ int outbox_delete_expired(outbox_handle_t outbox, outbox_tick_t current_tick, ou int outbox_delete_single_expired(outbox_handle_t outbox, outbox_tick_t current_tick, outbox_tick_t timeout); esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id, pending_state_t pending); +pending_state_t outbox_item_get_pending(outbox_item_handle_t item); esp_err_t outbox_set_tick(outbox_handle_t outbox, int msg_id, outbox_tick_t tick); int outbox_get_size(outbox_handle_t outbox); void outbox_destroy(outbox_handle_t outbox); diff --git a/lib/mqtt_outbox.c b/lib/mqtt_outbox.c index d702c5c..1a782d1 100644 --- a/lib/mqtt_outbox.c +++ b/lib/mqtt_outbox.c @@ -142,6 +142,14 @@ esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id, pending_state_t return ESP_FAIL; } +pending_state_t outbox_item_get_pending(outbox_item_handle_t item) +{ + if (item) { + return item->pending; + } + return QUEUED; +} + esp_err_t outbox_set_tick(outbox_handle_t outbox, int msg_id, outbox_tick_t tick) { outbox_item_handle_t item = outbox_get(outbox, msg_id); diff --git a/mqtt_client.c b/mqtt_client.c index 66ea6ce..90569a1 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -1344,7 +1344,7 @@ static esp_err_t mqtt_resend_queued(esp_mqtt_client_handle_t client, outbox_item 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-1 and QoS-2 messages - if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos > 0) { + if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos > 0 && (outbox_item_get_pending(item) == TRANSMITTED)) { mqtt_set_dup(client->mqtt_state.outbound_message->data); }