From 6bf423d1e172ff6ec498bf9e6cbeb5b4c15d0928 Mon Sep 17 00:00:00 2001 From: Anurag Kar Date: Mon, 6 May 2019 13:06:40 +0530 Subject: [PATCH] esp_http_server : Logging of purged data to monitor made configurable List of changes: * Kconfig option HTTPD_LOG_PURGE_DATA enables logging of purged data * Kconfig option HTTPD_PURGE_BUF_LEN sets purge buffer length * Purged data is logged in hex Closes https://github.com/espressif/esp-idf/issues/3359 --- components/esp_http_server/Kconfig | 19 ++++++++++++++++ components/esp_http_server/src/httpd_parse.c | 23 +++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/components/esp_http_server/Kconfig b/components/esp_http_server/Kconfig index 0182895153..6112cbade0 100644 --- a/components/esp_http_server/Kconfig +++ b/components/esp_http_server/Kconfig @@ -20,4 +20,23 @@ menu "HTTP Server" Using TCP_NODEALY socket option ensures that HTTP error response reaches the client before the underlying socket is closed. Please note that turning this off may cause multiple test failures + 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 b7fe50096a..765510f0c2 100644 --- a/components/esp_http_server/src/httpd_parse.c +++ b/components/esp_http_server/src/httpd_parse.c @@ -711,18 +711,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);