Merge branch 'fix/deleted_msg_event' into 'master'

When MQTT_REPORT_DELETED_MESSAGES, delete QOS messages with id 0

Closes IDFGH-14022 and IDFGH-14021

See merge request espressif/esp-mqtt!225
This commit is contained in:
Rocha Euripedes
2024-11-18 17:49:39 +08:00
2 changed files with 3 additions and 3 deletions

View File

@ -80,13 +80,13 @@ typedef enum esp_mqtt_event_id_t {
MQTT_EVENT_BEFORE_CONNECT, /*!< The event occurs before connecting */ MQTT_EVENT_BEFORE_CONNECT, /*!< The event occurs before connecting */
MQTT_EVENT_DELETED, /*!< Notification on delete of one message from the MQTT_EVENT_DELETED, /*!< Notification on delete of one message from the
internal outbox, if the message couldn't have been sent internal outbox, if the message couldn't have been sent
and acknowledged before expiring defined in or acknowledged before expiring defined in
OUTBOX_EXPIRED_TIMEOUT_MS. (events are not posted upon OUTBOX_EXPIRED_TIMEOUT_MS. (events are not posted upon
deletion of successfully acknowledged messages) deletion of successfully acknowledged messages)
- This event id is posted only if - This event id is posted only if
MQTT_REPORT_DELETED_MESSAGES==1 MQTT_REPORT_DELETED_MESSAGES==1
- Additional context: msg_id (id of the deleted - Additional context: msg_id (id of the deleted
message). message, always 0 for QoS = 0 messages).
*/ */
MQTT_USER_EVENT, /*!< Custom event used to queue tasks into mqtt event handler MQTT_USER_EVENT, /*!< Custom event used to queue tasks into mqtt event handler
All fields from the esp_mqtt_event_t type could be used to pass All fields from the esp_mqtt_event_t type could be used to pass

View File

@ -1544,7 +1544,7 @@ static void mqtt_delete_expired_messages(esp_mqtt_client_handle_t client)
#if MQTT_REPORT_DELETED_MESSAGES #if MQTT_REPORT_DELETED_MESSAGES
// also report the deleted items as MQTT_EVENT_DELETED events if enabled // also report the deleted items as MQTT_EVENT_DELETED events if enabled
int msg_id = 0; int msg_id = 0;
while ((msg_id = outbox_delete_single_expired(client->outbox, platform_tick_get_ms(), OUTBOX_EXPIRED_TIMEOUT_MS)) > 0) { while ((msg_id = outbox_delete_single_expired(client->outbox, platform_tick_get_ms(), OUTBOX_EXPIRED_TIMEOUT_MS)) >= 0) {
client->event.event_id = MQTT_EVENT_DELETED; client->event.event_id = MQTT_EVENT_DELETED;
client->event.msg_id = msg_id; client->event.msg_id = msg_id;
if (esp_mqtt_dispatch_event(client) != ESP_OK) { if (esp_mqtt_dispatch_event(client) != ESP_OK) {