1 #pragma once 2 3 #include <sdbusplus/bus.hpp> 4 #include "xyz/openbmc_project/Software/Version/server.hpp" 5 #include "xyz/openbmc_project/Object/Delete/server.hpp" 6 #include "xyz/openbmc_project/Common/FilePath/server.hpp" 7 8 namespace openpower 9 { 10 namespace software 11 { 12 namespace updater 13 { 14 15 class ItemUpdater; 16 17 using VersionInherit = sdbusplus::server::object::object< 18 sdbusplus::xyz::openbmc_project::Software::server::Version, 19 sdbusplus::xyz::openbmc_project::Object::server::Delete, 20 sdbusplus::xyz::openbmc_project::Common::server::FilePath>; 21 22 /** @class Version 23 * @brief OpenBMC version software management implementation. 24 * @details A concrete implementation for xyz.openbmc_project.Software.Version 25 * D-Bus API. 26 */ 27 class Version : public VersionInherit 28 { 29 public: 30 /** @brief Constructs Version Software Manager. 31 * 32 * @param[in] bus - The D-Bus bus object 33 * @param[in] objPath - The D-Bus object path 34 * @param[in] versionString - The version string 35 * @param[in] versionPurpose - The version purpose 36 * @param[in] filePath - The image filesystem path 37 * @param[in] parent - The version's parent 38 */ 39 Version(sdbusplus::bus::bus& bus, 40 const std::string& objPath, 41 const std::string& versionString, 42 VersionPurpose versionPurpose, 43 const std::string& filePath, 44 ItemUpdater& parent) : 45 VersionInherit(bus, (objPath).c_str(), true), 46 parent(parent) 47 { 48 // Set properties. 49 purpose(versionPurpose); 50 version(versionString); 51 path(filePath); 52 53 // Emit deferred signal. 54 emit_object_added(); 55 } 56 57 /** 58 * @brief Read the manifest file to get the value of the key. 59 * 60 * @param[in] filePath - The path to the file which contains the value 61 * of keys. 62 * @param[in] keys - A map of keys with empty values. 63 * 64 * @return The map of keys with filled values. 65 **/ 66 static std::map<std::string, std::string> getValue( 67 const std::string& filePath, 68 std::map<std::string, std::string> keys); 69 70 /** 71 * @brief Calculate the version id from the version string. 72 * 73 * @details The version id is a unique 8 hexadecimal digit id 74 * calculated from the version string. 75 * 76 * @param[in] version - The image version string (e.g. v1.99.10-19). 77 * 78 * @return The id. 79 */ 80 static std::string getId(const std::string& version); 81 82 /** @brief Deletes the D-Bus object and removes image. 83 * 84 */ 85 void delete_() override; 86 87 private: 88 ItemUpdater& parent; 89 90 }; 91 92 } // namespace updater 93 } // namespace software 94 } // namespace openpower 95