Merge branch 'bugfix/http_client_eagain_v4.0' into 'release/v4.0'

esp_http_client: Fixed handling of EAGAIN return (backport v4.0)

See merge request espressif/esp-idf!15277
This commit is contained in:
Mahavir Jain
2021-10-11 04:23:51 +00:00
2 changed files with 12 additions and 4 deletions

View File

@ -776,7 +776,7 @@ esp_err_t esp_http_client_set_url(esp_http_client_handle_t client, const char *u
} else { } else {
return ESP_ERR_NO_MEM; return ESP_ERR_NO_MEM;
} }
} }
//Reset path and query if there are no information //Reset path and query if there are no information
if (purl.field_data[UF_PATH].len) { if (purl.field_data[UF_PATH].len) {
@ -888,11 +888,18 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len)
} }
ESP_LOG_LEVEL(sev, TAG, "esp_transport_read returned:%d and errno:%d ", rlen, errno); ESP_LOG_LEVEL(sev, TAG, "esp_transport_read returned:%d and errno:%d ", rlen, errno);
} }
if (rlen < 0 && ridx == 0 && !esp_http_client_is_complete_data_received(client)) { #ifdef CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS
return ESP_FAIL; if (rlen == MBEDTLS_ERR_SSL_WANT_READ || errno == EAGAIN) {
} else { #else
if (errno == EAGAIN) {
#endif
ESP_LOGD(TAG, "Received EAGAIN! rlen = %d, errno %d", rlen, errno);
return ridx; return ridx;
} }
if (rlen < 0 && ridx == 0 && !esp_http_client_is_complete_data_received(client)) {
return ESP_FAIL;
}
return ridx;
} }
res_buffer->output_ptr = buffer + ridx; res_buffer->output_ptr = buffer + ridx;
http_parser_execute(client->parser, client->parser_settings, res_buffer->data, rlen); http_parser_execute(client->parser, client->parser_settings, res_buffer->data, rlen);

View File

@ -307,6 +307,7 @@ esp_err_t esp_https_ota_perform(esp_https_ota_handle_t https_ota_handle)
} else if (data_read > 0) { } else if (data_read > 0) {
return _ota_write(handle, (const void *)handle->ota_upgrade_buf, data_read); return _ota_write(handle, (const void *)handle->ota_upgrade_buf, data_read);
} else { } else {
ESP_LOGE(TAG, "data read %d, errno %d", data_read, errno);
return ESP_FAIL; return ESP_FAIL;
} }
handle->state = ESP_HTTPS_OTA_SUCCESS; handle->state = ESP_HTTPS_OTA_SUCCESS;