Merge branch 'bugfix/httpd_log_purge_v3.2' into 'release/v3.2'

esp_http_server : Logging of purged data to monitor made configurable (backport v3.2)

See merge request idf/esp-idf!5016
This commit is contained in:
Mahavir Jain 2019-06-27 16:16:05 +08:00
commit 91ec6068e9
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);