From: Chen Wu Date: Mon, 12 Mar 2018 07:16:17 +0000 (+0800) Subject: bugfix(ota): update ota to download valid bin file X-Git-Tag: v3.1-beta1~126^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=460c4fa486c6b8b5c6f6503009e58eb405db90fd;p=esp-idf bugfix(ota): update ota to download valid bin file --- diff --git a/examples/system/ota/main/ota_example_main.c b/examples/system/ota/main/ota_example_main.c index 3d8a3008d1..b5e0f60625 100644 --- a/examples/system/ota/main/ota_example_main.c +++ b/examples/system/ota/main/ota_example_main.c @@ -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 {