mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00: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() */
 | 
			
		||||
} 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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;)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user