mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 09:09:10 -04:00
fix(esp_http_client): Fix ota failure with openssl server
If the TLS server (e.g., openssl) closes connection with encrypted close-notify alert then `errno` is not explicitly set on the socket by LwIP stack. For this scenario, we must rely only on `ERR_TCP_TRANSPORT_CONNECTION_CLOSED_BY_FIN` return value as the connection close case and do the graceful connection closure. Closes https://github.com/espressif/esp-idf/issues/14724
This commit is contained in:
parent
907337aa7c
commit
1608b89ff0
@ -1192,15 +1192,15 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len)
|
||||
ESP_LOGD(TAG, "need_read=%d, byte_to_read=%d, rlen=%d, ridx=%d", need_read, byte_to_read, rlen, ridx);
|
||||
|
||||
if (rlen <= 0) {
|
||||
esp_log_level_t sev = ESP_LOG_WARN;
|
||||
/* Check for cleanly closed connection */
|
||||
if (rlen == ERR_TCP_TRANSPORT_CONNECTION_CLOSED_BY_FIN && client->response->is_chunked) {
|
||||
/* Explicit call to parser for invoking `message_complete` callback */
|
||||
http_parser_execute(client->parser, client->parser_settings, res_buffer->data, 0);
|
||||
/* ...and lowering the message severity, as closed connection from server side is expected in chunked transport */
|
||||
sev = ESP_LOG_DEBUG;
|
||||
}
|
||||
if (errno != 0) {
|
||||
esp_log_level_t sev = ESP_LOG_WARN;
|
||||
/* Check for cleanly closed connection */
|
||||
if (rlen == ERR_TCP_TRANSPORT_CONNECTION_CLOSED_BY_FIN && client->response->is_chunked) {
|
||||
/* Explicit call to parser for invoking `message_complete` callback */
|
||||
http_parser_execute(client->parser, client->parser_settings, res_buffer->data, 0);
|
||||
/* ...and lowering the message severity, as closed connection from server side is expected in chunked transport */
|
||||
sev = ESP_LOG_DEBUG;
|
||||
}
|
||||
ESP_LOG_LEVEL(sev, TAG, "esp_transport_read returned:%d and errno:%d ", rlen, errno);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user