|
|
@@ -40,6 +40,9 @@ static const char *TAG = "WEBSOCKET_CLIENT";
|
|
|
#define WEBSOCKET_PING_TIMEOUT_MS (10*1000)
|
|
|
#define WEBSOCKET_EVENT_QUEUE_SIZE (1)
|
|
|
#define WEBSOCKET_PINGPONG_TIMEOUT_SEC (120)
|
|
|
+#define WEBSOCKET_KEEP_ALIVE_IDLE (5)
|
|
|
+#define WEBSOCKET_KEEP_ALIVE_INTERVAL (5)
|
|
|
+#define WEBSOCKET_KEEP_ALIVE_COUNT (3)
|
|
|
|
|
|
#define ESP_WS_CLIENT_MEM_CHECK(TAG, a, action) if (!(a)) { \
|
|
|
ESP_LOGE(TAG,"%s(%d): %s", __FUNCTION__, __LINE__, "Memory exhausted"); \
|
|
|
@@ -108,6 +111,7 @@ struct esp_websocket_client {
|
|
|
ws_transport_opcodes_t last_opcode;
|
|
|
int payload_len;
|
|
|
int payload_offset;
|
|
|
+ esp_transport_keep_alive_t keep_alive_cfg;
|
|
|
};
|
|
|
|
|
|
static uint64_t _tick_get_ms(void)
|
|
|
@@ -290,6 +294,13 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+ if (config->keep_alive_enable == true) {
|
|
|
+ client->keep_alive_cfg.keep_alive_enable = true;
|
|
|
+ client->keep_alive_cfg.keep_alive_idle = (config->keep_alive_idle == 0) ? WEBSOCKET_KEEP_ALIVE_IDLE : config->keep_alive_idle;
|
|
|
+ client->keep_alive_cfg.keep_alive_interval = (config->keep_alive_interval == 0) ? WEBSOCKET_KEEP_ALIVE_INTERVAL : config->keep_alive_interval;
|
|
|
+ client->keep_alive_cfg.keep_alive_count = (config->keep_alive_count == 0) ? WEBSOCKET_KEEP_ALIVE_COUNT : config->keep_alive_count;
|
|
|
+ }
|
|
|
+
|
|
|
client->lock = xSemaphoreCreateRecursiveMutex();
|
|
|
ESP_WS_CLIENT_MEM_CHECK(TAG, client->lock, goto _websocket_init_fail);
|
|
|
|
|
|
@@ -303,6 +314,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
|
|
|
ESP_WS_CLIENT_MEM_CHECK(TAG, tcp, goto _websocket_init_fail);
|
|
|
|
|
|
esp_transport_set_default_port(tcp, WEBSOCKET_TCP_DEFAULT_PORT);
|
|
|
+ esp_transport_tcp_set_keep_alive(tcp, &client->keep_alive_cfg);
|
|
|
esp_transport_list_add(client->transport_list, tcp, "_tcp"); // need to save to transport list, for cleanup
|
|
|
|
|
|
|
|
|
@@ -346,6 +358,7 @@ esp_websocket_client_handle_t esp_websocket_client_init(const esp_websocket_clie
|
|
|
if (config->skip_cert_common_name_check) {
|
|
|
esp_transport_ssl_skip_common_name_check(ssl);
|
|
|
}
|
|
|
+ esp_transport_ssl_set_keep_alive(ssl, &client->keep_alive_cfg);
|
|
|
esp_transport_list_add(client->transport_list, ssl, "_ssl"); // need to save to transport list, for cleanup
|
|
|
|
|
|
esp_transport_handle_t wss = esp_transport_ws_init(ssl);
|