1 #include "aktualizr_secondary_file.h"
2 #include "update_agent_file.h"
4 const std::string AktualizrSecondaryFile::FileUpdateDefaultFile{
"firmware.txt"};
10 std::shared_ptr<INvStorage> storage,
11 std::shared_ptr<FileUpdateAgent> update_agent)
12 :
AktualizrSecondary(config, std::move(storage)), update_agent_{std::move(update_agent)} {
13 registerHandler(AKIpUptaneMes_PR_uploadDataReq, std::bind(&AktualizrSecondaryFile::uploadDataHdlr,
this,
14 std::placeholders::_1, std::placeholders::_2));
16 std::string current_target_name;
18 boost::optional<Uptane::Target> current_version;
19 boost::optional<Uptane::Target> pending_version;
20 auto installed_version_res =
21 AktualizrSecondary::storage().loadInstalledVersions(
"", ¤t_version, &pending_version);
23 if (installed_version_res && !!current_version) {
24 current_target_name = current_version->filename();
26 current_target_name =
"unknown";
29 update_agent_ = std::make_shared<FileUpdateAgent>(config.storage.path / FileUpdateDefaultFile, current_target_name);
33 void AktualizrSecondaryFile::initialize() { initPendingTargetIfAny(); }
36 if (!pendingTarget().IsValid()) {
37 LOG_ERROR <<
"Aborting image download; no valid target found.";
39 "Aborting image download; no valid target found.");
42 return update_agent_->receiveData(pendingTarget(),
data, size);
45 bool AktualizrSecondaryFile::isTargetSupported(
const Uptane::Target& target)
const {
46 return update_agent_->isTargetSupported(target);
50 return update_agent_->applyPendingInstall(target);
54 return update_agent_->getInstalledImageInfo(installed_image_info);
58 return update_agent_->install(target);
61 void AktualizrSecondaryFile::completeInstall() {
return update_agent_->completeInstall(); }
64 if (last_msg_ != AKIpUptaneMes_PR_uploadDataReq) {
65 LOG_INFO <<
"Received an initial data upload request message; attempting to receive data...";
67 LOG_DEBUG <<
"Received another data upload request message; attempting to receive data...";
70 auto rec_buf_size = in_msg.uploadDataReq()->data.size;
71 if (rec_buf_size < 0) {
72 LOG_ERROR <<
"The received data buffer size is negative: " << rec_buf_size;
73 return ReturnCode::kOk;
76 auto result = receiveData(in_msg.uploadDataReq()->data.buf,
static_cast<size_t>(rec_buf_size));
78 auto m = out_msg.present(AKIpUptaneMes_PR_uploadDataResp).uploadDataResp();
79 m->result =
static_cast<AKInstallationResultCode_t
>(
result.result_code.num_code);
80 SetString(&m->description,
result.description);
82 return ReturnCode::kOk;