1 #pragma once
2 
3 #include "interface.hpp"
4 
5 #include <ipmiblob/blob_interface.hpp>
6 
7 #include <string>
8 
9 namespace host_tool
10 {
11 
12 class UpdateHandlerInterface
13 {
14   public:
15     virtual ~UpdateHandlerInterface() = default;
16 
17     /**
18      * Check if the goal firmware is listed in the blob_list and that the
19      * handler's supported data type is available.
20      *
21      * @param[in] goalFirmware - the firmware to check /flash/image
22      * /flash/tarball, etc.
23      */
24     virtual bool checkAvailable(const std::string& goalFirmware) = 0;
25 
26     /**
27      * Send the file contents at path to the blob id, target.
28      *
29      * @param[in] target - the blob id
30      * @param[in] path - the source file path
31      */
32     virtual void sendFile(const std::string& target,
33                           const std::string& path) = 0;
34 
35     /**
36      * Trigger verification.
37      *
38      * @param[in] target - the verification blob id (may support multiple in the
39      * future.
40      * @param[in] ignoreStatus - determines whether to ignore the verification
41      * status.
42      * @return true if verified, false if verification errors.
43      */
44     virtual bool verifyFile(const std::string& target, bool ignoreStatus) = 0;
45 
46     /**
47      * Cleanup the artifacts by triggering this action.
48      */
49     virtual void cleanArtifacts() = 0;
50 };
51 
52 /** Object that actually handles the update itself. */
53 class UpdateHandler : public UpdateHandlerInterface
54 {
55   public:
56     UpdateHandler(ipmiblob::BlobInterface* blob, DataInterface* handler) :
57         blob(blob), handler(handler)
58     {}
59 
60     ~UpdateHandler() = default;
61 
62     bool checkAvailable(const std::string& goalFirmware) override;
63 
64     /**
65      * @throw ToolException on failure.
66      */
67     void sendFile(const std::string& target, const std::string& path) override;
68 
69     /**
70      * @throw ToolException on failure (TODO: throw on timeout.)
71      */
72     bool verifyFile(const std::string& target, bool ignoreStatus) override;
73 
74     void cleanArtifacts() override;
75 
76   private:
77     ipmiblob::BlobInterface* blob;
78     DataInterface* handler;
79 };
80 
81 } // namespace host_tool
82