Introducing libmapper
libmapper is a convenience library for sdbus applications
that interact with the phosphor object manager.
Change-Id: I5a638e0a313d575591055214cb3ac5701b730ae5
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/libmapper/mapper.c b/libmapper/mapper.c
new file mode 100644
index 0000000..62dd2e6
--- /dev/null
+++ b/libmapper/mapper.c
@@ -0,0 +1,65 @@
+/**
+ * Copyright © 2016 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 <string.h>
+#include <systemd/sd-bus.h>
+#include "mapper.h"
+
+int mapper_get_service(sd_bus *conn, const char *obj, char **service)
+{
+ sd_bus_error error = SD_BUS_ERROR_NULL;
+ sd_bus_message *request = NULL, *reply = NULL;
+ const char *tmp;
+ int r;
+
+ r = sd_bus_message_new_method_call(
+ conn,
+ &request,
+ "org.openbmc.ObjectMapper",
+ "/org/openbmc/ObjectMapper",
+ "org.openbmc.ObjectMapper",
+ "GetObject");
+ if (r < 0)
+ goto exit;
+
+ r = sd_bus_message_append(request, "s", obj);
+ if (r < 0)
+ goto exit;
+
+ r = sd_bus_call(conn, request, 0, &error, &reply);
+ if (r < 0)
+ goto exit;
+
+ r = sd_bus_message_enter_container(reply, 0, NULL);
+ if (r < 0)
+ goto exit;
+
+ r = sd_bus_message_enter_container(reply, 0, NULL);
+ if (r < 0)
+ goto exit;
+
+ r = sd_bus_message_read(reply, "s", &tmp);
+ if (r < 0)
+ goto exit;
+
+ *service = strdup(tmp);
+
+exit:
+ sd_bus_error_free(&error);
+ sd_bus_message_unref(request);
+ sd_bus_message_unref(reply);
+
+ return r;
+}