@@ -1550,6 +1550,32 @@ static esp_err_t mqtt_resend_queued(esp_mqtt_client_handle_t client, outbox_item
1550
1550
return ESP_OK ;
1551
1551
}
1552
1552
1553
+ static esp_err_t mqtt_resend_pubrel (esp_mqtt_client_handle_t client , outbox_item_handle_t item )
1554
+ {
1555
+ client -> mqtt_state .connection .outbound_message .data = outbox_item_get_data (item , & client -> mqtt_state .connection .outbound_message .length , & client -> mqtt_state .pending_msg_id ,
1556
+ & client -> mqtt_state .pending_msg_type , & client -> mqtt_state .pending_publish_qos );
1557
+ if (client -> mqtt_state .connection .information .protocol_ver == MQTT_PROTOCOL_V_5 ) {
1558
+ #ifdef MQTT_PROTOCOL_5
1559
+ ESP_LOGI (TAG , "MQTT_MSG_TYPE_PUBREC return code is %d" , mqtt5_msg_get_reason_code (client -> mqtt_state .in_buffer , client -> mqtt_state .in_buffer_read_len ));
1560
+ mqtt5_msg_pubrel (& client -> mqtt_state .connection , client -> mqtt_state .pending_msg_id );
1561
+ #endif
1562
+ } else {
1563
+ mqtt_msg_pubrel (& client -> mqtt_state .connection , client -> mqtt_state .pending_msg_id );
1564
+ }
1565
+ if (client -> mqtt_state .connection .outbound_message .length == 0 ) {
1566
+ ESP_LOGE (TAG , "Publish response message PUBREL cannot be created" );
1567
+ return ESP_FAIL ;
1568
+ }
1569
+
1570
+ if (esp_mqtt_write (client ) != ESP_OK ) {
1571
+ ESP_LOGE (TAG , "Error to resend data " );
1572
+ esp_mqtt_abort_connection (client );
1573
+ return ESP_FAIL ;
1574
+ }
1575
+
1576
+ return ESP_OK ;
1577
+ }
1578
+
1553
1579
static void mqtt_delete_expired_messages (esp_mqtt_client_handle_t client )
1554
1580
{
1555
1581
// Delete message after OUTBOX_EXPIRED_TIMEOUT_MS milliseconds
@@ -1723,6 +1749,16 @@ static void esp_mqtt_task(void *pv)
1723
1749
if (client -> mqtt_state .connection .information .protocol_ver == MQTT_PROTOCOL_V_5 ) {
1724
1750
esp_mqtt5_increment_packet_counter (client );
1725
1751
}
1752
+ #endif
1753
+ }
1754
+ }
1755
+ item = outbox_dequeue (client -> outbox , ACKNOWLEDGED , & msg_tick );
1756
+ if (item && (last_retransmit - msg_tick > client -> config -> message_retransmit_timeout )) {
1757
+ if (mqtt_resend_pubrel (client , item ) == ESP_OK ) {
1758
+ #ifdef MQTT_PROTOCOL_5
1759
+ if (client -> mqtt_state .connection .information .protocol_ver == MQTT_PROTOCOL_V_5 ) {
1760
+ esp_mqtt5_increment_packet_counter (client );
1761
+ }
1726
1762
#endif
1727
1763
}
1728
1764
}
0 commit comments