feat(ws_transport): Merged set_header_hook and set_header_userp functions

This commit is contained in:
glmfe
2025-09-01 20:19:08 -03:00
committed by Rocha Euripedes
parent 58befcae26
commit 11f8534266
2 changed files with 19 additions and 38 deletions

View File

@@ -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

View File

@@ -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;)