blob: 89db260f9d2e42596bdc536f421b20aca99ed62d [file] [log] [blame]
Lei YU01539e72019-07-31 10:57:38 +08001#pragma once
2
3#include "config.h"
4
5#include <sdbusplus/bus.hpp>
Lei YU01539e72019-07-31 10:57:38 +08006#include <xyz/openbmc_project/Object/Delete/server.hpp>
7#include <xyz/openbmc_project/Software/Version/server.hpp>
8
9namespace phosphor
10{
11namespace software
12{
13namespace updater
14{
15
16using eraseFunc = std::function<void(std::string)>;
17
18using VersionInherit = sdbusplus::server::object::object<
Lei YU99301372019-09-29 16:27:12 +080019 sdbusplus::xyz::openbmc_project::Software::server::Version>;
Lei YU01539e72019-07-31 10:57:38 +080020using DeleteInherit = sdbusplus::server::object::object<
21 sdbusplus::xyz::openbmc_project::Object::server::Delete>;
22
23namespace sdbusRule = sdbusplus::bus::match::rules;
24
25class Version;
26
27/** @class Delete
28 * @brief OpenBMC Delete implementation.
29 * @details A concrete implementation for xyz.openbmc_project.Object.Delete
30 * D-Bus API.
31 */
32class Delete : public DeleteInherit
33{
34 public:
35 /** @brief Constructs Delete.
36 *
37 * @param[in] bus - The D-Bus bus object
38 * @param[in] path - The D-Bus object path
39 * @param[in] version - The Version object.
40 */
41 Delete(sdbusplus::bus::bus& bus, const std::string& path,
42 Version& version) :
43 DeleteInherit(bus, path.c_str(), true),
44 version(version), bus(bus), path(path)
45 {
46 std::vector<std::string> interfaces({interface});
47 bus.emit_interfaces_added(path.c_str(), interfaces);
48 }
49
50 ~Delete()
51 {
52 std::vector<std::string> interfaces({interface});
53 bus.emit_interfaces_removed(path.c_str(), interfaces);
54 }
55
56 /**
57 * @brief Delete the D-Bus object.
58 * Overrides the default delete function by calling
59 * Version class erase Method.
60 **/
61 void delete_() override;
62
63 private:
64 /** @brief The Version Object. */
65 Version& version;
66
67 static constexpr auto interface = "xyz.openbmc_project.Object.Delete";
68 sdbusplus::bus::bus& bus;
69 std::string path;
70};
71
72/** @class Version
73 * @brief OpenBMC version software management implementation.
74 * @details A concrete implementation for xyz.openbmc_project.Software.Version
75 * D-Bus API.
76 */
77class Version : public VersionInherit
78{
79 public:
80 /** @brief Constructs Version Software Manager.
81 *
82 * @param[in] bus - The D-Bus bus object
83 * @param[in] objPath - The D-Bus object path
84 * @param[in] versionId - The version Id
85 * @param[in] versionString - The version string
86 * @param[in] versionPurpose - The version purpose
Lei YU01539e72019-07-31 10:57:38 +080087 * @param[in] callback - The eraseFunc callback
88 */
89 Version(sdbusplus::bus::bus& bus, const std::string& objPath,
90 const std::string& versionId, const std::string& versionString,
Lei YU99301372019-09-29 16:27:12 +080091 VersionPurpose versionPurpose, eraseFunc callback) :
Lei YU01539e72019-07-31 10:57:38 +080092 VersionInherit(bus, (objPath).c_str(), true),
93 eraseCallback(callback), bus(bus), objPath(objPath),
94 versionId(versionId), versionStr(versionString)
95 {
96 // Set properties.
97 purpose(versionPurpose);
98 version(versionString);
Lei YU01539e72019-07-31 10:57:38 +080099
100 deleteObject = std::make_unique<Delete>(bus, objPath, *this);
101
102 // Emit deferred signal.
103 emit_object_added();
104 }
105
106 /**
107 * @brief Return the version id
108 */
109 std::string getVersionId() const
110 {
111 return versionId;
112 }
113
114 /**
115 * @brief Read the manifest file to get the value of the key.
116 *
117 * @param[in] filePath - The path to the file which contains the value
118 * of keys.
Lei YUfda15a32019-09-19 14:43:02 +0800119 * @param[in] keys - A vector of keys.
Lei YU01539e72019-07-31 10:57:38 +0800120 *
121 * @return The map of keys with filled values.
122 **/
123 static std::map<std::string, std::string>
Lei YUfda15a32019-09-19 14:43:02 +0800124 getValues(const std::string& filePath,
125 const std::vector<std::string>& keys);
Lei YU01539e72019-07-31 10:57:38 +0800126
Lei YU9edb7332019-09-19 14:46:19 +0800127 /** @brief Get information from extVersion
128 *
129 * @param[in] extVersion - The extended version string that contains
130 * key/value pairs separated by comma.
131 *
132 * @return The map of key/value pairs
133 */
134 static std::map<std::string, std::string>
135 getExtVersionInfo(const std::string& extVersion);
136
Lei YU01539e72019-07-31 10:57:38 +0800137 /** @brief The temUpdater's erase callback. */
138 eraseFunc eraseCallback;
139
140 private:
141 /** @brief Persistent sdbusplus DBus bus connection */
142 sdbusplus::bus::bus& bus;
143
144 /** @brief Persistent DBus object path */
145 std::string objPath;
146
147 /** @brief This Version's version Id */
148 const std::string versionId;
149
150 /** @brief This Version's version string */
151 const std::string versionStr;
Lei YUf77189f2019-08-07 14:26:30 +0800152
153 /** @brief Persistent Delete D-Bus object */
154 std::unique_ptr<Delete> deleteObject;
Lei YU01539e72019-07-31 10:57:38 +0800155};
156
157} // namespace updater
158} // namespace software
159} // namespace phosphor