From f6d2932953eb089691232863ff615a4c1ac0121b Mon Sep 17 00:00:00 2001 From: yuanjm Date: Tue, 31 Aug 2021 14:12:24 +0800 Subject: [PATCH 1/2] Revert "Merge branch 'bugfix/fix_ws_handle_big_messages_error_v4.2' into 'release/v4.2'" This reverts commit 5ca91eb54e219bd429d28215477790fbbc620a7e, reversing changes made to 192d42c8b8e9659d0411fc41d647a57786643226. --- components/esp_http_server/src/httpd_ws.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/components/esp_http_server/src/httpd_ws.c b/components/esp_http_server/src/httpd_ws.c index eb75e79c2a..a6af5c5d9e 100644 --- a/components/esp_http_server/src/httpd_ws.c +++ b/components/esp_http_server/src/httpd_ws.c @@ -250,15 +250,9 @@ esp_err_t httpd_ws_recv_frame(httpd_req_t *req, httpd_ws_frame_t *frame, size_t 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!"); - } + 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; } /* Unmask payload */ From 420aedbe3d65a5b37ce2c71af1342b4282857b54 Mon Sep 17 00:00:00 2001 From: yuanjm Date: Fri, 27 Aug 2021 17:20:14 +0800 Subject: [PATCH 2/2] esp_http_server: Fix ws server handle length over 1440(MTU) messages incorrectly. Closes https://github.com/espressif/esp-idf/issues/7457 --- components/esp_http_server/src/httpd_ws.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/components/esp_http_server/src/httpd_ws.c b/components/esp_http_server/src/httpd_ws.c index a6af5c5d9e..b91e28584c 100644 --- a/components/esp_http_server/src/httpd_ws.c +++ b/components/esp_http_server/src/httpd_ws.c @@ -250,9 +250,19 @@ 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; + size_t left_len = frame->len; + size_t offset = 0; + + while (left_len > 0) { + int read_len = httpd_recv_with_opt(req, (char *)frame->payload + offset, left_len, false); + if (read_len <= 0) { + ESP_LOGW(TAG, LOG_FMT("Failed to receive payload")); + return ESP_FAIL; + } + offset += read_len; + left_len -= read_len; + + ESP_LOGD(TAG, "Frame length: %d, Bytes Read: %d", frame->len, offset); } /* Unmask payload */