1 #pragma once 2 3 #include "config.h" 4 5 #include <sdbusplus/bus.hpp> 6 #include <xyz/openbmc_project/Object/Delete/server.hpp> 7 #include <xyz/openbmc_project/Software/Version/server.hpp> 8 9 namespace phosphor 10 { 11 namespace software 12 { 13 namespace updater 14 { 15 16 using eraseFunc = std::function<void(std::string)>; 17 18 using VersionInherit = sdbusplus::server::object_t< 19 sdbusplus::xyz::openbmc_project::Software::server::Version>; 20 using DeleteInherit = sdbusplus::server::object_t< 21 sdbusplus::xyz::openbmc_project::Object::server::Delete>; 22 23 namespace sdbusRule = sdbusplus::bus::match::rules; 24 25 class 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 */ 32 class 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_t& bus, const std::string& path, Version& version) : 42 DeleteInherit(bus, path.c_str(), action::emit_interface_added), 43 version(version) 44 { 45 } 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; 57 }; 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 */ 64 class 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 74 * @param[in] callback - The eraseFunc callback 75 */ 76 Version(sdbusplus::bus_t& bus, const std::string& objPath, 77 const std::string& versionId, const std::string& versionString, 78 VersionPurpose versionPurpose, eraseFunc callback) : 79 VersionInherit(bus, (objPath).c_str(), 80 VersionInherit::action::defer_emit), 81 eraseCallback(callback), bus(bus), objPath(objPath), 82 versionId(versionId), versionStr(versionString) 83 { 84 // Set properties. 85 purpose(versionPurpose); 86 version(versionString); 87 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 /** 103 * @brief Read the manifest file to get the values of the keys. 104 * 105 * @param[in] filePath - The path to the file which contains the value 106 * of keys. 107 * @param[in] keys - A vector of keys. 108 * 109 * @return The map of keys with filled values. 110 **/ 111 static std::map<std::string, std::string> 112 getValues(const std::string& filePath, 113 const std::vector<std::string>& keys); 114 115 /** 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 127 /** @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 137 /** @brief The temUpdater's erase callback. */ 138 eraseFunc eraseCallback; 139 140 /** @brief Get the version string. */ 141 const std::string& getVersionString() const 142 { 143 return versionStr; 144 } 145 146 private: 147 /** @brief Persistent sdbusplus DBus bus connection */ 148 sdbusplus::bus_t& bus; 149 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; 158 159 /** @brief Persistent Delete D-Bus object */ 160 std::unique_ptr<Delete> deleteObject; 161 }; 162 163 } // namespace updater 164 } // namespace software 165 } // namespace phosphor 166