1 #include "dump_utils.hpp"
2 
3 #include <phosphor-logging/log.hpp>
4 
5 namespace phosphor
6 {
7 namespace dump
8 {
9 
10 std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
11                        const std::string& interface)
12 {
13     constexpr auto objectMapperName = "xyz.openbmc_project.ObjectMapper";
14     constexpr auto objectMapperPath = "/xyz/openbmc_project/object_mapper";
15     using namespace phosphor::logging;
16 
17     auto method = bus.new_method_call(objectMapperName, objectMapperPath,
18                                       objectMapperName, "GetObject");
19 
20     method.append(path);
21     method.append(std::vector<std::string>({interface}));
22 
23     std::vector<std::pair<std::string, std::vector<std::string>>> response;
24 
25     try
26     {
27         auto reply = bus.call(method);
28         reply.read(response);
29         if (response.empty())
30         {
31             log<level::ERR>("Error in mapper response for getting service name",
32                             entry("PATH=%s", path.c_str()),
33                             entry("INTERFACE=%s", interface.c_str()));
34             return std::string{};
35         }
36     }
37     catch (const sdbusplus::exception::SdBusError& e)
38     {
39         log<level::ERR>("Error in mapper method call",
40                         entry("ERROR=%s", e.what()),
41                         entry("PATH=%s", path.c_str()),
42                         entry("INTERFACE=%s", interface.c_str()));
43         return std::string{};
44     }
45     return response[0].first;
46 }
47 
48 } // namespace dump
49 } // namespace phosphor
50