1 #pragma once
2 
3 #include <sdbusplus/server.hpp>
4 #include "activation.hpp"
5 
6 namespace phosphor
7 {
8 namespace software
9 {
10 namespace updater
11 {
12 
13 /** @class ItemUpdater
14  *  @brief Manages the activation of the BMC version items.
15  */
16 class ItemUpdater
17 {
18     public:
19         ItemUpdater() = delete;
20         ~ItemUpdater() = default;
21         ItemUpdater(const ItemUpdater&) = delete;
22         ItemUpdater& operator=(const ItemUpdater&) = delete;
23         ItemUpdater(ItemUpdater&&) = delete;
24         ItemUpdater& operator=(ItemUpdater&&) = delete;
25 
26         /** @brief Constructs ItemUpdater
27          *
28          * @param[in] bus    - The Dbus bus object
29          */
30         ItemUpdater(sdbusplus::bus::bus& bus) :
31                     bus(bus),
32                     versionMatch(
33                             bus,
34                            "type='signal',"
35                            "member='InterfacesAdded',"
36                            "path='/xyz/openbmc_project/software',"
37                            "interface='org.freedesktop.DBus.ObjectManager'",
38                             createActivation,
39                             this) {};
40 
41     private:
42         /** @brief Callback function for Software.Version match.
43          *  @details Creates an Activation dbus object.
44          *
45          * @param[in]  msg       - Data associated with subscribed signal
46          * @param[in]  userData  - Pointer to this object instance
47          * @param[out] retError  - Required param
48          */
49         static int createActivation(sd_bus_message* msg,
50                                     void* userData,
51                                     sd_bus_error* retError);
52 
53         /** @brief Persistent sdbusplus DBus bus connection. */
54         sdbusplus::bus::bus& bus;
55 
56         /** @brief Persistent map of Activation dbus objects and their
57           * version id */
58         std::map<std::string, std::unique_ptr<Activation>> activations;
59 
60         /** @brief sdbusplus signal match for Software.Version */
61         sdbusplus::server::match::match versionMatch;
62 
63 };
64 
65 
66 
67 } // namespace updater
68 } // namespace software
69 } // namespace phosphor
70