1 #include <string> 2 #include <sdbusplus/bus.hpp> 3 #include <phosphor-logging/elog-errors.hpp> 4 #include <xyz/openbmc_project/Common/error.hpp> 5 namespace open_power 6 { 7 namespace occ 8 { 9 10 // For throwing exceptions 11 using namespace phosphor::logging; 12 using InternalFailure = sdbusplus::xyz::openbmc_project::Common:: 13 Error::InternalFailure; 14 15 std::string getService(sdbusplus::bus::bus& bus, 16 const std::string& path, 17 const std::string& intf) 18 { 19 auto mapperCall = bus.new_method_call("xyz.openbmc_project.ObjectMapper", 20 "/xyz/openbmc_project/object_mapper", 21 "xyz.openbmc_project.ObjectMapper", 22 "GetObject"); 23 24 mapperCall.append(path); 25 mapperCall.append(std::vector<std::string>({intf})); 26 27 auto mapperResponseMsg = bus.call(mapperCall); 28 29 if (mapperResponseMsg.is_method_error()) 30 { 31 log<level::ERR>("ERROR in getting service", 32 entry("PATH=%s",path.c_str()), 33 entry("INTERFACE=%s",intf.c_str())); 34 35 elog<InternalFailure>(); 36 } 37 38 std::map<std::string, std::vector<std::string>> mapperResponse; 39 mapperResponseMsg.read(mapperResponse); 40 41 if (mapperResponse.begin() == mapperResponse.end()) 42 { 43 log<level::ERR>("ERROR reading mapper response", 44 entry("PATH=%s",path.c_str()), 45 entry("INTERFACE=%s",intf.c_str())); 46 47 elog<InternalFailure>(); 48 } 49 return mapperResponse.begin()->first; 50 } 51 52 } // namespace occ 53 } // namespace open_power 54