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 committed by bot
parent 8e51f7e236
commit 7e6d1ef4bc
2 changed files with 34 additions and 8 deletions

View file

@ -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

View file

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