router: routing table lists are added/maintained as module properties
authorJanos Kovacs <jankovac503@gmail.com>
Wed, 23 May 2012 20:52:35 +0000 (23:52 +0300)
committerJanos Kovacs <jankovac503@gmail.com>
Wed, 23 May 2012 20:52:35 +0000 (23:52 +0300)
src/router.c
src/userdata.h

index 3bda800..1a9f894 100644 (file)
@@ -5,6 +5,9 @@
 
 #include <pulsecore/pulsecore-config.h>
 
+#include <pulse/proplist.h>
+#include <pulsecore/module.h>
+
 #include "router.h"
 #include "node.h"
 #include "switch.h"
@@ -12,6 +15,8 @@
 
 static void rtgroup_destroy(struct userdata *, mir_rtgroup *);
 static int rtgroup_print(mir_rtgroup *, char *, int);
+static void rtgroup_update_module_property(struct userdata *, mir_rtgroup *);
+
 
 static void add_rtentry(struct userdata *, mir_rtgroup *, mir_node *);
 static void remove_rtentry(struct userdata *, mir_rtentry *);
@@ -378,6 +383,22 @@ static int rtgroup_print(mir_rtgroup *rtg, char *buf, int len)
     return p - buf;
 }
 
+static void rtgroup_update_module_property(struct userdata *u,mir_rtgroup *rtg)
+{
+    pa_module *module;
+    char       key[64];
+    char       value[512];
+
+    pa_assert(u);
+    pa_assert(rtg);
+    pa_assert_se((module = u->module));
+
+    snprintf(key, sizeof(key), PA_PROP_ROUTING_TABLE ".%s", rtg->name);
+    rtgroup_print(rtg, value, sizeof(value));
+
+    pa_proplist_sets(module->proplist, key, value+1); /* skip ' '@beginning */
+}
+
 static void add_rtentry(struct userdata *u, mir_rtgroup *rtg, mir_node *node)
 {
     pa_router *router;
@@ -409,6 +430,7 @@ static void add_rtentry(struct userdata *u, mir_rtgroup *rtg, mir_node *node)
     MIR_DLIST_APPEND(mir_rtentry, link, rte, &rtg->entries);
 
  added:
+    rtgroup_update_module_property(u, rtg);
     pa_log_debug("node '%s' added to routing group '%s'",
                  node->amname, rtg->name);
 }
index e119269..7534e94 100644 (file)
@@ -7,6 +7,7 @@
 #define PA_PROP_ROUTING_CLASS_NAME  "routing.class.name"
 #define PA_PROP_ROUTING_CLASS_ID    "routing.class.id"
 #define PA_PROP_ROUTING_METHOD      "routing.method"
+#define PA_PROP_ROUTING_TABLE       "routing.table"
 
 #define PA_ROUTING_DEFAULT           "default"
 #define PA_ROUTING_EXPLICIT          "explicit"