Add getManagedObjects helper function

This will return all of the interfaces and
properties on an object.  It will be used on
startup of the application to check for existing
error logs.

Change-Id: I29f25da0fe69a3200a1f690397af13f8513c8844
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/Makefile.am b/Makefile.am
index 76e9c1b..0997d31 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -3,6 +3,7 @@
 sbin_PROGRAMS = ibm-log-manager
 
 ibm_log_manager_SOURCES = \
+	dbus.cpp \
 	main.cpp \
 	manager.cpp
 
diff --git a/dbus.cpp b/dbus.cpp
new file mode 100644
index 0000000..1741019
--- /dev/null
+++ b/dbus.cpp
@@ -0,0 +1,54 @@
+/**
+ * Copyright © 2018 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <phosphor-logging/log.hpp>
+#include "dbus.hpp"
+
+namespace ibm
+{
+namespace logging
+{
+
+ObjectValueTree getManagedObjects(
+        sdbusplus::bus::bus& bus,
+        const std::string& service,
+        const std::string& objPath)
+{
+    ObjectValueTree interfaces;
+
+    auto method = bus.new_method_call(
+                      service.c_str(),
+                      objPath.c_str(),
+                      "org.freedesktop.DBus.ObjectManager",
+                      "GetManagedObjects");
+
+    auto reply = bus.call(method);
+
+    if (reply.is_method_error())
+    {
+        using namespace phosphor::logging;
+        log<level::ERR>("Failed to get managed objects",
+                entry("PATH=%s", objPath.c_str()));
+    }
+    else
+    {
+        reply.read(interfaces);
+    }
+
+    return interfaces;
+}
+
+}
+}
diff --git a/dbus.hpp b/dbus.hpp
index 54dfd4a..468e327 100644
--- a/dbus.hpp
+++ b/dbus.hpp
@@ -20,6 +20,13 @@
 using DbusInterfaceMap = std::map<DbusInterface, DbusPropertyMap>;
 using DbusInterfaceList = std::vector<DbusInterface>;
 
+using ObjectValueTree =
+    std::map<sdbusplus::message::object_path, DbusInterfaceMap>;
+
+ObjectValueTree getManagedObjects(
+        sdbusplus::bus::bus& bus,
+        const std::string& service,
+        const std::string& objPath);
 }
 }