Skip to content

Commit f96e373

Browse files
feat(websocket): add WEBSOCKET_EVENT_HEADER_RECEIVED
Send a new event for each HTTP header-line received. Depends on espressif/esp-idf#16119 Closes #715
1 parent ea9f29a commit f96e373

File tree

4 files changed

+16
-1
lines changed

4 files changed

+16
-1
lines changed

components/esp_websocket_client/esp_websocket_client.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -464,6 +464,12 @@ static esp_err_t stop_wait_task(esp_websocket_client_handle_t client)
464464
return ESP_OK;
465465
}
466466

467+
static void websocket_header_hook(void * client, const char * line, int line_len)
468+
{
469+
ESP_LOGD(TAG, "%s header:%.*s", __func__, line_len, line);
470+
esp_websocket_client_dispatch_event(client, WEBSOCKET_EVENT_HEADER_RECEIVED, line, line_len);
471+
}
472+
467473
static esp_err_t set_websocket_transport_optional_settings(esp_websocket_client_handle_t client, const char *scheme)
468474
{
469475
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_
473479
.sub_protocol = client->config->subprotocol,
474480
.user_agent = client->config->user_agent,
475481
.headers = client->config->headers,
482+
.header_hook = websocket_header_hook,
483+
.header_userp = client,
476484
.auth = client->config->auth,
477485
.propagate_control_frames = true
478486
};

components/esp_websocket_client/examples/linux/main/websocket_linux.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
2828
case WEBSOCKET_EVENT_BEGIN:
2929
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
3030
break;
31+
case WEBSOCKET_EVENT_HEADER_RECEIVED:
32+
ESP_LOGI(TAG, "WEBSOCKET_EVENT_HEADER_RECEIVED: %.*s", event_data->data_len, event_data->data);
33+
break;
3134
case WEBSOCKET_EVENT_CONNECTED:
3235
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
3336
break;

components/esp_websocket_client/examples/target/main/websocket_example.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
7777
case WEBSOCKET_EVENT_BEGIN:
7878
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
7979
break;
80+
case WEBSOCKET_EVENT_HEADER_RECEIVED:
81+
ESP_LOGI(TAG, "WEBSOCKET_EVENT_HEADER_RECEIVED: %.*s", event_data->data_len, event_data->data);
82+
break;
8083
case WEBSOCKET_EVENT_CONNECTED:
8184
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
8285
break;

components/esp_websocket_client/include/esp_websocket_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ ESP_EVENT_DECLARE_BASE(WEBSOCKET_EVENTS); // declaration of the task eve
3131
typedef enum {
3232
WEBSOCKET_EVENT_ANY = -1,
3333
WEBSOCKET_EVENT_ERROR = 0, /*!< This event occurs when there are any errors during execution */
34+
WEBSOCKET_EVENT_HEADER_RECEIVED,/*!< This event occurs for each pre-upgrade HTTP header */
3435
WEBSOCKET_EVENT_CONNECTED, /*!< Once the Websocket has been connected to the server, no data exchange has been performed */
3536
WEBSOCKET_EVENT_DISCONNECTED, /*!< The connection has been disconnected */
3637
WEBSOCKET_EVENT_DATA, /*!< When receiving data from the server, possibly multiple portions of the packet */

0 commit comments

Comments
 (0)