diff --git a/components/esp_http_server/include/esp_http_server.h b/components/esp_http_server/include/esp_http_server.h index 0d936de88a..2eafca1839 100644 --- a/components/esp_http_server/include/esp_http_server.h +++ b/components/esp_http_server/include/esp_http_server.h @@ -1586,6 +1586,19 @@ esp_err_t httpd_ws_send_frame(httpd_req_t *req, httpd_ws_frame_t *pkt); */ esp_err_t httpd_ws_send_frame_async(httpd_handle_t hd, int fd, httpd_ws_frame_t *frame); +/** + * @brief Checks the supplied socket descriptor if it belongs to any active client + * of this server instance and if the websoket protocol is active + * + * @param[in] hd Server instance data + * @param[in] fd Socket descriptor + * @return + * - -1 : This fd is not a client of this httpd + * - 0 : This fd is an active client, protocol is not WS + * - 1 : This fd is an active client, protocol is WS + */ +int httpd_ws_get_fd_info(httpd_handle_t hd, int fd) + #endif /* CONFIG_HTTPD_WS_SUPPORT */ /** End of WebSocket related stuff * @} diff --git a/components/esp_http_server/src/httpd_ws.c b/components/esp_http_server/src/httpd_ws.c index a6af5c5d9e..07b9824a26 100644 --- a/components/esp_http_server/src/httpd_ws.c +++ b/components/esp_http_server/src/httpd_ws.c @@ -383,4 +383,15 @@ esp_err_t httpd_ws_get_frame_type(httpd_req_t *req) return ESP_OK; } +int httpd_ws_get_fd_info(httpd_handle_t hd, int fd) +{ + struct sock_db *sess = httpd_sess_get(hd, fd); + + if (sess == NULL) { + return -1; + } + bool is_active_ws = sess->ws_handshake_done && (!sess->ws_close); + return is_active_ws ? 1 : 0; +} + #endif /* CONFIG_HTTPD_WS_SUPPORT */