From f2aea4f5b67029ebf2dd2dd3ddfa8d8fc65794a4 Mon Sep 17 00:00:00 2001 From: Tuan PM Date: Tue, 22 May 2018 10:55:18 +0700 Subject: [PATCH] Add http status enum & return ESP_FAIL as error code --- components/esp_http_client/esp_http_client.c | 31 ++++++++++++++----- .../esp_http_client/include/esp_http_client.h | 3 +- components/esp_http_client/lib/http_auth.c | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 60d8857fad..a0aedf99b9 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -119,6 +119,8 @@ static esp_err_t _clear_connection_info(esp_http_client_handle_t client); #define DEFAULT_HTTP_PORT (80) #define DEFAULT_HTTPS_PORT (443) +#define HTTP_LENGTH_CHUNKED_ENCODING (-1) + static const char *DEFAULT_HTTP_USER_AGENT = "ESP32 HTTP Client/1.0"; static const char *DEFAULT_HTTP_PROTOCOL = "HTTP/1.1"; static const char *DEFAULT_HTTP_PATH = "/"; @@ -133,6 +135,19 @@ static const char *HTTP_METHOD_MAPPING[] = { "DELETE" }; +/** + * Enum for the HTTP status codes. + */ +enum HttpStatus_Code +{ + /* 3xx - Redirection */ + HttpStatus_MovedPermanently = 301, + HttpStatus_Found = 302, + + /* 4xx - Client Error */ + HttpStatus_Unauthorized = 401 +}; + static esp_err_t http_dispatch_event(esp_http_client_t *client, esp_http_client_event_id_t event_id, void *data, int len) { esp_http_client_event_t *event = &client->event; @@ -525,14 +540,14 @@ static esp_err_t esp_http_check_response(esp_http_client_handle_t client) return ESP_ERR_HTTP_MAX_REDIRECT; } switch (client->response->status_code) { - case 301: - case 302: + case HttpStatus_MovedPermanently: + case HttpStatus_Found: ESP_LOGI(TAG, "Redirect to %s", client->location); esp_http_client_set_url(client, client->location); client->redirect_counter ++; client->process_again = 1; break; - case 401: + case HttpStatus_Unauthorized: auth_header = client->auth_header; http_utils_trim_whitespace(&auth_header); ESP_LOGI(TAG, "UNAUTHORIZED: %s", auth_header); @@ -675,7 +690,7 @@ esp_err_t esp_http_client_set_method(esp_http_client_handle_t client, esp_http_c static int esp_http_client_get_data(esp_http_client_handle_t client) { if (client->state < HTTP_STATE_RES_COMPLETE_HEADER) { - return -1; + return ESP_FAIL; } esp_http_buffer_t *res_buffer = client->response->buffer; @@ -692,7 +707,7 @@ int esp_http_client_read(esp_http_client_handle_t client, char *buffer, int len) { esp_http_buffer_t *res_buffer = client->response->buffer; - int rlen = -1, ridx = 0; + int rlen = ESP_FAIL, ridx = 0; if (res_buffer->raw_len) { int remain_len = client->response->buffer->raw_len; if (remain_len > len) { @@ -790,7 +805,7 @@ esp_err_t esp_http_client_perform(esp_http_client_handle_t client) int esp_http_client_fetch_headers(esp_http_client_handle_t client) { if (client->state < HTTP_STATE_REQ_COMPLETE_HEADER) { - return -1; + return ESP_FAIL; } client->state = HTTP_STATE_REQ_COMPLETE_DATA; @@ -800,7 +815,7 @@ int esp_http_client_fetch_headers(esp_http_client_handle_t client) while (client->state < HTTP_STATE_RES_COMPLETE_HEADER) { buffer->len = transport_read(client->transport, buffer->data, client->buffer_size, client->timeout_ms); if (buffer->len <= 0) { - return -1; + return ESP_FAIL; } http_parser_execute(client->parser, client->parser_settings, buffer->data, buffer->len); } @@ -903,7 +918,7 @@ esp_err_t esp_http_client_open(esp_http_client_handle_t client, int write_len) int esp_http_client_write(esp_http_client_handle_t client, const char *buffer, int len) { if (client->state < HTTP_STATE_REQ_COMPLETE_HEADER) { - return -1; + return ESP_FAIL; } int need_write; int wlen = 0, widx = 0; diff --git a/components/esp_http_client/include/esp_http_client.h b/components/esp_http_client/include/esp_http_client.h index 2690cfe5d9..687cf8d3b5 100644 --- a/components/esp_http_client/include/esp_http_client.h +++ b/components/esp_http_client/include/esp_http_client.h @@ -258,7 +258,8 @@ int esp_http_client_write(esp_http_client_handle_t client, const char *buffer, i * @param[in] client The esp_http_client handle * * @return - * - (-1) if stream doesn't contain content-length header, or chunked encoding (checked by `esp_http_client_is_chunked` response) + * - (0) if stream doesn't contain content-length header, or chunked encoding (checked by `esp_http_client_is_chunked` response) + * - (-1: ESP_FAIL) if any errors * - Download data length defined by content-length header */ int esp_http_client_fetch_headers(esp_http_client_handle_t client); diff --git a/components/esp_http_client/lib/http_auth.c b/components/esp_http_client/lib/http_auth.c index 4e07ce5f3a..cd1d4ef721 100644 --- a/components/esp_http_client/lib/http_auth.c +++ b/components/esp_http_client/lib/http_auth.c @@ -51,7 +51,7 @@ static int md5_printf(char *md, const char *fmt, ...) va_start(ap, fmt); len = vasprintf((char **)&buf, fmt, ap); if (buf == NULL) { - return -1; + return ESP_FAIL; } MD5Init(&md5_ctx); -- 2.40.0