blob: 37c7e38d47d579a60610b9e1dda30875a19632e6 [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
Patrick Williams374fae52022-07-22 19:26:55 -050018using VersionInherit = sdbusplus::server::object_t<
Lei YU99301372019-09-29 16:27:12 +080019 sdbusplus::xyz::openbmc_project::Software::server::Version>;
Patrick Williams374fae52022-07-22 19:26:55 -050020using DeleteInherit = sdbusplus::server::object_t<
Lei YU01539e72019-07-31 10:57:38 +080021 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 */
Patrick Williams374fae52022-07-22 19:26:55 -050041 Delete(sdbusplus::bus_t& bus, const std::string& path, Version& version) :
Albert Zhangf356fdc2020-03-02 09:24:17 +080042 DeleteInherit(bus, path.c_str(), action::emit_interface_added),
43 version(version)
Lei YU01539e72019-07-31 10:57:38 +080044 {
Lei YU01539e72019-07-31 10:57:38 +080045 }
46
47 /**
48 * @brief Delete the D-Bus object.
49 * Overrides the default delete function by calling
50 * Version class erase Method.
51 **/
52 void delete_() override;
53
54 private:
55 /** @brief The Version Object. */
56 Version& version;
Lei YU01539e72019-07-31 10:57:38 +080057};
58
59/** @class Version
60 * @brief OpenBMC version software management implementation.
61 * @details A concrete implementation for xyz.openbmc_project.Software.Version
62 * D-Bus API.
63 */
64class Version : public VersionInherit
65{
66 public:
67 /** @brief Constructs Version Software Manager.
68 *
69 * @param[in] bus - The D-Bus bus object
70 * @param[in] objPath - The D-Bus object path
71 * @param[in] versionId - The version Id
72 * @param[in] versionString - The version string
73 * @param[in] versionPurpose - The version purpose
Lei YU01539e72019-07-31 10:57:38 +080074 * @param[in] callback - The eraseFunc callback
75 */
Patrick Williams374fae52022-07-22 19:26:55 -050076 Version(sdbusplus::bus_t& bus, const std::string& objPath,
Lei YU01539e72019-07-31 10:57:38 +080077 const std::string& versionId, const std::string& versionString,
Lei YU99301372019-09-29 16:27:12 +080078 VersionPurpose versionPurpose, eraseFunc callback) :
Tang Yiwei434ae482022-04-16 13:55:21 +080079 VersionInherit(bus, (objPath).c_str(),
80 VersionInherit::action::defer_emit),
Lei YU01539e72019-07-31 10:57:38 +080081 eraseCallback(callback), bus(bus), objPath(objPath),
82 versionId(versionId), versionStr(versionString)
83 {
84 // Set properties.
85 purpose(versionPurpose);
86 version(versionString);
Lei YU01539e72019-07-31 10:57:38 +080087
88 deleteObject = std::make_unique<Delete>(bus, objPath, *this);
89
90 // Emit deferred signal.
91 emit_object_added();
92 }
93
94 /**
95 * @brief Return the version id
96 */
97 std::string getVersionId() const
98 {
99 return versionId;
100 }
101
102 /**
Lei YU58c26e32019-09-27 17:52:06 +0800103 * @brief Read the manifest file to get the values of the keys.
Lei YU01539e72019-07-31 10:57:38 +0800104 *
105 * @param[in] filePath - The path to the file which contains the value
106 * of keys.
Lei YUfda15a32019-09-19 14:43:02 +0800107 * @param[in] keys - A vector of keys.
Lei YU01539e72019-07-31 10:57:38 +0800108 *
109 * @return The map of keys with filled values.
110 **/
111 static std::map<std::string, std::string>
Lei YUfda15a32019-09-19 14:43:02 +0800112 getValues(const std::string& filePath,
113 const std::vector<std::string>& keys);
Lei YU01539e72019-07-31 10:57:38 +0800114
Lei YU58c26e32019-09-27 17:52:06 +0800115 /**
116 * @brief Read the manifest file to get the value of the key.
117 *
118 * @param[in] filePath - The path to the file which contains the value
119 * of keys.
120 * @param[in] key - The string of the key.
121 *
122 * @return The string of the value.
123 **/
124 static std::string getValue(const std::string& filePath,
125 const std::string& key);
126
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
Lei YU1517f5f2019-10-14 16:44:42 +0800140 /** @brief Get the version string. */
141 const std::string& getVersionString() const
142 {
143 return versionStr;
144 }
145
Lei YU01539e72019-07-31 10:57:38 +0800146 private:
147 /** @brief Persistent sdbusplus DBus bus connection */
Patrick Williams374fae52022-07-22 19:26:55 -0500148 sdbusplus::bus_t& bus;
Lei YU01539e72019-07-31 10:57:38 +0800149
150 /** @brief Persistent DBus object path */
151 std::string objPath;
152
153 /** @brief This Version's version Id */
154 const std::string versionId;
155
156 /** @brief This Version's version string */
157 const std::string versionStr;
Lei YUf77189f2019-08-07 14:26:30 +0800158
159 /** @brief Persistent Delete D-Bus object */
160 std::unique_ptr<Delete> deleteObject;
Lei YU01539e72019-07-31 10:57:38 +0800161};
162
163} // namespace updater
164} // namespace software
165} // namespace phosphor