RADLib
RADical C++ application framework
RADUpdate.h
Go to the documentation of this file.
1 #ifndef RADUPDATE_H
2 #define RADUPDATE_H
3 
9 #pragma once
10 
11 #include <RADCore/RADCore.h>
12 #include <RADInstaller/RADInstaller.h>
13 
14 #include <string>
15 #include <vector>
16 
17 namespace RADUpdate {
18 
20  struct Payload {
22  std::string path;
24  std::string sha256;
26  uint64_t size = 0;
27  };
28 
30  struct UpdateManifest {
32  std::string product;
34  std::string version;
36  std::string channel;
38  std::string minimumVersion;
40  std::vector<Payload> payloads;
42  std::string installerManifest;
44  std::string signaturePath;
45  };
46 
48  struct ABMetadata {
50  std::string activeSlot = "A";
52  std::string pendingSlot;
54  int bootCount = 0;
56  std::string rollbackReason;
58  std::string versionA;
60  std::string versionB;
61  };
62 
66  bool ok = false;
68  std::vector<std::string> errors;
69  };
70 
72  class UpdateManager {
73  public:
75  static RADCore::RADResult<UpdateManifest> loadManifest(const std::string& path);
79  static VerificationResult verifyBundle(const std::string& bundleRoot,
80  const std::string& manifestPath, const std::string& publicKeyPem = {});
82  static RADInstaller::Result installBundle(const std::string& bundleRoot,
83  const UpdateManifest& manifest, const std::string& targetRoot,
84  const std::vector<std::string>& selectedComponents = {});
86  static RADCore::RADResult<ABMetadata> loadABMetadata(const std::string& path);
88  static bool saveABMetadata(const std::string& path, const ABMetadata& metadata, std::string* error = nullptr);
91  };
92 
93 } // namespace RADUpdate
94 
95 #endif
JSON value supporting null, bool, number, string, array, and object.
Definition: RADCore.h:541
Success-or-error return value for APIs that should not throw.
Definition: RADCore.h:158
Manifest parser, verifier, and installer bridge.
Definition: RADUpdate.h:72
static RADCore::RADJsonValue manifestToJson(const UpdateManifest &manifest)
Converts a manifest to JSON.
static VerificationResult verifyBundle(const std::string &bundleRoot, const std::string &manifestPath, const std::string &publicKeyPem={})
Verifies payload hashes, sizes, and optional manifest signature.
static RADCore::RADResult< ABMetadata > loadABMetadata(const std::string &path)
Loads A/B metadata JSON.
static RADCore::RADJsonValue abMetadataToJson(const ABMetadata &metadata)
Converts A/B metadata to JSON.
static RADInstaller::Result installBundle(const std::string &bundleRoot, const UpdateManifest &manifest, const std::string &targetRoot, const std::vector< std::string > &selectedComponents={})
Installs a bundle using RADInstaller when installerManifest is present.
static bool saveABMetadata(const std::string &path, const ABMetadata &metadata, std::string *error=nullptr)
Saves A/B metadata JSON.
static RADCore::RADResult< UpdateManifest > loadManifest(const std::string &path)
Loads an update manifest from JSON.
Definition: RADUpdate.h:17
Installer result.
Definition: RADInstaller.h:70
A/B slot metadata for embedded products.
Definition: RADUpdate.h:48
std::string activeSlot
Active boot slot.
Definition: RADUpdate.h:50
std::string pendingSlot
Pending slot for next boot.
Definition: RADUpdate.h:52
std::string versionB
Version currently installed in slot B.
Definition: RADUpdate.h:60
int bootCount
Boot attempt count for pending slot.
Definition: RADUpdate.h:54
std::string rollbackReason
Last rollback reason.
Definition: RADUpdate.h:56
std::string versionA
Version currently installed in slot A.
Definition: RADUpdate.h:58
Payload file declared in an update manifest.
Definition: RADUpdate.h:20
uint64_t size
Expected file size in bytes; 0 disables size checking.
Definition: RADUpdate.h:26
std::string sha256
Expected lowercase SHA-256 hex digest.
Definition: RADUpdate.h:24
std::string path
File path relative to bundle root.
Definition: RADUpdate.h:22
Signed update manifest.
Definition: RADUpdate.h:30
std::string minimumVersion
Minimum compatible installed version.
Definition: RADUpdate.h:38
std::string channel
Release channel.
Definition: RADUpdate.h:36
std::string signaturePath
Optional signature path for this manifest.
Definition: RADUpdate.h:44
std::vector< Payload > payloads
Payload files.
Definition: RADUpdate.h:40
std::string version
Update version.
Definition: RADUpdate.h:34
std::string product
Product identifier.
Definition: RADUpdate.h:32
std::string installerManifest
Optional installer manifest path inside the bundle.
Definition: RADUpdate.h:42
Update verification result.
Definition: RADUpdate.h:64
bool ok
True when all checks passed.
Definition: RADUpdate.h:66
std::vector< std::string > errors
Error messages.
Definition: RADUpdate.h:68