Skip to content

Commit fd1beaa

Browse files
committed
fix(websocket): skip esp_transport_{tcp|ssl}_set_xxxxx() calls for external transport
1 parent fb22749 commit fd1beaa

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

components/esp_websocket_client/esp_websocket_client.c

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,13 @@ static esp_err_t esp_websocket_client_create_transport(esp_websocket_client_hand
501501
tcp = esp_transport_tcp_init();
502502
} else {
503503
tcp = client->config->ext_transport;
504+
505+
esp_transport_handle_t ws = esp_transport_ws_init(tcp);
506+
ESP_WS_CLIENT_MEM_CHECK(TAG, ws, return ESP_ERR_NO_MEM);
507+
esp_transport_set_default_port(ws, WEBSOCKET_TCP_DEFAULT_PORT);
508+
esp_transport_list_add(client->transport_list, ws, WS_OVER_TCP_SCHEME);
509+
ESP_WS_CLIENT_ERR_OK_CHECK(TAG, set_websocket_transport_optional_settings(client, WS_OVER_TCP_SCHEME), return ESP_FAIL;)
510+
return ESP_OK;
504511
}
505512

506513
ESP_WS_CLIENT_MEM_CHECK(TAG, tcp, return ESP_ERR_NO_MEM);
@@ -526,6 +533,13 @@ static esp_err_t esp_websocket_client_create_transport(esp_websocket_client_hand
526533
ssl = esp_transport_ssl_init();
527534
} else {
528535
ssl = client->config->ext_transport;
536+
537+
esp_transport_handle_t wss = esp_transport_ws_init(ssl);
538+
ESP_WS_CLIENT_MEM_CHECK(TAG, wss, return ESP_ERR_NO_MEM);
539+
esp_transport_set_default_port(wss, WEBSOCKET_SSL_DEFAULT_PORT);
540+
esp_transport_list_add(client->transport_list, wss, WS_OVER_TLS_SCHEME);
541+
ESP_WS_CLIENT_ERR_OK_CHECK(TAG, set_websocket_transport_optional_settings(client, WS_OVER_TLS_SCHEME), return ESP_FAIL;)
542+
return ESP_OK;
529543
}
530544

531545
ESP_WS_CLIENT_MEM_CHECK(TAG, ssl, return ESP_ERR_NO_MEM);
@@ -998,9 +1012,8 @@ static void esp_websocket_client_task(void *pv)
9981012
client->run = true;
9991013

10001014
//get transport by scheme
1001-
if (client->transport == NULL && client->config->ext_transport == NULL) {
1002-
client->transport = esp_transport_list_get_transport(client->transport_list, client->config->scheme);
1003-
}
1015+
client->transport = esp_transport_list_get_transport(client->transport_list, client->config->scheme);
1016+
ESP_LOGI(TAG, "started, client->transport %p, client->config->ext_transport %p", client->transport, client->config->ext_transport);
10041017

10051018
if (client->transport == NULL) {
10061019
ESP_LOGE(TAG, "There are no transports valid, stop websocket client");
@@ -1167,12 +1180,9 @@ esp_err_t esp_websocket_client_start(esp_websocket_client_handle_t client)
11671180
return ESP_FAIL;
11681181
}
11691182

1170-
client->transport = client->config->ext_transport;
1171-
if (!client->transport) {
1172-
if (esp_websocket_client_create_transport(client) != ESP_OK) {
1173-
ESP_LOGE(TAG, "Failed to create websocket transport");
1174-
return ESP_FAIL;
1175-
}
1183+
if (esp_websocket_client_create_transport(client) != ESP_OK) {
1184+
ESP_LOGE(TAG, "Failed to create websocket transport");
1185+
return ESP_FAIL;
11761186
}
11771187

11781188
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ typedef struct {
133133
int network_timeout_ms; /*!< Abort network operation if it is not completed after this value, in milliseconds (defaults to 10s) */
134134
size_t ping_interval_sec; /*!< Websocket ping interval, defaults to 10 seconds if not set */
135135
struct ifreq *if_name; /*!< The name of interface for data to go through. Use the default interface without setting */
136-
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. */
136+
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. When external transport is used, socket options like if_name and keep_alive settings will be ignored, as it should be done when setting up the external transport. */
137137
} esp_websocket_client_config_t;
138138

139139
/**

0 commit comments

Comments
 (0)