]> granicus.if.org Git - esp-idf/commitdiff
bugfix(ota): update ota to download valid bin file
authorChen Wu <chenwu@espressif.com>
Mon, 12 Mar 2018 07:16:17 +0000 (15:16 +0800)
committerbot <bot@espressif.com>
Wed, 16 May 2018 09:24:47 +0000 (09:24 +0000)
examples/system/ota/main/ota_example_main.c

index 3d8a3008d1d6e40ead4aae75f878ccbbed1bcf4f..b5e0f606255b6518283302226a5d3e57b8e8a385 100644 (file)
@@ -245,16 +245,22 @@ static void ota_example_task(void *pvParameter)
     }
     ESP_LOGI(TAG, "esp_ota_begin succeeded");
 
-    bool resp_body_start = false, flag = true;
+    bool resp_body_start = false, socket_flag = true, http_200_flag = false;
     /*deal with all receive packet*/
-    while (flag) {
+    while (socket_flag) {
         memset(text, 0, TEXT_BUFFSIZE);
         memset(ota_write_data, 0, BUFFSIZE);
         int buff_len = recv(socket_id, text, TEXT_BUFFSIZE, 0);
         if (buff_len < 0) { /*receive error*/
             ESP_LOGE(TAG, "Error: receive data error! errno=%d", errno);
             task_fatal_error();
-        } else if (buff_len > 0 && !resp_body_start) { /*deal with response header*/
+        } else if (buff_len > 0 && !resp_body_start) {  /*deal with response header*/
+            // only start ota when server response 200 state code
+            if (strstr(text, "200") == NULL && !http_200_flag) {
+                ESP_LOGE(TAG, "ota url is invalid or bin is not exist");
+                task_fatal_error();
+            }
+            http_200_flag = true;
             memcpy(ota_write_data, text, buff_len);
             resp_body_start = read_past_http_header(text, buff_len, update_handle);
         } else if (buff_len > 0 && resp_body_start) { /*deal with response body*/
@@ -267,7 +273,7 @@ static void ota_example_task(void *pvParameter)
             binary_file_length += buff_len;
             ESP_LOGI(TAG, "Have written image length %d", binary_file_length);
         } else if (buff_len == 0) {  /*packet over*/
-            flag = false;
+            socket_flag = false;
             ESP_LOGI(TAG, "Connection closed, all packets received");
             close(socket_id);
         } else {