libmapper: Add function to call GetSubTreePaths
Call the dbus method GetSubTreePaths to look for the
specified interface.
Change-Id: If266fc0db2c10582eeb9438e91f9556dcb525e39
Signed-off-by: Adriana Kobylak <anoo@us.ibm.com>
diff --git a/libmapper/mapper.c b/libmapper/mapper.c
index 56fa5b8..8865bc7 100644
--- a/libmapper/mapper.c
+++ b/libmapper/mapper.c
@@ -75,7 +75,9 @@
sd_event *loop;
sd_bus *conn;
sd_bus_slot *slot;
+ sd_event_source *event_source;
int op;
+ int retry;
};
static int async_wait_match_introspection_complete(sd_bus_message *, void *,
@@ -88,6 +90,9 @@
static int async_subtree_match_callback(sd_bus_message *, void *,
sd_bus_error *);
+static int async_subtree_getpaths(mapper_async_subtree *);
+static int async_subtree_getpaths_callback(sd_bus_message *,
+ void *, sd_bus_error *);
static int sarraylen(char *array[])
{
@@ -394,6 +399,40 @@
return r;
}
+static int async_subtree_getpaths_callback(sd_bus_message *m,
+ void *userdata,
+ sd_bus_error *e)
+{
+ return 0;
+}
+
+static int async_subtree_getpaths(mapper_async_subtree *subtree)
+{
+ int r = 0;
+
+ subtree->retry = 0;
+ subtree->event_source = NULL;
+ r = sd_bus_call_method_async(
+ subtree->conn,
+ NULL,
+ MAPPER_BUSNAME,
+ MAPPER_PATH,
+ MAPPER_INTERFACE,
+ "GetSubTreePaths",
+ async_subtree_getpaths_callback,
+ subtree,
+ "sias",
+ subtree->namespace,
+ 0, 1,
+ subtree->interface);
+ if (r < 0) {
+ fprintf(stderr, "Error invoking method: %s\n", strerror(-r));
+ return r;
+ }
+
+ return 0;
+}
+
static int async_subtree_match_callback(sd_bus_message *m,
void *t,
sd_bus_error *e)
@@ -444,6 +483,13 @@
goto free_subtree;
}
+ r = async_subtree_getpaths(subtree);
+ if(r < 0) {
+ fprintf(stderr, "Error calling method: %s\n",
+ strerror(-r));
+ goto unref_slot;
+ }
+
*t = subtree;
return 0;