From c75b3e830736df0a90cfcd92f67dcc6d1b0c0f86 Mon Sep 17 00:00:00 2001 From: Clemens Kirchgatterer Date: Wed, 17 Feb 2021 18:59:17 +0100 Subject: [PATCH 1/3] 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. --- 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 4c5b90ccf64..0ac35a1028d 100644 --- a/libraries/WiFiClientSecure/src/ssl_client.cpp +++ b/libraries/WiFiClientSecure/src/ssl_client.cpp @@ -295,11 +295,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 e9ff62ef62a2a777e00b4b72d8c09713adb803a2 Mon Sep 17 00:00:00 2001 From: Clemens Kirchgatterer Date: Thu, 18 Feb 2021 18:01:11 +0100 Subject: [PATCH 2/3] 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 0ac35a1028d..382248571ea 100644 --- a/libraries/WiFiClientSecure/src/ssl_client.cpp +++ b/libraries/WiFiClientSecure/src/ssl_client.cpp @@ -300,6 +300,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; From adb2f819a5f7c26eab3e51e4c2fdc8367cab7e20 Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Mon, 22 Feb 2021 19:22:56 +0200 Subject: [PATCH 3/3] Update ssl_client.cpp --- libraries/WiFiClientSecure/src/ssl_client.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/WiFiClientSecure/src/ssl_client.cpp b/libraries/WiFiClientSecure/src/ssl_client.cpp index 382248571ea..efe0a4494e2 100644 --- a/libraries/WiFiClientSecure/src/ssl_client.cpp +++ b/libraries/WiFiClientSecure/src/ssl_client.cpp @@ -300,7 +300,8 @@ 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); + //wait for space to become available + vTaskDelay(2); } return ret;