mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/httpd_open_fn' into 'master'
HTTP Server : Close new session immediately if `open_fn` fails Closes IDFGH-1165 See merge request idf/esp-idf!5019
This commit is contained in:
commit
9dd1b2ffb6
@ -100,7 +100,9 @@ typedef void (*httpd_free_ctx_fn_t)(void *ctx);
|
|||||||
*
|
*
|
||||||
* @param[in] hd server instance
|
* @param[in] hd server instance
|
||||||
* @param[in] sockfd session socket file descriptor
|
* @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);
|
typedef esp_err_t (*httpd_open_func_t)(httpd_handle_t hd, int sockfd);
|
||||||
|
|
||||||
@ -201,6 +203,8 @@ typedef struct httpd_config {
|
|||||||
*
|
*
|
||||||
* If a context needs to be maintained between these functions, store it in the session using
|
* 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()
|
* 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;
|
httpd_open_func_t open_fn;
|
||||||
|
|
||||||
|
@ -77,7 +77,11 @@ esp_err_t httpd_sess_new(struct httpd_data *hd, int newfd)
|
|||||||
/* Call user-defined session opening function */
|
/* Call user-defined session opening function */
|
||||||
if (hd->config.open_fn) {
|
if (hd->config.open_fn) {
|
||||||
esp_err_t ret = hd->config.open_fn(hd, hd->hd_sd[i].fd);
|
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;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user