mirror of
https://github.com/espressif/esp-mqtt.git
synced 2025-08-01 03:35:11 +02:00
minor fixes for issues present with fragmented/packed data
This commit is contained in:
@@ -536,12 +536,9 @@ static void deliver_publish(esp_mqtt_client_handle_t client, uint8_t *message, i
|
|||||||
} else {
|
} else {
|
||||||
total_mqtt_len = client->mqtt_state.message_length - client->mqtt_state.message_length_read + mqtt_data_length;
|
total_mqtt_len = client->mqtt_state.message_length - client->mqtt_state.message_length_read + mqtt_data_length;
|
||||||
mqtt_len = mqtt_data_length;
|
mqtt_len = mqtt_data_length;
|
||||||
if (client->mqtt_state.message_length_read < client->mqtt_state.message_length) {
|
mqtt_data_length = client->mqtt_state.message_length - ((uint8_t*)mqtt_data- message);
|
||||||
/* if message is framented -> correct the size for the first DATA event */
|
|
||||||
mqtt_data_length = client->mqtt_state.message_length_read - ((uint8_t*)mqtt_data- message);
|
|
||||||
}
|
|
||||||
/* read msg id only once */
|
/* read msg id only once */
|
||||||
client->event.msg_id = mqtt_get_id(client->mqtt_state.in_buffer, client->mqtt_state.in_buffer_length);
|
client->event.msg_id = mqtt_get_id(message, length);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mqtt_len = len_read;
|
mqtt_len = len_read;
|
||||||
@@ -555,7 +552,7 @@ static void deliver_publish(esp_mqtt_client_handle_t client, uint8_t *message, i
|
|||||||
client->event.event_id = MQTT_EVENT_DATA;
|
client->event.event_id = MQTT_EVENT_DATA;
|
||||||
client->event.data = (char *)mqtt_data;
|
client->event.data = (char *)mqtt_data;
|
||||||
client->event.data_len = mqtt_len;
|
client->event.data_len = mqtt_len;
|
||||||
client->event.total_data_len = total_mqtt_len;
|
client->event.total_data_len = mqtt_data_length;
|
||||||
client->event.current_data_offset = mqtt_offset;
|
client->event.current_data_offset = mqtt_offset;
|
||||||
client->event.topic = (char *)mqtt_topic;
|
client->event.topic = (char *)mqtt_topic;
|
||||||
client->event.topic_len = mqtt_topic_length;
|
client->event.topic_len = mqtt_topic_length;
|
||||||
@@ -665,9 +662,11 @@ static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client)
|
|||||||
msg_type = mqtt_get_type(&client->mqtt_state.in_buffer[transport_message_offset]);
|
msg_type = mqtt_get_type(&client->mqtt_state.in_buffer[transport_message_offset]);
|
||||||
msg_qos = mqtt_get_qos(&client->mqtt_state.in_buffer[transport_message_offset]);
|
msg_qos = mqtt_get_qos(&client->mqtt_state.in_buffer[transport_message_offset]);
|
||||||
msg_id = mqtt_get_id(&client->mqtt_state.in_buffer[transport_message_offset], read_len - transport_message_offset);
|
msg_id = mqtt_get_id(&client->mqtt_state.in_buffer[transport_message_offset], read_len - transport_message_offset);
|
||||||
ESP_LOGD(TAG, "msg_type=%d, msg_id=%d", msg_type, msg_id);
|
client->mqtt_state.message_length_read = read_len - transport_message_offset;
|
||||||
|
client->mqtt_state.message_length = mqtt_get_total_length(&client->mqtt_state.in_buffer[transport_message_offset], client->mqtt_state.message_length_read);
|
||||||
|
|
||||||
ESP_LOGD(TAG, "msg_type=%d, msg_id=%d", msg_type, msg_id);
|
ESP_LOGD(TAG, "msg_type=%d, msg_id=%d", msg_type, msg_id);
|
||||||
|
|
||||||
switch (msg_type)
|
switch (msg_type)
|
||||||
{
|
{
|
||||||
case MQTT_MSG_TYPE_SUBACK:
|
case MQTT_MSG_TYPE_SUBACK:
|
||||||
@@ -701,11 +700,8 @@ static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client)
|
|||||||
// return ESP_FAIL;
|
// return ESP_FAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deliver the publish message
|
// Deliver the publish message
|
||||||
client->mqtt_state.message_length_read = read_len - transport_message_offset;
|
ESP_LOGD(TAG, "deliver_publish, message_length_read=%d, message_length=%d", client->mqtt_state.message_length_read, client->mqtt_state.message_length);
|
||||||
client->mqtt_state.message_length = mqtt_get_total_length(&client->mqtt_state.in_buffer[transport_message_offset], client->mqtt_state.message_length_read);
|
|
||||||
ESP_LOGD(TAG, "deliver_publish, message_length_read=%d, message_length=%d", read_len, client->mqtt_state.message_length);
|
|
||||||
deliver_publish(client, &client->mqtt_state.in_buffer[transport_message_offset], client->mqtt_state.message_length_read);
|
deliver_publish(client, &client->mqtt_state.in_buffer[transport_message_offset], client->mqtt_state.message_length_read);
|
||||||
break;
|
break;
|
||||||
case MQTT_MSG_TYPE_PUBACK:
|
case MQTT_MSG_TYPE_PUBACK:
|
||||||
@@ -741,7 +737,7 @@ static esp_err_t mqtt_process_receive(esp_mqtt_client_handle_t client)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
transport_message_offset += mqtt_get_total_length(&client->mqtt_state.in_buffer[transport_message_offset], read_len - transport_message_offset) ;
|
transport_message_offset += client->mqtt_state.message_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
Reference in New Issue
Block a user