]> granicus.if.org Git - esp-idf/commitdiff
esp_http_server : Logging of purged data to monitor made configurable
authorAnurag Kar <anurag.kar@espressif.com>
Mon, 6 May 2019 07:36:40 +0000 (13:06 +0530)
committerAnurag Kar <anurag.kar@espressif.com>
Fri, 10 May 2019 08:55:39 +0000 (14:25 +0530)
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
components/esp_http_server/src/httpd_parse.c

index 01828951536a1c7ba0f275ec3b7b41a3410233d6..6112cbade0e03f082f378fbfbbb64e4767101046 100644 (file)
@@ -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
index b7fe50096a6431a8b967ff10a9377fb790fceea1..765510f0c2c818baf835d3aa7502b4aa8ac9eaa9 100644 (file)
@@ -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);