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
This commit is contained in:
Anurag Kar 2019-05-06 13:06:40 +05:30
parent df61612f8f
commit 6bf423d1e1
2 changed files with 34 additions and 8 deletions

View 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

View 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);