|
|
@@ -121,6 +121,7 @@ struct esp_websocket_client {
|
|
|
int payload_len;
|
|
|
int payload_offset;
|
|
|
esp_transport_keep_alive_t keep_alive_cfg;
|
|
|
+ struct ifreq *if_name;
|
|
|
};
|
|
|
|
|
|
static uint64_t _tick_get_ms(void)
|
|
|
@@ -316,6 +317,12 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
|
|
|
client->keep_alive_cfg.keep_alive_count = (config->keep_alive_count == 0) ? WEBSOCKET_KEEP_ALIVE_COUNT : config->keep_alive_count;
|
|
|
}
|
|
|
|
|
|
+ if (config->if_name) {
|
|
|
+ client->if_name = calloc(1, sizeof(struct ifreq) + 1);
|
|
|
+ ESP_WS_CLIENT_MEM_CHECK(TAG, client->if_name, goto _websocket_init_fail);
|
|
|
+ memcpy(client->if_name, config->if_name, sizeof(struct ifreq));
|
|
|
+ }
|
|
|
+
|
|
|
client->lock = xSemaphoreCreateRecursiveMutex();
|
|
|
ESP_WS_CLIENT_MEM_CHECK(TAG, client->lock, goto _websocket_init_fail);
|
|
|
|
|
|
@@ -331,7 +338,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
|
|
|
esp_transport_set_default_port(tcp, WEBSOCKET_TCP_DEFAULT_PORT);
|
|
|
esp_transport_list_add(client->transport_list, tcp, "_tcp"); // need to save to transport list, for cleanup
|
|
|
esp_transport_tcp_set_keep_alive(tcp, &client->keep_alive_cfg);
|
|
|
-
|
|
|
+ esp_transport_tcp_set_interface_name(tcp, client->if_name);
|
|
|
|
|
|
esp_transport_handle_t ws = esp_transport_ws_init(tcp);
|
|
|
ESP_WS_CLIENT_MEM_CHECK(TAG, ws, goto _websocket_init_fail);
|
|
|
@@ -448,6 +455,9 @@ esp_err_t esp_websocket_client_destroy(esp_websocket_client_handle_t client)
|
|
|
if (client->event_handle) {
|
|
|
esp_event_loop_delete(client->event_handle);
|
|
|
}
|
|
|
+ if (client->if_name) {
|
|
|
+ free(client->if_name);
|
|
|
+ }
|
|
|
esp_websocket_client_destroy_config(client);
|
|
|
esp_transport_list_destroy(client->transport_list);
|
|
|
vQueueDelete(client->lock);
|