ota_provider: Release http client when BDX sender resets

This commit is contained in:
WanqQixiang
2024-12-19 12:16:57 +08:00
parent 2e0eaf66a5
commit 8edd0a6de7
2 changed files with 11 additions and 6 deletions
@@ -69,7 +69,7 @@ private:
char mOtaImageUrl[OTA_URL_MAX_LEN];
uint64_t mOtaImageSize;
esp_http_client_handle_t mHttpDownloader;
esp_http_client_handle_t mHttpDownloader = nullptr;
};
} // namespace ota_provider
@@ -125,6 +125,9 @@ void OtaBdxSender::HandleTransferSessionOutput(TransferSession::OutputEvent &eve
.crt_bundle_attach = esp_crt_bundle_attach,
.keep_alive_enable = true,
};
if (mHttpDownloader) {
http_downloader_abort(mHttpDownloader);
}
if (http_downloader_start(&config, &mHttpDownloader) != ESP_OK) {
mTransfer.AbortTransfer(StatusCode::kUnknown);
}
@@ -140,7 +143,8 @@ void OtaBdxSender::HandleTransferSessionOutput(TransferSession::OutputEvent &eve
return;
}
// Read http response
int bytes_read = http_downloader_read(mHttpDownloader, reinterpret_cast<char *>(blockBuf->Start()), bytesToRead);
int bytes_read =
http_downloader_read(mHttpDownloader, reinterpret_cast<char *>(blockBuf->Start()), bytesToRead);
if (bytes_read < 0) {
ESP_LOGE(TAG, "http_downloader_read failed");
mTransfer.AbortTransfer(StatusCode::kUnknown);
@@ -169,25 +173,22 @@ void OtaBdxSender::HandleTransferSessionOutput(TransferSession::OutputEvent &eve
case TransferSession::OutputEventType::kAckReceived:
break;
case TransferSession::OutputEventType::kAckEOFReceived: {
ESP_LOGD(TAG, "Transfer completed, got AckEOF");
ESP_LOGI(TAG, "Transfer completed, got AckEOF");
Reset();
break;
}
case TransferSession::OutputEventType::kStatusReceived: {
ESP_LOGE(TAG, "Got StatusReport %x", static_cast<uint16_t>(event.statusData.statusCode));
http_downloader_abort(mHttpDownloader);
Reset();
break;
}
case TransferSession::OutputEventType::kInternalError: {
ESP_LOGE(TAG, "InternalError");
http_downloader_abort(mHttpDownloader);
Reset();
break;
}
case TransferSession::OutputEventType::kTransferTimeout: {
ESP_LOGE(TAG, "TransferTimeout");
http_downloader_abort(mHttpDownloader);
Reset();
break;
}
@@ -213,6 +214,10 @@ void OtaBdxSender::Reset()
mInitialized = false;
mNumBytesSent = 0;
mOtaImageSize = 0;
if (mHttpDownloader) {
// Release current http client
http_downloader_abort(mHttpDownloader);
}
mHttpDownloader = nullptr;
memset(mOtaImageUrl, 0, sizeof(mOtaImageUrl));
}