diff --git a/components/esp_http_server/Kconfig b/components/esp_http_server/Kconfig index 323961ad5..0ef6b5e23 100644 --- a/components/esp_http_server/Kconfig +++ b/components/esp_http_server/Kconfig @@ -12,4 +12,23 @@ config HTTPD_MAX_URI_LEN help This sets the maximum supported size of HTTP request URI to be processed by the server + config HTTPD_PURGE_BUF_LEN + int "Length of temporary buffer for purging data" + default 32 + help + This sets the size of the temporary buffer used to receive and discard any remaining data that is + received from the HTTP client in the request, but not processed as part of the server HTTP request + handler. + + If the remaining data is larger than the available buffer size, the buffer will be filled in multiple + iterations. The buffer should be small enough to fit on the stack, but large enough to avoid excessive + iterations. + + config HTTPD_LOG_PURGE_DATA + bool "Log purged content data at Debug level" + default n + help + Enabling this will log discarded binary HTTP request data at Debug level. + For large content data this may not be desirable as it will clutter the log. + endmenu diff --git a/components/esp_http_server/src/httpd_parse.c b/components/esp_http_server/src/httpd_parse.c index 4900f1894..08c85c8d3 100644 --- a/components/esp_http_server/src/httpd_parse.c +++ b/components/esp_http_server/src/httpd_parse.c @@ -661,18 +661,25 @@ esp_err_t httpd_req_delete(struct httpd_data *hd) /* Finish off reading any pending/leftover data */ while (ra->remaining_len) { /* Any length small enough not to overload the stack, but large - * enough to finish off the buffers fast - */ - char dummy[32]; - int recv_len = MIN(sizeof(dummy) - 1, ra->remaining_len); - int ret = httpd_req_recv(r, dummy, recv_len); - if (ret < 0) { + * enough to finish off the buffers fast */ + char dummy[CONFIG_HTTPD_PURGE_BUF_LEN]; + int recv_len = MIN(sizeof(dummy), ra->remaining_len); + recv_len = httpd_req_recv(r, dummy, recv_len); + if (recv_len < 0) { httpd_req_cleanup(r); return ESP_FAIL; } - dummy[ret] = '\0'; - ESP_LOGD(TAG, LOG_FMT("purging data : %s"), dummy); + ESP_LOGD(TAG, LOG_FMT("purging data size : %d bytes"), recv_len); + +#ifdef CONFIG_HTTPD_LOG_PURGE_DATA + /* Enabling this will log discarded binary HTTP content data at + * Debug level. For large content data this may not be desirable + * as it will clutter the log */ + ESP_LOGD(TAG, "================= PURGED DATA ================="); + ESP_LOG_BUFFER_HEX_LEVEL(TAG, dummy, recv_len, ESP_LOG_DEBUG); + ESP_LOGD(TAG, "==============================================="); +#endif } httpd_req_cleanup(r);