From 983547290b466e78be68d254ec6974e033592eac Mon Sep 17 00:00:00 2001 From: Shubham Kulkarni Date: Thu, 17 Mar 2022 13:49:44 +0530 Subject: [PATCH 1/2] esp_http_client: Add new status code 303 and 308 --- components/esp_http_client/esp_http_client.c | 2 ++ components/esp_http_client/include/esp_http_client.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 24aab489b6..a7878611e4 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -802,7 +802,9 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client) switch (client->response->status_code) { case HttpStatus_MovedPermanently: case HttpStatus_Found: + case HttpStatus_SeeOther: case HttpStatus_TemporaryRedirect: + case HttpStatus_PermanentRedirect: esp_http_client_set_redirection(client); client->redirect_counter ++; client->process_again = 1; diff --git a/components/esp_http_client/include/esp_http_client.h b/components/esp_http_client/include/esp_http_client.h index e559b61939..b18e8d0f8a 100644 --- a/components/esp_http_client/include/esp_http_client.h +++ b/components/esp_http_client/include/esp_http_client.h @@ -150,7 +150,9 @@ typedef enum { HttpStatus_MultipleChoices = 300, HttpStatus_MovedPermanently = 301, HttpStatus_Found = 302, + HttpStatus_SeeOther = 303, HttpStatus_TemporaryRedirect = 307, + HttpStatus_PermanentRedirect = 308, /* 4xx - Client Error */ HttpStatus_BadRequest = 400, From 342f566002970db0a2c95e4269e333504155bbb9 Mon Sep 17 00:00:00 2001 From: Shubham Kulkarni Date: Thu, 17 Mar 2022 13:50:30 +0530 Subject: [PATCH 2/2] esp_https_ota: Add check for 303 and 308 status code Closes https://github.com/espressif/esp-idf/issues/8581 --- components/esp_https_ota/src/esp_https_ota.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/components/esp_https_ota/src/esp_https_ota.c b/components/esp_https_ota/src/esp_https_ota.c index 4647a5f8fb..6558bbab91 100644 --- a/components/esp_https_ota/src/esp_https_ota.c +++ b/components/esp_https_ota/src/esp_https_ota.c @@ -45,12 +45,29 @@ struct esp_https_ota_handle { typedef struct esp_https_ota_handle esp_https_ota_t; +static bool redirection_required(int status_code) +{ + switch (status_code) { + case HttpStatus_MovedPermanently: + case HttpStatus_Found: + case HttpStatus_SeeOther: + case HttpStatus_TemporaryRedirect: + case HttpStatus_PermanentRedirect: + return true; + default: + return false; + } + return false; +} + static bool process_again(int status_code) { switch (status_code) { case HttpStatus_MovedPermanently: case HttpStatus_Found: + case HttpStatus_SeeOther: case HttpStatus_TemporaryRedirect: + case HttpStatus_PermanentRedirect: case HttpStatus_Unauthorized: return true; default: @@ -62,7 +79,7 @@ static bool process_again(int status_code) static esp_err_t _http_handle_response_code(esp_http_client_handle_t http_client, int status_code) { esp_err_t err; - if (status_code == HttpStatus_MovedPermanently || status_code == HttpStatus_Found || status_code == HttpStatus_TemporaryRedirect) { + if (redirection_required(status_code)) { err = esp_http_client_set_redirection(http_client); if (err != ESP_OK) { ESP_LOGE(TAG, "URL redirection Failed");