Merge branch 'feature/tcp_transport' into 'master'

tcp_transport: optimize memory

See merge request espressif/esp-idf!18102
This commit is contained in:
David Čermák 2022-06-09 15:25:08 +08:00
commit f9c8d635c5
2 changed files with 21 additions and 0 deletions

View File

@ -13,6 +13,14 @@ menu "TCP Transport"
depends on WS_TRANSPORT depends on WS_TRANSPORT
help help
Size of the buffer used for constructing the HTTP Upgrade request during connect Size of the buffer used for constructing the HTTP Upgrade request during connect
config WS_DYNAMIC_BUFFER
bool "Using dynamic websocket transport buffer"
default n
depends on WS_TRANSPORT
help
If enable this option, websocket transport buffer will be freed after connection
succeed to save more heap.
endmenu endmenu
endmenu endmenu

View File

@ -152,6 +152,15 @@ static int ws_connect(esp_transport_handle_t t, const char *host, int port, int
unsigned char client_key[28] = {0}; unsigned char client_key[28] = {0};
const char *user_agent_ptr = (ws->user_agent) ? (ws->user_agent) : "ESP32 Websocket Client"; const char *user_agent_ptr = (ws->user_agent) ? (ws->user_agent) : "ESP32 Websocket Client";
#ifdef CONFIG_WS_DYNAMIC_BUFFER
if (!ws->buffer) {
ws->buffer = malloc(WS_BUFFER_SIZE);
if (!ws->buffer) {
ESP_LOGE(TAG, "Cannot allocate buffer for connect, need-%d", WS_BUFFER_SIZE);
return -1;
}
}
#endif
size_t outlen = 0; size_t outlen = 0;
esp_crypto_base64_encode(client_key, sizeof(client_key), &outlen, random_key, sizeof(random_key)); esp_crypto_base64_encode(client_key, sizeof(client_key), &outlen, random_key, sizeof(random_key));
@ -238,6 +247,10 @@ static int ws_connect(esp_transport_handle_t t, const char *host, int port, int
ESP_LOGE(TAG, "Invalid websocket key"); ESP_LOGE(TAG, "Invalid websocket key");
return -1; return -1;
} }
#ifdef CONFIG_WS_DYNAMIC_BUFFER
free(ws->buffer);
ws->buffer = NULL;
#endif
return 0; return 0;
} }