1 #pragma once
2 
3 #include <systemd/sd-event.h>
4 #include <unistd.h>
5 
6 #include <sdbusplus/bus.hpp>
7 #include <xyz/openbmc_project/State/Boot/Progress/server.hpp>
8 
9 #include <memory>
10 
11 namespace phosphor
12 {
13 namespace dump
14 {
15 
16 using BootProgress = sdbusplus::xyz::openbmc_project::State::Boot::server::
17     Progress::ProgressStages;
18 
19 /* Need a custom deleter for freeing up sd_event */
20 struct EventDeleter
21 {
22     void operator()(sd_event* event) const
23     {
24         event = sd_event_unref(event);
25     }
26 };
27 using EventPtr = std::unique_ptr<sd_event, EventDeleter>;
28 
29 /** @struct CustomFd
30  *
31  *  RAII wrapper for file descriptor.
32  */
33 struct CustomFd
34 {
35   private:
36     /** @brief File descriptor */
37     int fd = -1;
38 
39   public:
40     CustomFd() = delete;
41     CustomFd(const CustomFd&) = delete;
42     CustomFd& operator=(const CustomFd&) = delete;
43     CustomFd(CustomFd&&) = delete;
44     CustomFd& operator=(CustomFd&&) = delete;
45 
46     /** @brief Saves File descriptor and uses it to do file operation
47      *
48      *  @param[in] fd - File descriptor
49      */
50     CustomFd(int fd) : fd(fd)
51     {}
52 
53     ~CustomFd()
54     {
55         if (fd >= 0)
56         {
57             close(fd);
58         }
59     }
60 
61     int operator()() const
62     {
63         return fd;
64     }
65 };
66 
67 /**
68  * @brief Get the bus service
69  *
70  * @param[in] bus - Bus to attach to.
71  * @param[in] path - D-Bus path name.
72  * @param[in] interface - D-Bus interface name.
73  * @return the bus service as a string
74  **/
75 std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
76                        const std::string& interface);
77 
78 /**
79  * @brief Get the host boot progress stage
80  *
81  * @return BootProgress on success
82  *         Throw exception on failure
83  *
84  */
85 BootProgress getBootProgress();
86 
87 /**
88  * @brief Check whether host is running
89  *
90  * @return true if the host running else false.
91  *         Throw exception on failure.
92  */
93 bool isHostRunning();
94 
95 } // namespace dump
96 } // namespace phosphor
97