diff --git a/components/esp_websocket_client/esp_websocket_client.c b/components/esp_websocket_client/esp_websocket_client.c index cae2b4d32c..bf280992db 100644 --- a/components/esp_websocket_client/esp_websocket_client.c +++ b/components/esp_websocket_client/esp_websocket_client.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -464,6 +464,12 @@ static esp_err_t stop_wait_task(esp_websocket_client_handle_t client) return ESP_OK; } +static void websocket_header_hook(void * client, const char * line, int line_len) +{ + ESP_LOGD(TAG, "%s header:%.*s", __func__, line_len, line); + esp_websocket_client_dispatch_event(client, WEBSOCKET_EVENT_HEADER_RECEIVED, line, line_len); +} + static esp_err_t set_websocket_transport_optional_settings(esp_websocket_client_handle_t client, const char *scheme) { esp_transport_handle_t trans = esp_transport_list_get_transport(client->transport_list, scheme); @@ -473,6 +479,8 @@ static esp_err_t set_websocket_transport_optional_settings(esp_websocket_client_ .sub_protocol = client->config->subprotocol, .user_agent = client->config->user_agent, .headers = client->config->headers, + .header_hook = websocket_header_hook, + .header_userp = client, .auth = client->config->auth, .propagate_control_frames = true }; diff --git a/components/esp_websocket_client/examples/linux/main/websocket_linux.c b/components/esp_websocket_client/examples/linux/main/websocket_linux.c index 3329274fbc..dd21ca5720 100644 --- a/components/esp_websocket_client/examples/linux/main/websocket_linux.c +++ b/components/esp_websocket_client/examples/linux/main/websocket_linux.c @@ -28,6 +28,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i case WEBSOCKET_EVENT_BEGIN: ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN"); break; + case WEBSOCKET_EVENT_HEADER_RECEIVED: + ESP_LOGI(TAG, "WEBSOCKET_EVENT_HEADER_RECEIVED: %.*s", data->data_len, data->data_ptr); + break; case WEBSOCKET_EVENT_CONNECTED: ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED"); break; diff --git a/components/esp_websocket_client/examples/target/main/websocket_example.c b/components/esp_websocket_client/examples/target/main/websocket_example.c index 31998527b5..d0e77acf97 100644 --- a/components/esp_websocket_client/examples/target/main/websocket_example.c +++ b/components/esp_websocket_client/examples/target/main/websocket_example.c @@ -77,6 +77,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i case WEBSOCKET_EVENT_BEGIN: ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN"); break; + case WEBSOCKET_EVENT_HEADER_RECEIVED: + ESP_LOGI(TAG, "WEBSOCKET_EVENT_HEADER_RECEIVED: %.*s", data->data_len, data->data_ptr); + break; case WEBSOCKET_EVENT_CONNECTED: ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED"); break; diff --git a/components/esp_websocket_client/include/esp_websocket_client.h b/components/esp_websocket_client/include/esp_websocket_client.h index 9923676aeb..56547dc539 100644 --- a/components/esp_websocket_client/include/esp_websocket_client.h +++ b/components/esp_websocket_client/include/esp_websocket_client.h @@ -31,6 +31,7 @@ ESP_EVENT_DECLARE_BASE(WEBSOCKET_EVENTS); // declaration of the task eve typedef enum { WEBSOCKET_EVENT_ANY = -1, WEBSOCKET_EVENT_ERROR = 0, /*!< This event occurs when there are any errors during execution */ + WEBSOCKET_EVENT_HEADER_RECEIVED,/*!< This event occurs for each pre-upgrade HTTP header */ WEBSOCKET_EVENT_CONNECTED, /*!< Once the Websocket has been connected to the server, no data exchange has been performed */ WEBSOCKET_EVENT_DISCONNECTED, /*!< The connection has been disconnected */ WEBSOCKET_EVENT_DATA, /*!< When receiving data from the server, possibly multiple portions of the packet */