Merge branch 'bugfix/httpd_open_fn_backport_v3.3' into 'release/v3.3'

HTTP Server : Close new session immediately if open_fn fails (Backport v3.3)

See merge request idf/esp-idf!5370
This commit is contained in:
Mahavir Jain 2019-07-01 15:11:50 +08:00
commit 968728bf95
2 changed files with 10 additions and 2 deletions

View file

@ -99,7 +99,9 @@ typedef void (*httpd_free_ctx_fn_t)(void *ctx);
*
* @param[in] hd server instance
* @param[in] sockfd session socket file descriptor
* @return status
* @return
* - ESP_OK : On success
* - Any value other than ESP_OK will signal the server to close the socket immediately
*/
typedef esp_err_t (*httpd_open_func_t)(httpd_handle_t hd, int sockfd);
@ -199,6 +201,8 @@ typedef struct httpd_config {
*
* If a context needs to be maintained between these functions, store it in the session using
* httpd_sess_set_transport_ctx() and retrieve it later with httpd_sess_get_transport_ctx()
*
* Returning a value other than ESP_OK will immediately close the new socket.
*/
httpd_open_func_t open_fn;

View file

@ -77,7 +77,11 @@ esp_err_t httpd_sess_new(struct httpd_data *hd, int newfd)
/* Call user-defined session opening function */
if (hd->config.open_fn) {
esp_err_t ret = hd->config.open_fn(hd, hd->hd_sd[i].fd);
if (ret != ESP_OK) return ret;
if (ret != ESP_OK) {
httpd_sess_delete(hd, hd->hd_sd[i].fd);
ESP_LOGD(TAG, LOG_FMT("open_fn failed for fd = %d"), newfd);
return ret;
}
}
return ESP_OK;
}