From 11f8534266fb1c3814bf51ddc98ebb5ae09446f6 Mon Sep 17 00:00:00 2001 From: glmfe Date: Mon, 1 Sep 2025 20:19:08 -0300 Subject: [PATCH] feat(ws_transport): Merged set_header_hook and set_header_userp functions --- .../tcp_transport/include/esp_transport_ws.h | 24 ++++---------- components/tcp_transport/transport_ws.c | 33 ++++++++----------- 2 files changed, 19 insertions(+), 38 deletions(-) diff --git a/components/tcp_transport/include/esp_transport_ws.h b/components/tcp_transport/include/esp_transport_ws.h index f4be6b3db4..a3bd40d418 100644 --- a/components/tcp_transport/include/esp_transport_ws.h +++ b/components/tcp_transport/include/esp_transport_ws.h @@ -29,7 +29,7 @@ typedef enum ws_transport_opcodes { * from the API esp_transport_ws_get_read_opcode() */ } ws_transport_opcodes_t; -typedef void (*ws_header_hook)(void * userp, const char * line, int line_len); +typedef void (*ws_header_hook_t)(void * user_context, const char * line, int line_len); /** * WS transport configuration structure @@ -39,8 +39,8 @@ typedef struct { const char *sub_protocol; /*!< WS subprotocol */ const char *user_agent; /*!< WS user agent */ const char *headers; /*!< WS additional headers */ - ws_header_hook header_hook; /*!< WS received header */ - void *header_userp; /*!< WS received header user-pointer */ + ws_header_hook_t header_hook; /*!< WS received header */ + void *header_user_context; /*!< WS received header user-context pointer */ const char *auth; /*!< HTTP authorization header */ char *response_headers; /*!< The buffer to copy the http response header */ size_t response_headers_len; /*!< The length of the http response header */ @@ -104,29 +104,17 @@ esp_err_t esp_transport_ws_set_user_agent(esp_transport_handle_t t, const char * esp_err_t esp_transport_ws_set_headers(esp_transport_handle_t t, const char *headers); /** - * @brief Set websocket header callback + * @brief Set websocket header callback and user-pointer * * @param t websocket transport handle * @param hook call function on header received. NULL to disable. + * @param user_context caller-controlled argument to pass to ws_header_hook_t * * @return * - ESP_OK on success * - One of the error codes */ -esp_err_t esp_transport_ws_set_header_hook(esp_transport_handle_t t, ws_header_hook hook); - - -/** - * @brief Set websocket header callback user-pointer - * - * @param t websocket transport handle - * @param userp caller-controlled argument to ws_header_hook - * - * @return - * - ESP_OK on success - * - One of the error codes - */ -esp_err_t esp_transport_ws_set_header_userp(esp_transport_handle_t t, void * userp); +esp_err_t esp_transport_ws_set_header_hook(esp_transport_handle_t t, ws_header_hook_t hook, void * user_context); /** * @brief Set websocket authorization headers diff --git a/components/tcp_transport/transport_ws.c b/components/tcp_transport/transport_ws.c index c683befb61..22c618f1d7 100644 --- a/components/tcp_transport/transport_ws.c +++ b/components/tcp_transport/transport_ws.c @@ -63,8 +63,8 @@ typedef struct { char *sub_protocol; char *user_agent; char *headers; - ws_header_hook header_hook; - void * header_userp; + ws_header_hook_t header_hook; + void * header_user_context; char *auth; char *buffer; /*!< Initial HTTP connection buffer, which may include data beyond the handshake headers, such as the next WebSocket packet*/ size_t buffer_len; /*!< The buffer length */ @@ -328,7 +328,7 @@ static int ws_connect(esp_transport_handle_t t, const char *host, int port, int server_key_len = line_len - header_sec_websocket_accept_len; } else if (ws->header_hook) { - ws->header_hook(ws->header_userp, header_cursor, line_len); + ws->header_hook(ws->header_user_context, header_cursor, line_len); } // Check for Location: header @@ -878,23 +878,20 @@ esp_err_t esp_transport_ws_set_headers(esp_transport_handle_t t, const char *hea return ESP_OK; } -esp_err_t esp_transport_ws_set_header_hook(esp_transport_handle_t t, ws_header_hook hook) +esp_err_t esp_transport_ws_set_header_hook(esp_transport_handle_t t, ws_header_hook_t hook, void * user_context) { if (t == NULL) { return ESP_ERR_INVALID_ARG; } + if (hook == NULL) { + ESP_LOGE(TAG, "Header hook is NULL"); + return ESP_ERR_INVALID_ARG; + } + ESP_LOGV(TAG, "User has context: %s", user_context != NULL ? "true" : "false"); + transport_ws_t *ws = esp_transport_get_context_data(t); ws->header_hook = hook; - return ESP_OK; -} - -esp_err_t esp_transport_ws_set_header_userp(esp_transport_handle_t t, void * userp) -{ - if (t == NULL) { - return ESP_ERR_INVALID_ARG; - } - transport_ws_t *ws = esp_transport_get_context_data(t); - ws->header_userp = userp; + ws->header_user_context = user_context; return ESP_OK; } @@ -963,14 +960,10 @@ esp_err_t esp_transport_ws_set_config(esp_transport_handle_t t, const esp_transp err = esp_transport_ws_set_headers(t, config->headers); ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;) } - if (config->header_hook) { - err = esp_transport_ws_set_header_hook(t, config->header_hook); + if (config->header_hook || config->header_user_context) { + err = esp_transport_ws_set_header_hook(t, config->header_hook, config->header_user_context); ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;) } - if (config->header_userp) { - err = esp_transport_ws_set_header_userp(t, config->header_userp); - ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;) - } if (config->auth) { err = esp_transport_ws_set_auth(t, config->auth); ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;)