Explorar el Código

esp_http_client: Optimize code structure

yuanjm hace 5 años
padre
commit
b7791c171d

+ 8 - 15
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;

+ 17 - 17
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 (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);
+    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;
     }
-    *str = old_str;
     return old_str;
 }
 

+ 5 - 6
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);