Skip to content

Commit 83ea287

Browse files
committed
feat(websocket): allow using external tcp transport handle
1 parent 2b64e80 commit 83ea287

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

components/esp_websocket_client/esp_websocket_client.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ typedef struct {
9696
bool use_global_ca_store;
9797
bool skip_cert_common_name_check;
9898
esp_err_t (*crt_bundle_attach)(void *conf);
99+
esp_transport_handle_t ext_transport;
99100
} websocket_config_storage_t;
100101

101102
typedef enum {
@@ -677,6 +678,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
677678
client->config->client_key_len = config->client_key_len;
678679
client->config->skip_cert_common_name_check = config->skip_cert_common_name_check;
679680
client->config->crt_bundle_attach = config->crt_bundle_attach;
681+
client->config->ext_transport = config->ext_transport;
680682

681683
if (config->uri) {
682684
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)
11001102
ESP_LOGE(TAG, "The client has started");
11011103
return ESP_FAIL;
11021104
}
1103-
if (esp_websocket_client_create_transport(client) != ESP_OK) {
1104-
ESP_LOGE(TAG, "Failed to create websocket transport");
1105-
return ESP_FAIL;
1105+
1106+
client->transport = client->config->ext_transport;
1107+
if (!client->transport) {
1108+
if (esp_websocket_client_create_transport(client) != ESP_OK) {
1109+
ESP_LOGE(TAG, "Failed to create websocket transport");
1110+
return ESP_FAIL;
1111+
}
11061112
}
11071113

11081114
if (xTaskCreate(esp_websocket_client_task, client->config->task_name ? client->config->task_name : "websocket_task",

components/esp_websocket_client/include/esp_websocket_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ typedef struct {
127127
int network_timeout_ms; /*!< Abort network operation if it is not completed after this value, in milliseconds (defaults to 10s) */
128128
size_t ping_interval_sec; /*!< Websocket ping interval, defaults to 10 seconds if not set */
129129
struct ifreq *if_name; /*!< The name of interface for data to go through. Use the default interface without setting */
130+
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. */
130131
} esp_websocket_client_config_t;
131132

132133
/**

0 commit comments

Comments
 (0)