From 83ea2876fc3f101393afd5b96a2e4964b5b1ea67 Mon Sep 17 00:00:00 2001 From: Jackson Ming Hu Date: Wed, 31 May 2023 15:52:24 +1000 Subject: [PATCH] feat(websocket): allow using external tcp transport handle --- .../esp_websocket_client/esp_websocket_client.c | 12 +++++++++--- .../include/esp_websocket_client.h | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/components/esp_websocket_client/esp_websocket_client.c b/components/esp_websocket_client/esp_websocket_client.c index 83d7e45d5f..811a7001e4 100644 --- a/components/esp_websocket_client/esp_websocket_client.c +++ b/components/esp_websocket_client/esp_websocket_client.c @@ -96,6 +96,7 @@ typedef struct { bool use_global_ca_store; bool skip_cert_common_name_check; esp_err_t (*crt_bundle_attach)(void *conf); + esp_transport_handle_t ext_transport; } websocket_config_storage_t; typedef enum { @@ -677,6 +678,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie client->config->client_key_len = config->client_key_len; client->config->skip_cert_common_name_check = config->skip_cert_common_name_check; client->config->crt_bundle_attach = config->crt_bundle_attach; + client->config->ext_transport = config->ext_transport; if (config->uri) { if (esp_websocket_client_set_uri(client, config->uri) != ESP_OK) { @@ -1100,9 +1102,13 @@ esp_err_t esp_websocket_client_start(esp_websocket_client_handle_t client) ESP_LOGE(TAG, "The client has started"); return ESP_FAIL; } - if (esp_websocket_client_create_transport(client) != ESP_OK) { - ESP_LOGE(TAG, "Failed to create websocket transport"); - return ESP_FAIL; + + client->transport = client->config->ext_transport; + if (!client->transport) { + if (esp_websocket_client_create_transport(client) != ESP_OK) { + ESP_LOGE(TAG, "Failed to create websocket transport"); + return ESP_FAIL; + } } if (xTaskCreate(esp_websocket_client_task, client->config->task_name ? client->config->task_name : "websocket_task", diff --git a/components/esp_websocket_client/include/esp_websocket_client.h b/components/esp_websocket_client/include/esp_websocket_client.h index db7e8cdb8a..3f053d8f8d 100644 --- a/components/esp_websocket_client/include/esp_websocket_client.h +++ b/components/esp_websocket_client/include/esp_websocket_client.h @@ -127,6 +127,7 @@ typedef struct { int network_timeout_ms; /*!< Abort network operation if it is not completed after this value, in milliseconds (defaults to 10s) */ size_t ping_interval_sec; /*!< Websocket ping interval, defaults to 10 seconds if not set */ struct ifreq *if_name; /*!< The name of interface for data to go through. Use the default interface without setting */ + esp_transport_handle_t ext_transport; /*!< External WebSocket tcp_transport handle to the client; or if null, the client will create its own transport handle. */ } esp_websocket_client_config_t; /**