1cf066aceSPatrick Venture #pragma once
2cf066aceSPatrick Venture 
3cf066aceSPatrick Venture #include "status.hpp"
4cf066aceSPatrick Venture 
5cf066aceSPatrick Venture #include <sdbusplus/bus.hpp>
6b22ebbf3SWilliam A. Kennington III #include <sdbusplus/bus/match.hpp>
7*9b37b095SPatrick Venture 
8*9b37b095SPatrick Venture #include <memory>
9cf066aceSPatrick Venture #include <string>
10cf066aceSPatrick Venture 
11cf066aceSPatrick Venture namespace ipmi_flash
12cf066aceSPatrick Venture {
13cf066aceSPatrick Venture 
14b22ebbf3SWilliam A. Kennington III class SystemdNoFile : public TriggerableActionInterface
15b22ebbf3SWilliam A. Kennington III {
16b22ebbf3SWilliam A. Kennington III   public:
17b22ebbf3SWilliam A. Kennington III     static std::unique_ptr<TriggerableActionInterface>
18b22ebbf3SWilliam A. Kennington III         CreateSystemdNoFile(sdbusplus::bus::bus&& bus,
19b22ebbf3SWilliam A. Kennington III                             const std::string& service,
20b22ebbf3SWilliam A. Kennington III                             const std::string& mode);
21b22ebbf3SWilliam A. Kennington III 
22b22ebbf3SWilliam A. Kennington III     SystemdNoFile(sdbusplus::bus::bus&& bus, const std::string& service,
23b22ebbf3SWilliam A. Kennington III                   const std::string& mode) :
24b22ebbf3SWilliam A. Kennington III         bus(std::move(bus)),
25b22ebbf3SWilliam A. Kennington III         triggerService(service), mode(mode)
26*9b37b095SPatrick Venture     {}
27b22ebbf3SWilliam A. Kennington III 
28b22ebbf3SWilliam A. Kennington III     SystemdNoFile(const SystemdNoFile&) = delete;
29b22ebbf3SWilliam A. Kennington III     SystemdNoFile& operator=(const SystemdNoFile&) = delete;
30b22ebbf3SWilliam A. Kennington III     // sdbusplus match requires us to be pinned
31b22ebbf3SWilliam A. Kennington III     SystemdNoFile(SystemdNoFile&&) = delete;
32b22ebbf3SWilliam A. Kennington III     SystemdNoFile& operator=(SystemdNoFile&&) = delete;
33b22ebbf3SWilliam A. Kennington III 
34b22ebbf3SWilliam A. Kennington III     bool trigger() override;
35b22ebbf3SWilliam A. Kennington III     void abort() override;
36b22ebbf3SWilliam A. Kennington III     ActionStatus status() override;
37b22ebbf3SWilliam A. Kennington III 
38b22ebbf3SWilliam A. Kennington III     const std::string& getMode() const;
39b22ebbf3SWilliam A. Kennington III 
40b22ebbf3SWilliam A. Kennington III   private:
41b22ebbf3SWilliam A. Kennington III     sdbusplus::bus::bus bus;
42b22ebbf3SWilliam A. Kennington III     const std::string triggerService;
43b22ebbf3SWilliam A. Kennington III     const std::string mode;
44b22ebbf3SWilliam A. Kennington III 
45b22ebbf3SWilliam A. Kennington III     std::optional<sdbusplus::bus::match::match> jobMonitor;
46b22ebbf3SWilliam A. Kennington III     std::optional<std::string> job;
47b22ebbf3SWilliam A. Kennington III     ActionStatus currentStatus = ActionStatus::unknown;
48b22ebbf3SWilliam A. Kennington III 
49b22ebbf3SWilliam A. Kennington III     void match(sdbusplus::message::message& m);
50b22ebbf3SWilliam A. Kennington III };
51b22ebbf3SWilliam A. Kennington III 
52cf066aceSPatrick Venture /**
53cf066aceSPatrick Venture  * Representation of what is used for triggering an action with systemd and
54cf066aceSPatrick Venture  * checking the result by reading a file.
55cf066aceSPatrick Venture  */
56b22ebbf3SWilliam A. Kennington III class SystemdWithStatusFile : public SystemdNoFile
57cf066aceSPatrick Venture {
58cf066aceSPatrick Venture   public:
59cf066aceSPatrick Venture     /**
60cf066aceSPatrick Venture      * Create a default SystemdWithStatusFile object that uses systemd to
61cf066aceSPatrick Venture      * trigger the process.
62cf066aceSPatrick Venture      *
63cf066aceSPatrick Venture      * @param[in] bus - an sdbusplus handler for a bus to use.
64cf066aceSPatrick Venture      * @param[in] path - the path to check for verification status.
65cf066aceSPatrick Venture      * @param[in] service - the systemd service to start to trigger
66cf066aceSPatrick Venture      * verification.
67cf066aceSPatrick Venture      * @param[in] mode - the job-mode when starting the systemd Unit.
68cf066aceSPatrick Venture      */
69cf066aceSPatrick Venture     static std::unique_ptr<TriggerableActionInterface>
70cf066aceSPatrick Venture         CreateSystemdWithStatusFile(sdbusplus::bus::bus&& bus,
71cf066aceSPatrick Venture                                     const std::string& path,
72cf066aceSPatrick Venture                                     const std::string& service,
73cf066aceSPatrick Venture                                     const std::string& mode);
74cf066aceSPatrick Venture 
75cf066aceSPatrick Venture     SystemdWithStatusFile(sdbusplus::bus::bus&& bus, const std::string& path,
76cf066aceSPatrick Venture                           const std::string& service, const std::string& mode) :
77b22ebbf3SWilliam A. Kennington III         SystemdNoFile(std::move(bus), service, mode),
78b22ebbf3SWilliam A. Kennington III         checkPath(path)
79*9b37b095SPatrick Venture     {}
80cf066aceSPatrick Venture 
8193f3c550SWilliam A. Kennington III     bool trigger() override;
82cf066aceSPatrick Venture     ActionStatus status() override;
83cf066aceSPatrick Venture 
84cf066aceSPatrick Venture   private:
85cf066aceSPatrick Venture     const std::string checkPath;
86e0216d23SPatrick Venture };
87e0216d23SPatrick Venture 
88cf066aceSPatrick Venture } // namespace ipmi_flash
89