Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
initializer.h
1 #ifndef INITIALIZER_H_
2 #define INITIALIZER_H_
3 
4 #include "crypto/keymanager.h"
5 #include "http/httpinterface.h"
6 #include "libaktualizr/config.h"
7 #include "primary/secondaryinterface.h"
8 #include "storage/invstorage.h"
9 #include "uptane/tuf.h"
10 
11 const int MaxInitializationAttempts = 3;
12 
13 class Initializer {
14  public:
15  Initializer(const ProvisionConfig& config_in, std::shared_ptr<INvStorage> storage_in,
16  std::shared_ptr<HttpInterface> http_client_in, KeyManager& keys_in,
17  const std::map<Uptane::EcuSerial, std::shared_ptr<SecondaryInterface> >& secondaries_in);
18 
19  class Error : public std::runtime_error {
20  public:
21  Error(const std::string& what) : std::runtime_error(std::string("Initializer error: ") + what) {}
22  };
23  class KeyGenerationError : public Error {
24  public:
25  KeyGenerationError(const std::string& what) : Error(std::string("Could not generate Uptane key pair: ") + what) {}
26  };
27  class StorageError : public Error {
28  public:
29  StorageError(const std::string& what) : Error(std::string("Storage error: ") + what) {}
30  };
31  class ServerError : public Error {
32  public:
33  ServerError(const std::string& what) : Error(std::string("Server error: ") + what) {}
34  };
35  class ServerOccupied : public Error {
36  public:
37  ServerOccupied() : Error("") {}
38  };
39 
40  private:
41  void initDeviceId();
42  void resetDeviceId();
43  void initEcuSerials();
44  void initPrimaryEcuKeys();
45  void initTlsCreds();
46  void resetTlsCreds();
47  void initSecondaryInfo();
48  void initEcuRegister();
49  bool loadSetTlsCreds();
50  void initEcuReportCounter();
51 
52  const ProvisionConfig& config_;
53  std::shared_ptr<INvStorage> storage_;
54  std::shared_ptr<HttpInterface> http_client_;
55  KeyManager& keys_;
56  const std::map<Uptane::EcuSerial, SecondaryInterface::Ptr>& secondaries_;
57  std::vector<SecondaryInfo> sec_info_;
58  EcuSerials new_ecu_serials_;
59  bool register_ecus_{false};
60 };
61 
62 class EcuCompare {
63  public:
64  explicit EcuCompare(std::pair<Uptane::EcuSerial, Uptane::HardwareIdentifier> ecu_in)
65  : serial(std::move(ecu_in.first)), hardware_id(std::move(ecu_in.second)) {}
66  bool operator()(const std::pair<Uptane::EcuSerial, Uptane::HardwareIdentifier>& in) const {
67  return (in.first == serial && in.second == hardware_id);
68  }
69 
70  private:
71  const Uptane::EcuSerial serial;
72  const Uptane::HardwareIdentifier hardware_id;
73 };
74 
75 #endif // INITIALIZER_H_