#pragma once #include #include "version.hpp" namespace phosphor { namespace software { namespace manager { namespace MatchRules = sdbusplus::bus::match::rules; /** @class Manager * @brief Contains a map of Version dbus objects. * @details The software image manager class that contains the Version dbus * objects and their version ids. */ class Manager { public: /** @brief Constructs Manager Class * * @param[in] bus - The Dbus bus object */ Manager(sdbusplus::bus::bus& bus) : bus(bus), versionMatch( bus, MatchRules::interfacesRemoved() + MatchRules::path(SOFTWARE_OBJPATH), std::bind( std::mem_fn(&Manager::removeVersion), this, std::placeholders::_1)){}; /** * @brief Verify and untar the tarball. Verify the manifest file. * Create and populate the version and filepath interfaces. * * @param[in] tarballFilePath - Tarball path. * @param[out] result - 0 if successful. */ int processImage(const std::string& tarballFilePath); /** * @brief Erase specified entry d-bus object * and deletes the image file. * * @param[in] entryId - unique identifier of the entry */ void erase(std::string entryId); private: /** @brief Callback function for Software.Version match. * @details Removes a version object. * * @param[in] msg - Data associated with subscribed signal */ void removeVersion(sdbusplus::message::message& msg); /** @brief Persistent map of Version dbus objects and their * version id */ std::map> versions; /** @brief Persistent sdbusplus DBus bus connection. */ sdbusplus::bus::bus& bus; /** @brief sdbusplus signal match for Software.Version */ sdbusplus::bus::match_t versionMatch; /** * @brief Untar the tarball. * * @param[in] tarballFilePath - Tarball path. * @param[in] extractDirPath - Dir path to extract tarball ball to. * @param[out] result - 0 if successful. */ static int unTar(const std::string& tarballFilePath, const std::string& extractDirPath); }; } // namespace manager } // namespace software } // namespace phosphor