1*b66ac3aeSAdriana Kobylak #include <phosphor-logging/log.hpp> 22d8fa225SAdriana Kobylak #include "config.h" 32d8fa225SAdriana Kobylak #include "item_updater.hpp" 42d8fa225SAdriana Kobylak 52d8fa225SAdriana Kobylak namespace openpower 62d8fa225SAdriana Kobylak { 72d8fa225SAdriana Kobylak namespace software 82d8fa225SAdriana Kobylak { 92d8fa225SAdriana Kobylak namespace manager 102d8fa225SAdriana Kobylak { 112d8fa225SAdriana Kobylak 12*b66ac3aeSAdriana Kobylak using namespace phosphor::logging; 13*b66ac3aeSAdriana Kobylak 142d8fa225SAdriana Kobylak int ItemUpdater::createActivation(sd_bus_message* msg, 152d8fa225SAdriana Kobylak void* userData, 162d8fa225SAdriana Kobylak sd_bus_error* retErr) 172d8fa225SAdriana Kobylak { 182d8fa225SAdriana Kobylak auto* updater = static_cast<ItemUpdater*>(userData); 19*b66ac3aeSAdriana Kobylak auto mapper = updater->busItem.new_method_call( 20*b66ac3aeSAdriana Kobylak MAPPER_BUSNAME, 21*b66ac3aeSAdriana Kobylak MAPPER_PATH, 22*b66ac3aeSAdriana Kobylak MAPPER_INTERFACE, 23*b66ac3aeSAdriana Kobylak "GetSubTreePaths"); 24*b66ac3aeSAdriana Kobylak mapper.append(SOFTWARE_OBJPATH, 25*b66ac3aeSAdriana Kobylak 1, // Depth 26*b66ac3aeSAdriana Kobylak std::vector<std::string>({VERSION_IFACE})); 27*b66ac3aeSAdriana Kobylak 28*b66ac3aeSAdriana Kobylak auto mapperResponseMsg = updater->busItem.call(mapper); 29*b66ac3aeSAdriana Kobylak if (mapperResponseMsg.is_method_error()) 30*b66ac3aeSAdriana Kobylak { 31*b66ac3aeSAdriana Kobylak log<level::ERR>("Error in mapper call", 32*b66ac3aeSAdriana Kobylak entry("PATH=%s", SOFTWARE_OBJPATH), 33*b66ac3aeSAdriana Kobylak entry("INTERFACE=%s", VERSION_IFACE)); 34*b66ac3aeSAdriana Kobylak return -1; 35*b66ac3aeSAdriana Kobylak } 36*b66ac3aeSAdriana Kobylak 37*b66ac3aeSAdriana Kobylak std::vector<std::string> mapperResponse; 38*b66ac3aeSAdriana Kobylak mapperResponseMsg.read(mapperResponse); 39*b66ac3aeSAdriana Kobylak if (mapperResponse.empty()) 40*b66ac3aeSAdriana Kobylak { 41*b66ac3aeSAdriana Kobylak log<level::ERR>("Error reading mapper response", 42*b66ac3aeSAdriana Kobylak entry("PATH=%s", SOFTWARE_OBJPATH), 43*b66ac3aeSAdriana Kobylak entry("INTERFACE=%s", VERSION_IFACE)); 44*b66ac3aeSAdriana Kobylak return -1; 45*b66ac3aeSAdriana Kobylak } 46*b66ac3aeSAdriana Kobylak 47*b66ac3aeSAdriana Kobylak for (const auto& resp : mapperResponse) 48*b66ac3aeSAdriana Kobylak { 49*b66ac3aeSAdriana Kobylak // Version id is the last item in the path 50*b66ac3aeSAdriana Kobylak auto pos = resp.rfind("/"); 51*b66ac3aeSAdriana Kobylak if (pos == std::string::npos) 52*b66ac3aeSAdriana Kobylak { 53*b66ac3aeSAdriana Kobylak log<level::ERR>("No version id found in object path", 54*b66ac3aeSAdriana Kobylak entry("OBJPATH=%s", resp)); 55*b66ac3aeSAdriana Kobylak return -1; 56*b66ac3aeSAdriana Kobylak } 57*b66ac3aeSAdriana Kobylak 58*b66ac3aeSAdriana Kobylak auto versionId = std::stoi(resp.substr(pos + 1), nullptr, 16); 59*b66ac3aeSAdriana Kobylak if (updater->activations.find(versionId) == updater->activations.end()) 60*b66ac3aeSAdriana Kobylak { 612d8fa225SAdriana Kobylak updater->activations.insert(std::make_pair( 622d8fa225SAdriana Kobylak versionId, 632d8fa225SAdriana Kobylak std::make_unique<Activation>( 642d8fa225SAdriana Kobylak updater->busItem, 65*b66ac3aeSAdriana Kobylak resp))); 66*b66ac3aeSAdriana Kobylak } 67*b66ac3aeSAdriana Kobylak } 682d8fa225SAdriana Kobylak return 0; 692d8fa225SAdriana Kobylak } 702d8fa225SAdriana Kobylak 712d8fa225SAdriana Kobylak } // namespace manager 722d8fa225SAdriana Kobylak } // namespace software 732d8fa225SAdriana Kobylak } // namespace openpower 742d8fa225SAdriana Kobylak 75