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
/* 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);