Aktualizr
C++ SOTA Client
events.cc
1 #include "events.h"
2 
3 #include <utility>
4 namespace event {
5 
6 std::string BaseEvent::toJson() {
7  Json::Value json;
8  return BaseEvent::toJson(json);
9 }
10 
11 std::string BaseEvent::toJson(Json::Value json) {
12  json["variant"] = variant;
13  if (!json.isMember("fields")) {
14  json["fields"] = Json::Value(Json::arrayValue);
15  }
16  return Json::FastWriter().write(json);
17 }
18 
19 Error::Error(std::string message_in) : message(std::move(message_in)) { variant = "Error"; }
20 std::string Error::toJson() {
21  Json::Value json;
22  json["fields"].append(message);
23  return BaseEvent::toJson(json);
24 }
25 
26 Error Error::fromJson(const std::string& json_str) {
27  Json::Reader reader;
28  Json::Value json;
29  reader.parse(json_str, json);
30  return Error(json["fields"][0].asString());
31 }
32 
33 UpdateAvailable::UpdateAvailable(std::vector<Uptane::Target> updates_in, unsigned int ecus_count_in)
34  : updates(std::move(updates_in)), ecus_count(ecus_count_in) {
35  variant = "UpdateAvailable";
36 }
37 
38 SendDeviceDataComplete::SendDeviceDataComplete() { variant = "SendDeviceDataComplete"; }
39 
40 PutManifestComplete::PutManifestComplete() { variant = "PutManifestComplete"; }
41 
42 std::string UpdateAvailable::toJson() {
43  Json::Value json;
44  Json::Value targets;
45  for (const auto& target : updates) {
46  targets[target.filename()] = target.toDebugJson();
47  }
48  json["fields"].append(targets);
49  json["fields"].append(ecus_count);
50  return BaseEvent::toJson(json);
51 }
52 
53 UpdateAvailable UpdateAvailable::fromJson(const std::string& json_str) {
54  Json::Reader reader;
55  Json::Value json;
56  reader.parse(json_str, json);
57  std::vector<Uptane::Target> updates;
58  for (auto it = json["fields"][0].begin(); it != json["fields"][0].end(); ++it) {
59  updates.emplace_back(Uptane::Target(it.key().asString(), *it));
60  }
61  return UpdateAvailable(updates, json["fields"][1].asUInt());
62 }
63 
64 FetchMetaComplete::FetchMetaComplete() { variant = "FetchMetaComplete"; }
65 
66 DownloadProgressReport::DownloadProgressReport(Uptane::Target target_in, std::string description_in,
67  unsigned int progress_in)
68  : target{std::move(target_in)}, description{std::move(description_in)}, progress{progress_in} {
69  variant = "DownloadProgressReport";
70 }
71 
72 std::string DownloadProgressReport::toJson() {
73  Json::Value json;
74  json["fields"].append(target.toDebugJson());
75  json["fields"].append(progress);
76  return BaseEvent::toJson(json);
77 }
78 
79 DownloadComplete::DownloadComplete(std::vector<Uptane::Target> updates_in) : updates(std::move(updates_in)) {
80  variant = "DownloadComplete";
81 }
82 
83 std::string DownloadComplete::toJson() {
84  Json::Value json;
85  Json::Value targets;
86  for (const auto& target : updates) {
87  targets[target.filename()] = target.toDebugJson();
88  }
89  json["fields"].append(targets);
90  return BaseEvent::toJson(json);
91 }
92 
93 DownloadComplete DownloadComplete::fromJson(const std::string& json_str) {
94  Json::Reader reader;
95  Json::Value json;
96  reader.parse(json_str, json);
97  std::vector<Uptane::Target> updates;
98  for (auto it = json["fields"][0].begin(); it != json["fields"][0].end(); ++it) {
99  updates.emplace_back(Uptane::Target(it.key().asString(), *it));
100  }
101  return DownloadComplete(updates);
102 }
103 
104 InstallStarted::InstallStarted(Uptane::EcuSerial serial_in) : serial(std::move(serial_in)) {
105  variant = "InstallStarted";
106 }
107 
108 InstallComplete::InstallComplete(Uptane::EcuSerial serial_in) : serial(std::move(serial_in)) {
109  variant = "InstallComplete";
110 }
111 
112 CampaignCheckComplete::CampaignCheckComplete() { variant = "CampaignCheckComplete"; }
113 
114 CampaignAcceptComplete::CampaignAcceptComplete() { variant = "CampaignAcceptComplete"; }
115 
116 } // namespace event
An update is available for download from the server.
Definition: events.h:69
An update has been successfully downloaded.
Definition: events.h:94
An error occurred processing a command.
Definition: events.h:34
Aktualizr status events.
Definition: events.cc:4