From f2a0b48cf9856a411970faa9943a0b9c7464c3ab Mon Sep 17 00:00:00 2001 From: yuanjm Date: Fri, 2 Jul 2021 10:49:31 +0800 Subject: [PATCH] esp_http_server: Fix ws server handle length over 1440(MTU) messages incorrectly. Closes https://github.com/espressif/esp-idf/issues/7202 --- components/esp_http_server/src/httpd_ws.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/components/esp_http_server/src/httpd_ws.c b/components/esp_http_server/src/httpd_ws.c index c2f0ad581d..c4dd8c07e3 100644 --- a/components/esp_http_server/src/httpd_ws.c +++ b/components/esp_http_server/src/httpd_ws.c @@ -328,9 +328,15 @@ esp_err_t httpd_ws_recv_frame(httpd_req_t *req, httpd_ws_frame_t *frame, size_t return ESP_FAIL; } - if (httpd_recv_with_opt(req, (char *)frame->payload, frame->len, false) <= 0) { - ESP_LOGW(TAG, LOG_FMT("Failed to receive payload")); - return ESP_FAIL; + int read_len = 0, left_len = frame->len; + while (left_len > 0) { + if ((read_len = httpd_recv_with_opt(req, (char *)frame->payload + read_len, left_len, false)) <= 0) { + ESP_LOGW(TAG, LOG_FMT("Failed to receive payload")); + return ESP_FAIL; + } + if (left_len -= read_len) { + ESP_LOGD(TAG, "recv data length is less than the data length we want. Read again!"); + } } /* Unmask payload */