From c2f66b5d8960e645620ebc623930fed4ab23916b Mon Sep 17 00:00:00 2001 From: Harshit Malpani Date: Fri, 6 Oct 2023 11:48:55 +0530 Subject: [PATCH] fix(esp_http_client): Fix esp_http_client async mode Closes https://github.com/espressif/esp-idf/issues/12358 --- components/esp_http_client/esp_http_client.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 37fdb1287c..25454cbdcd 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -1030,7 +1030,12 @@ static int esp_http_client_get_data(esp_http_client_handle_t client) int rlen = esp_transport_read(client->transport, res_buffer->data, client->buffer_size_rx, client->timeout_ms); if (rlen >= 0) { - http_parser_execute(client->parser, client->parser_settings, res_buffer->data, rlen); + // When tls error is ESP_TLS_ERR_SSL_WANT_READ (-0x6900), esp_trasnport_read returns ERR_TCP_TRANSPORT_CONNECTION_TIMEOUT (0x0). + // We should not execute http_parser_execute() on this condition as it sets the internal state machine in an + // invalid state. + if (!(client->is_async && rlen == 0)) { + http_parser_execute(client->parser, client->parser_settings, res_buffer->data, rlen); + } } return rlen; }