From 235500c9509545286d676e7389284d37f7a095ec Mon Sep 17 00:00:00 2001 From: Clemens Kirchgatterer Date: Wed, 17 Feb 2021 19:03:58 +0100 Subject: [PATCH 1/2] Fix dropped SSL connection when buffer gets full. mbedTLS requires repeated calls to mbedtls_ssl_write() whenever it returns MBEDTLS_ERR_SSL_WANT_READ or MBEDTLS_ERR_SSL_WANT_WRITE. this happens when the client sends data faster then the server or the connection can handle. Fixes: https://github.com/espressif/arduino-esp32/issues/2494 --- libraries/WiFiClientSecure/src/ssl_client.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/WiFiClientSecure/src/ssl_client.cpp b/libraries/WiFiClientSecure/src/ssl_client.cpp index 9f168a0aabd..659366e8f28 100644 --- a/libraries/WiFiClientSecure/src/ssl_client.cpp +++ b/libraries/WiFiClientSecure/src/ssl_client.cpp @@ -289,11 +289,11 @@ int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t l log_v("Writing HTTP request with %d bytes...", len); //for low level debug int ret = -1; - if ((ret = mbedtls_ssl_write(&ssl_client->ssl_ctx, data, len)) <= 0){ - log_v("Handling error %d", ret); //for low level debug - return handle_error(ret); - } else{ - log_v("Returning with %d bytes written", ret); //for low level debug + while ((ret = mbedtls_ssl_write(&ssl_client->ssl_ctx, data, len)) <= 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE && ret < 0) { + log_v("Handling error %d", ret); //for low level debug + return handle_error(ret); + } } return ret; From 2ffb03ae967d859613986d82cd9e5b3582951dee Mon Sep 17 00:00:00 2001 From: Clemens Kirchgatterer Date: Thu, 18 Feb 2021 17:58:23 +0100 Subject: [PATCH 2/2] Update ssl_client.cpp Add vTaskDelay() --- libraries/WiFiClientSecure/src/ssl_client.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/WiFiClientSecure/src/ssl_client.cpp b/libraries/WiFiClientSecure/src/ssl_client.cpp index 659366e8f28..eb47240a44c 100644 --- a/libraries/WiFiClientSecure/src/ssl_client.cpp +++ b/libraries/WiFiClientSecure/src/ssl_client.cpp @@ -294,6 +294,7 @@ int send_ssl_data(sslclient_context *ssl_client, const uint8_t *data, uint16_t l log_v("Handling error %d", ret); //for low level debug return handle_error(ret); } + vTaskDelay(2); } return ret;