Skip to content

Commit df8dc92

Browse files
committed
Client: Fix use esp_mqtt_client_enqueue API to send data, data dup flag will be set 1
1 parent b86d42c commit df8dc92

File tree

3 files changed

+10
-1
lines changed

3 files changed

+10
-1
lines changed

lib/include/mqtt_outbox.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ int outbox_delete_expired(outbox_handle_t outbox, outbox_tick_t current_tick, ou
5454
int outbox_delete_single_expired(outbox_handle_t outbox, outbox_tick_t current_tick, outbox_tick_t timeout);
5555

5656
esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id, pending_state_t pending);
57+
pending_state_t outbox_item_get_pending(outbox_item_handle_t item);
5758
esp_err_t outbox_set_tick(outbox_handle_t outbox, int msg_id, outbox_tick_t tick);
5859
int outbox_get_size(outbox_handle_t outbox);
5960
void outbox_destroy(outbox_handle_t outbox);

lib/mqtt_outbox.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,14 @@ esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id, pending_state_t
142142
return ESP_FAIL;
143143
}
144144

145+
pending_state_t outbox_item_get_pending(outbox_item_handle_t item)
146+
{
147+
if (item) {
148+
return item->pending;
149+
}
150+
return QUEUED;
151+
}
152+
145153
esp_err_t outbox_set_tick(outbox_handle_t outbox, int msg_id, outbox_tick_t tick)
146154
{
147155
outbox_item_handle_t item = outbox_get(outbox, msg_id);

mqtt_client.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1344,7 +1344,7 @@ static esp_err_t mqtt_resend_queued(esp_mqtt_client_handle_t client, outbox_item
13441344
client->mqtt_state.outbound_message->data = outbox_item_get_data(item, &client->mqtt_state.outbound_message->length, &client->mqtt_state.pending_msg_id,
13451345
&client->mqtt_state.pending_msg_type, &client->mqtt_state.pending_publish_qos);
13461346
// set duplicate flag for QoS-1 and QoS-2 messages
1347-
if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos > 0) {
1347+
if (client->mqtt_state.pending_msg_type == MQTT_MSG_TYPE_PUBLISH && client->mqtt_state.pending_publish_qos > 0 && (outbox_item_get_pending(item) == TRANSMITTED)) {
13481348
mqtt_set_dup(client->mqtt_state.outbound_message->data);
13491349
}
13501350

0 commit comments

Comments
 (0)