diff --git a/components/mqtt/esp-mqtt b/components/mqtt/esp-mqtt index a7b1cea5b..f08f3b678 160000 --- a/components/mqtt/esp-mqtt +++ b/components/mqtt/esp-mqtt @@ -1 +1 @@ -Subproject commit a7b1cea5b3e246298607a8c64447765297626f36 +Subproject commit f08f3b678717865234637164a29ed3a63e756ca7 diff --git a/components/tcp_transport/transport_ws.c b/components/tcp_transport/transport_ws.c index b453a3e55..55ea6d115 100644 --- a/components/tcp_transport/transport_ws.c +++ b/components/tcp_transport/transport_ws.c @@ -191,7 +191,10 @@ static int ws_read(esp_transport_handle_t t, char *buffer, int len, int timeout_ if ((poll_read = esp_transport_poll_read(ws->parent, timeout_ms)) <= 0) { return poll_read; } - if ((rlen = esp_transport_read(ws->parent, buffer, len, timeout_ms)) <= 0) { + + // Receive and process header first (based on header size) + int header = 2; + if ((rlen = esp_transport_read(ws->parent, buffer, header, timeout_ms)) <= 0) { ESP_LOGE(TAG, "Error read data"); return rlen; } @@ -203,11 +206,20 @@ static int ws_read(esp_transport_handle_t t, char *buffer, int len, int timeout_ ESP_LOGD(TAG, "Opcode: %d, mask: %d, len: %d\r\n", opcode, mask, payload_len); if (payload_len == 126) { // headerLen += 2; + if ((rlen = esp_transport_read(ws->parent, data_ptr, header, timeout_ms)) <= 0) { + ESP_LOGE(TAG, "Error read data"); + return rlen; + } payload_len = data_ptr[0] << 8 | data_ptr[1]; payload_len_buff = len - 4; data_ptr += 2; } else if (payload_len == 127) { // headerLen += 8; + header = 8; + if ((rlen = esp_transport_read(ws->parent, data_ptr, header, timeout_ms)) <= 0) { + ESP_LOGE(TAG, "Error read data"); + return rlen; + } if (data_ptr[0] != 0 || data_ptr[1] != 0 || data_ptr[2] != 0 || data_ptr[3] != 0) { // really too big! @@ -218,6 +230,11 @@ static int ws_read(esp_transport_handle_t t, char *buffer, int len, int timeout_ data_ptr += 8; payload_len_buff = len - 10; } + // Then receive and process payload + if ((rlen = esp_transport_read(ws->parent, data_ptr, payload_len, timeout_ms)) <= 0) { + ESP_LOGE(TAG, "Error read data"); + return rlen; + } if (payload_len > payload_len_buff) { ESP_LOGD(TAG, "Actual data received (%d) are longer than mqtt buffer (%d)", payload_len, payload_len_buff); payload_len = payload_len_buff; diff --git a/examples/protocols/mqtt/ssl/main/app_main.c b/examples/protocols/mqtt/ssl/main/app_main.c index 83f0b8a30..3be4d5766 100644 --- a/examples/protocols/mqtt/ssl/main/app_main.c +++ b/examples/protocols/mqtt/ssl/main/app_main.c @@ -112,6 +112,9 @@ static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) case MQTT_EVENT_ERROR: ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); break; + default: + ESP_LOGI(TAG, "Other event id:%d", event->event_id); + break; } return ESP_OK; } diff --git a/examples/protocols/mqtt/ssl_mutual_auth/main/app_main.c b/examples/protocols/mqtt/ssl_mutual_auth/main/app_main.c index 2ebce48b9..62b970056 100644 --- a/examples/protocols/mqtt/ssl_mutual_auth/main/app_main.c +++ b/examples/protocols/mqtt/ssl_mutual_auth/main/app_main.c @@ -114,6 +114,9 @@ static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) case MQTT_EVENT_ERROR: ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); break; + default: + ESP_LOGI(TAG, "Other event id:%d", event->event_id); + break; } return ESP_OK; } diff --git a/examples/protocols/mqtt/tcp/main/app_main.c b/examples/protocols/mqtt/tcp/main/app_main.c index 0d294bd46..ce1640adb 100644 --- a/examples/protocols/mqtt/tcp/main/app_main.c +++ b/examples/protocols/mqtt/tcp/main/app_main.c @@ -69,6 +69,9 @@ static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) case MQTT_EVENT_ERROR: ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); break; + default: + ESP_LOGI(TAG, "Other event id:%d", event->event_id); + break; } return ESP_OK; } diff --git a/examples/protocols/mqtt/ws/main/app_main.c b/examples/protocols/mqtt/ws/main/app_main.c index cdb0f0ab5..bcaf5c86c 100644 --- a/examples/protocols/mqtt/ws/main/app_main.c +++ b/examples/protocols/mqtt/ws/main/app_main.c @@ -66,6 +66,9 @@ static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) case MQTT_EVENT_ERROR: ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); break; + default: + ESP_LOGI(TAG, "Other event id:%d", event->event_id); + break; } return ESP_OK; } diff --git a/examples/protocols/mqtt/wss/main/app_main.c b/examples/protocols/mqtt/wss/main/app_main.c index bc1d045b5..12031173a 100644 --- a/examples/protocols/mqtt/wss/main/app_main.c +++ b/examples/protocols/mqtt/wss/main/app_main.c @@ -112,6 +112,9 @@ static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) case MQTT_EVENT_ERROR: ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); break; + default: + ESP_LOGI(TAG, "Other event id:%d", event->event_id); + break; } return ESP_OK; }