*/
esp_err_t esp_https_ota_perform(esp_https_ota_handle_t https_ota_handle);
+/**
+ * @brief Checks if complete data was received or not
+ *
+ * @note This API can be called just before esp_https_ota_finish() to validate if the complete image was indeed received.
+ *
+ * @param[in] https_ota_handle pointer to esp_https_ota_handle_t structure
+ *
+ * @return
+ * - false
+ * - true
+ */
+bool esp_https_ota_is_complete_data_received(esp_https_ota_handle_t https_ota_handle);
+
/**
* @brief Clean-up HTTPS OTA Firmware upgrade and close HTTPS connection
*
static esp_err_t _http_connect(esp_http_client_handle_t http_client)
{
esp_err_t err = ESP_FAIL;
- int status_code;
+ int status_code, header_ret;
do {
err = esp_http_client_open(http_client, 0);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err));
return err;
}
- esp_http_client_fetch_headers(http_client);
+ header_ret = esp_http_client_fetch_headers(http_client);
+ if (header_ret < 0) {
+ return header_ret;
+ }
status_code = esp_http_client_get_status_code(http_client);
- if (_http_handle_response_code(http_client, status_code) != ESP_OK) {
- return ESP_FAIL;
+ err = _http_handle_response_code(http_client, status_code);
+ if (err != ESP_OK) {
+ return err;
}
} while (process_again(status_code));
return err;
return ESP_OK;
}
+bool esp_https_ota_is_complete_data_received(esp_https_ota_handle_t https_ota_handle)
+{
+ esp_https_ota_t *handle = (esp_https_ota_t *)https_ota_handle;
+ return esp_http_client_is_complete_data_received(handle->http_client);
+}
+
esp_err_t esp_https_ota_finish(esp_https_ota_handle_t https_ota_handle)
{
esp_https_ota_t *handle = (esp_https_ota_t *)https_ota_handle;
return ota_finish_err;
}
return ESP_OK;
-}
\ No newline at end of file
+}
ESP_LOGD(TAG, "Image bytes read: %d", esp_https_ota_get_image_len_read(https_ota_handle));
}
+ if (esp_https_ota_is_complete_data_received(&https_ota_handle) != true) {
+ // the OTA image was not completely received and user can customise the response to this situation.
+ ESP_LOGE(TAG, "Complete data was not received.");
+ }
+
ota_end:
ota_finish_err = esp_https_ota_finish(https_ota_handle);
if ((err == ESP_OK) && (ota_finish_err == ESP_OK)) {
}
}
ESP_LOGI(TAG, "Total Write binary data length : %d", binary_file_length);
+ if (esp_http_client_is_complete_data_received(client) != true) {
+ ESP_LOGE(TAG, "Error in receiving complete file");
+ http_cleanup(client);
+ task_fatal_error();
+ }
if (esp_ota_end(update_handle) != ESP_OK) {
ESP_LOGE(TAG, "esp_ota_end failed!");