mirror of
https://github.com/espressif/esp-idf.git
synced 2025-10-02 18:10:57 +02:00
feat(ws_transport): Merged set_header_hook and set_header_userp functions
This commit is contained in:
@@ -29,7 +29,7 @@ typedef enum ws_transport_opcodes {
|
|||||||
* from the API esp_transport_ws_get_read_opcode() */
|
* from the API esp_transport_ws_get_read_opcode() */
|
||||||
} ws_transport_opcodes_t;
|
} 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
|
* WS transport configuration structure
|
||||||
@@ -39,8 +39,8 @@ typedef struct {
|
|||||||
const char *sub_protocol; /*!< WS subprotocol */
|
const char *sub_protocol; /*!< WS subprotocol */
|
||||||
const char *user_agent; /*!< WS user agent */
|
const char *user_agent; /*!< WS user agent */
|
||||||
const char *headers; /*!< WS additional headers */
|
const char *headers; /*!< WS additional headers */
|
||||||
ws_header_hook header_hook; /*!< WS received header */
|
ws_header_hook_t header_hook; /*!< WS received header */
|
||||||
void *header_userp; /*!< WS received header user-pointer */
|
void *header_user_context; /*!< WS received header user-context pointer */
|
||||||
const char *auth; /*!< HTTP authorization header */
|
const char *auth; /*!< HTTP authorization header */
|
||||||
char *response_headers; /*!< The buffer to copy the http response header */
|
char *response_headers; /*!< The buffer to copy the http response header */
|
||||||
size_t response_headers_len; /*!< The length of 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);
|
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 t websocket transport handle
|
||||||
* @param hook call function on header received. NULL to disable.
|
* @param hook call function on header received. NULL to disable.
|
||||||
|
* @param user_context caller-controlled argument to pass to ws_header_hook_t
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* - ESP_OK on success
|
* - ESP_OK on success
|
||||||
* - One of the error codes
|
* - One of the error codes
|
||||||
*/
|
*/
|
||||||
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);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set websocket authorization headers
|
* @brief Set websocket authorization headers
|
||||||
|
@@ -63,8 +63,8 @@ typedef struct {
|
|||||||
char *sub_protocol;
|
char *sub_protocol;
|
||||||
char *user_agent;
|
char *user_agent;
|
||||||
char *headers;
|
char *headers;
|
||||||
ws_header_hook header_hook;
|
ws_header_hook_t header_hook;
|
||||||
void * header_userp;
|
void * header_user_context;
|
||||||
char *auth;
|
char *auth;
|
||||||
char *buffer; /*!< Initial HTTP connection buffer, which may include data beyond the handshake headers, such as the next WebSocket packet*/
|
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 */
|
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;
|
server_key_len = line_len - header_sec_websocket_accept_len;
|
||||||
}
|
}
|
||||||
else if (ws->header_hook) {
|
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
|
// 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;
|
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) {
|
if (t == NULL) {
|
||||||
return ESP_ERR_INVALID_ARG;
|
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);
|
transport_ws_t *ws = esp_transport_get_context_data(t);
|
||||||
ws->header_hook = hook;
|
ws->header_hook = hook;
|
||||||
return ESP_OK;
|
ws->header_user_context = user_context;
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
return ESP_OK;
|
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);
|
err = esp_transport_ws_set_headers(t, config->headers);
|
||||||
ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;)
|
ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;)
|
||||||
}
|
}
|
||||||
if (config->header_hook) {
|
if (config->header_hook || config->header_user_context) {
|
||||||
err = esp_transport_ws_set_header_hook(t, config->header_hook);
|
err = esp_transport_ws_set_header_hook(t, config->header_hook, config->header_user_context);
|
||||||
ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;)
|
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) {
|
if (config->auth) {
|
||||||
err = esp_transport_ws_set_auth(t, config->auth);
|
err = esp_transport_ws_set_auth(t, config->auth);
|
||||||
ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;)
|
ESP_TRANSPORT_ERR_OK_CHECK(TAG, err, return err;)
|
||||||
|
Reference in New Issue
Block a user