]> granicus.if.org Git - esp-idf/commitdiff
Add a `esp_http_client_set_redirection` function.
authorVikram Dattu <vikram.dattu@espressif.com>
Tue, 23 Apr 2019 13:53:20 +0000 (19:23 +0530)
committerVikram Dattu <vikram.dattu@espressif.com>
Wed, 24 Apr 2019 08:40:10 +0000 (14:10 +0530)
When using direct operations instead of `esp_http_client_perform`, we need a way to set redirection URL when we get 30x response codes. Added the function for the same.

User can now check status code and call `esp_http_client_set_redirection` function to enable redirection.

Related change in adf: https://gitlab.espressif.cn:6688/adf/esp-adf-internal/merge_requests/187

Closes https://github.com/espressif/esp-idf/issues/2712

Signed-off-by: Vikram Dattu <vikram.dattu@espressif.com>
components/esp_http_client/esp_http_client.c
components/esp_http_client/include/esp_http_client.h

index 91d344e055da21c9960c25fe769a4473e94e3dc9..d1283aebe3c00598b36aef86e04b898f1c0063e3 100644 (file)
@@ -589,6 +589,17 @@ esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client)
     return ESP_OK;
 }
 
+esp_err_t esp_http_client_set_redirection(esp_http_client_handle_t client)
+{
+    if (client == NULL) {
+        return ESP_ERR_INVALID_ARG;
+    }
+    if (client->location == NULL) {
+        return ESP_ERR_INVALID_ARG;
+    }
+    return esp_http_client_set_url(client, client->location);
+}
+
 static esp_err_t esp_http_check_response(esp_http_client_handle_t client)
 {
     char *auth_header = NULL;
index 160d16fa5940a1c760c28fd2b19c413119658deb..18b68b883346ff32d069d1d84830f471252a8c51 100644 (file)
@@ -376,6 +376,18 @@ esp_err_t esp_http_client_cleanup(esp_http_client_handle_t client);
  */
 esp_http_client_transport_t esp_http_client_get_transport_type(esp_http_client_handle_t client);
 
+/**
+ * @brief      Set redirection URL.
+ *             When received the 30x code from the server, the client stores the redirect URL provided by the server.
+ *             This function will set the current URL to redirect to enable client to execute the redirection request.
+ *
+ * @param[in]  client  The esp_http_client handle
+ *
+ * @return
+ *     - ESP_OK
+ *     - ESP_FAIL
+ */
+esp_err_t esp_http_client_set_redirection(esp_http_client_handle_t client);
 
 #ifdef __cplusplus
 }