Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
aktualizr_secondary.h
1 #ifndef AKTUALIZR_SECONDARY_H
2 #define AKTUALIZR_SECONDARY_H
3 
4 #include "aktualizr_secondary_config.h"
5 #include "aktualizr_secondary_metadata.h"
6 #include "msg_handler.h"
7 
8 #include "uptane/directorrepository.h"
9 #include "uptane/imagerepository.h"
10 #include "uptane/manifest.h"
11 
12 class UpdateAgent;
13 class INvStorage;
14 class KeyManager;
15 
17  public:
18  using Ptr = std::shared_ptr<AktualizrSecondary>;
19 
20  virtual void initialize() = 0;
21  const Uptane::EcuSerial& serial() const { return ecu_serial_; }
22  const Uptane::HardwareIdentifier& hwID() const { return hardware_id_; }
23  PublicKey publicKey() const;
24  Uptane::Manifest getManifest() const;
25 
26  virtual data::InstallationResult putMetadata(const Metadata& metadata);
27  virtual data::InstallationResult putMetadata(const Uptane::MetaBundle& meta_bundle) {
28  return putMetadata(Metadata(meta_bundle));
29  }
30 
31  virtual data::InstallationResult install();
32  virtual void completeInstall() = 0;
33 
34  protected:
35  AktualizrSecondary(AktualizrSecondaryConfig config, std::shared_ptr<INvStorage> storage);
36 
37  // protected interface to be defined by child classes, i.e. a specific IP secondary type (e.g. OSTree, File, etc)
38  virtual bool getInstalledImageInfo(Uptane::InstalledImageInfo& installed_image_info) const = 0;
39  virtual bool isTargetSupported(const Uptane::Target& target) const = 0;
40  virtual data::InstallationResult installPendingTarget(const Uptane::Target& target) = 0;
41  virtual data::InstallationResult applyPendingInstall(const Uptane::Target& target) = 0;
42 
43  // protected interface to be used by child classes
44  Uptane::Target& pendingTarget() { return pending_target_; }
45  INvStorage& storage() { return *storage_; }
46  std::shared_ptr<INvStorage>& storagePtr() { return storage_; }
47  Uptane::DirectorRepository& directorRepo() { return director_repo_; }
48  std::shared_ptr<KeyManager>& keyMngr() { return keys_; }
49 
50  void initPendingTargetIfAny();
51 
52  private:
53  static void copyMetadata(Uptane::MetaBundle& meta_bundle, Uptane::RepositoryType repo, const Uptane::Role& role,
54  std::string& json);
55  data::InstallationResult doFullVerification(const Metadata& metadata);
56  void uptaneInitialize();
57  void registerHandlers();
58 
59  // Message handlers
60  ReturnCode getInfoHdlr(Asn1Message& in_msg, Asn1Message& out_msg) const;
61  static ReturnCode versionHdlr(Asn1Message& in_msg, Asn1Message& out_msg);
62  ReturnCode getManifestHdlr(Asn1Message& in_msg, Asn1Message& out_msg) const;
63  ReturnCode putMetaHdlr(Asn1Message& in_msg, Asn1Message& out_msg);
64  ReturnCode installHdlr(Asn1Message& in_msg, Asn1Message& out_msg);
65 
66  Uptane::HardwareIdentifier hardware_id_{Uptane::HardwareIdentifier::Unknown()};
67  Uptane::EcuSerial ecu_serial_{Uptane::EcuSerial::Unknown()};
68 
69  const AktualizrSecondaryConfig config_;
70  std::shared_ptr<INvStorage> storage_;
71  std::shared_ptr<KeyManager> keys_;
72 
73  Uptane::ManifestIssuer::Ptr manifest_issuer_;
74 
75  Uptane::DirectorRepository director_repo_;
76  Uptane::ImageRepository image_repo_;
77  Uptane::Target pending_target_{Uptane::Target::Unknown()};
78 };
79 
80 #endif // AKTUALIZR_SECONDARY_H
UpdateAgent
Definition: update_agent.h:7
Uptane::DirectorRepository
Definition: directorrepository.h:13
KeyManager
Definition: keymanager.h:13
data::InstallationResult
Definition: types.h:277
AktualizrSecondaryConfig
Definition: aktualizr_secondary_config.h:35
Uptane::ImageRepository
Definition: imagerepository.h:13
Uptane::HardwareIdentifier
Definition: types.h:315
Uptane::RepositoryType
Definition: tuf.h:21
Uptane::InstalledImageInfo
Definition: types.h:306
Uptane::EcuSerial
Definition: types.h:346
AktualizrSecondary
Definition: aktualizr_secondary.h:16
PublicKey
Definition: types.h:119
MsgDispatcher
Definition: msg_handler.h:26
Asn1Message
Reference counted holder for the top-level ASN1 message structure.
Definition: asn1_message.h:34
Uptane::Role
TUF Roles.
Definition: tuf.h:61
Uptane::Target
Definition: types.h:379
Metadata
Definition: aktualizr_secondary_metadata.h:7
Uptane::Manifest
Definition: types.h:448
INvStorage
Definition: invstorage.h:43