From e309a0ea6f5bbedcf6a18de09da1642c5d1186f1 Mon Sep 17 00:00:00 2001 From: yuanjm Date: Sun, 7 Feb 2021 11:37:49 +0800 Subject: [PATCH] esp_http_client: Optimize code structure --- components/esp_http_client/esp_http_client.c | 23 +++++-------- components/esp_http_client/lib/http_utils.c | 34 +++++++++---------- .../esp_http_client/lib/include/http_utils.h | 11 +++--- 3 files changed, 30 insertions(+), 38 deletions(-) diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 07f8635ea6..779033d427 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -206,10 +206,8 @@ static int http_on_status(http_parser *parser, const char *at, size_t length) return 0; } -static int http_on_header_field(http_parser *parser, const char *at, size_t length) +static int http_on_header_event(esp_http_client_handle_t client) { - esp_http_client_t *client = parser->data; - if (client->current_header_key != NULL && client->current_header_value != NULL) { ESP_LOGD(TAG, "HEADER=%s:%s", client->current_header_key, client->current_header_value); client->event.header_key = client->current_header_key; @@ -220,7 +218,13 @@ static int http_on_header_field(http_parser *parser, const char *at, size_t leng client->current_header_key = NULL; client->current_header_value = NULL; } + return 0; +} +static int http_on_header_field(http_parser *parser, const char *at, size_t length) +{ + esp_http_client_t *client = parser->data; + http_on_header_event(client); http_utils_append_string(&client->current_header_key, at, length); return 0; @@ -247,18 +251,7 @@ static int http_on_header_value(http_parser *parser, const char *at, size_t leng static int http_on_headers_complete(http_parser *parser) { esp_http_client_handle_t client = parser->data; - - if (client->current_header_key != NULL && client->current_header_value != NULL) { - ESP_LOGD(TAG, "HEADER=%s:%s", client->current_header_key, client->current_header_value); - client->event.header_key = client->current_header_key; - client->event.header_value = client->current_header_value; - http_dispatch_event(client, HTTP_EVENT_ON_HEADER, NULL, 0); - free(client->current_header_key); - free(client->current_header_value); - client->current_header_key = NULL; - client->current_header_value = NULL; - } - + http_on_header_event(client); client->response->status_code = parser->status_code; client->response->data_offset = parser->nread; client->response->content_length = parser->content_length; diff --git a/components/esp_http_client/lib/http_utils.c b/components/esp_http_client/lib/http_utils.c index a70eed5d23..174be8764c 100644 --- a/components/esp_http_client/lib/http_utils.c +++ b/components/esp_http_client/lib/http_utils.c @@ -63,25 +63,25 @@ char *http_utils_assign_string(char **str, const char *new_str, int len) char *http_utils_append_string(char **str, const char *new_str, int len) { - if (new_str == NULL) { - return NULL; - } + int l = len; + int old_len = 0; char *old_str = *str; - if (len <= 0) { - len = strlen(new_str); + if (new_str != NULL) { + if (l < 0) { + l = strlen(new_str); + } + if (old_str) { + old_len = strlen(old_str); + old_str = realloc(old_str, old_len + l + 1); + mem_check(old_str); + old_str[old_len + l] = 0; + } else { + old_str = calloc(1, l + 1); + mem_check(old_str); + } + memcpy(old_str + old_len, new_str, l); + *str = old_str; } - if (old_str) { - int old_len = strlen(old_str); - old_str = realloc(old_str, old_len + len + 1); - mem_check(old_str); - memcpy(old_str + old_len, new_str, len); - old_str[old_len + len] = 0; - } else { - old_str = calloc(1, len + 1); - mem_check(old_str); - memcpy(old_str, new_str, len); - } - *str = old_str; return old_str; } diff --git a/components/esp_http_client/lib/include/http_utils.h b/components/esp_http_client/lib/include/http_utils.h index d3563530eb..0ca7a88968 100644 --- a/components/esp_http_client/lib/include/http_utils.h +++ b/components/esp_http_client/lib/include/http_utils.h @@ -22,7 +22,7 @@ * * @param str pointer to string pointer * @param new_str assign this tring to str - * @param len length of string, 0 if new_str is zero terminated + * @param len length of string, less than 0 if new_str is zero terminated * * @return * - new_str pointer @@ -31,15 +31,14 @@ char *http_utils_assign_string(char **str, const char *new_str, int len); /** - * @brief Realloc *str and append new_str to it, if not NULL; assign new_str to *str pointer if NULL + * @brief Realloc *str and append new_str to it if new_str is not NULL; return *str pointer if new_str is NULL * * @param str pointer to string pointer - * @param new_str assign this string to str - * @param len length of string, 0 if new_str is zero terminated + * @param new_str append this string to str + * @param len length of string, less than 0 if new_str is zero terminated * * @return - * - new_str pointer - * - NULL + * - *str pointer */ char *http_utils_append_string(char **str, const char *new_str, int len);