mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-11-07 18:11:38 +01:00
feat(websocket): add WEBSOCKET_EVENT_HEADER_RECEIVED (#827)
Send a new event for each HTTP header-line received. Depends on https://github.com/espressif/esp-idf/pull/16119 Closes https://github.com/espressif/esp-protocols/issues/715
This commit is contained in:
committed by
GitHub
parent
bfa604b5f6
commit
18f0d02806
@@ -484,6 +484,14 @@ static esp_err_t stop_wait_task(esp_websocket_client_handle_t client)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if WS_TRANSPORT_HEADER_CALLBACK_SUPPORT
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static esp_err_t set_websocket_transport_optional_settings(esp_websocket_client_handle_t client, const char *scheme)
|
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);
|
esp_transport_handle_t trans = esp_transport_list_get_transport(client->transport_list, scheme);
|
||||||
@@ -493,6 +501,10 @@ static esp_err_t set_websocket_transport_optional_settings(esp_websocket_client_
|
|||||||
.sub_protocol = client->config->subprotocol,
|
.sub_protocol = client->config->subprotocol,
|
||||||
.user_agent = client->config->user_agent,
|
.user_agent = client->config->user_agent,
|
||||||
.headers = client->config->headers,
|
.headers = client->config->headers,
|
||||||
|
#if WS_TRANSPORT_HEADER_CALLBACK_SUPPORT
|
||||||
|
.header_hook = websocket_header_hook,
|
||||||
|
.header_user_context = client,
|
||||||
|
#endif
|
||||||
.auth = client->config->auth,
|
.auth = client->config->auth,
|
||||||
.propagate_control_frames = true
|
.propagate_control_frames = true
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -29,6 +29,11 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
|
|||||||
case WEBSOCKET_EVENT_BEGIN:
|
case WEBSOCKET_EVENT_BEGIN:
|
||||||
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
|
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
|
||||||
break;
|
break;
|
||||||
|
#if WS_TRANSPORT_HEADER_CALLBACK_SUPPORT
|
||||||
|
case WEBSOCKET_EVENT_HEADER_RECEIVED:
|
||||||
|
ESP_LOGI(TAG, "WEBSOCKET_EVENT_HEADER_RECEIVED: %.*s", data->data_len, data->data_ptr);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case WEBSOCKET_EVENT_CONNECTED:
|
case WEBSOCKET_EVENT_CONNECTED:
|
||||||
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
|
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -77,6 +77,11 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
|
|||||||
case WEBSOCKET_EVENT_BEGIN:
|
case WEBSOCKET_EVENT_BEGIN:
|
||||||
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
|
ESP_LOGI(TAG, "WEBSOCKET_EVENT_BEGIN");
|
||||||
break;
|
break;
|
||||||
|
#if WS_TRANSPORT_HEADER_CALLBACK_SUPPORT
|
||||||
|
case WEBSOCKET_EVENT_HEADER_RECEIVED:
|
||||||
|
ESP_LOGI(TAG, "WEBSOCKET_EVENT_HEADER_RECEIVED: %.*s", data->data_len, data->data_ptr);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case WEBSOCKET_EVENT_CONNECTED:
|
case WEBSOCKET_EVENT_CONNECTED:
|
||||||
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
|
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "esp_err.h"
|
#include "esp_err.h"
|
||||||
#include "esp_event.h"
|
#include "esp_event.h"
|
||||||
|
#include "esp_idf_version.h"
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include "esp_transport_ws.h"
|
#include "esp_transport_ws.h"
|
||||||
|
|
||||||
@@ -21,6 +22,13 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(6, 0, 0)
|
||||||
|
// Features supported in 6.0.0
|
||||||
|
#define WS_TRANSPORT_HEADER_CALLBACK_SUPPORT 1
|
||||||
|
#else
|
||||||
|
#define WS_TRANSPORT_HEADER_CALLBACK_SUPPORT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct esp_websocket_client *esp_websocket_client_handle_t;
|
typedef struct esp_websocket_client *esp_websocket_client_handle_t;
|
||||||
|
|
||||||
ESP_EVENT_DECLARE_BASE(WEBSOCKET_EVENTS); // declaration of the task events family
|
ESP_EVENT_DECLARE_BASE(WEBSOCKET_EVENTS); // declaration of the task events family
|
||||||
@@ -31,6 +39,9 @@ ESP_EVENT_DECLARE_BASE(WEBSOCKET_EVENTS); // declaration of the task eve
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
WEBSOCKET_EVENT_ANY = -1,
|
WEBSOCKET_EVENT_ANY = -1,
|
||||||
WEBSOCKET_EVENT_ERROR = 0, /*!< This event occurs when there are any errors during execution */
|
WEBSOCKET_EVENT_ERROR = 0, /*!< This event occurs when there are any errors during execution */
|
||||||
|
#if WS_TRANSPORT_HEADER_CALLBACK_SUPPORT
|
||||||
|
WEBSOCKET_EVENT_HEADER_RECEIVED,/*!< This event occurs for each pre-upgrade HTTP header */
|
||||||
|
#endif
|
||||||
WEBSOCKET_EVENT_CONNECTED, /*!< Once the Websocket has been connected to the server, no data exchange has been performed */
|
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_DISCONNECTED, /*!< The connection has been disconnected */
|
||||||
WEBSOCKET_EVENT_DATA, /*!< When receiving data from the server, possibly multiple portions of the packet */
|
WEBSOCKET_EVENT_DATA, /*!< When receiving data from the server, possibly multiple portions of the packet */
|
||||||
|
|||||||
Reference in New Issue
Block a user