Module: sip-router
Branch: master
Commit: 960406f5f4cc8701f0c4ff1db7a5e2028a839dd5
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=960406f…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Sat Apr 16 23:00:17 2011 +0200
domain(k): added rpc commands to reload and dump domains
---
modules_k/domain/domain_mod.c | 88 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 88 insertions(+), 0 deletions(-)
diff --git a/modules_k/domain/domain_mod.c b/modules_k/domain/domain_mod.c
index fb70d06..d8ca4ce 100644
--- a/modules_k/domain/domain_mod.c
+++ b/modules_k/domain/domain_mod.c
@@ -42,6 +42,8 @@
#include "../../pvar.h"
#include "../../forward.h"
#include "../../mod_fix.h"
+#include "../../rpc.h"
+#include "../../rpc_lookup.h"
#include "domain.h"
#include "mi.h"
#include "hash.h"
@@ -70,6 +72,8 @@ MODULE_VERSION
#define DOMAIN_COL "domain"
#define DOMAIN_COL_LEN (sizeof(DOMAIN_COL) - 1)
+static int domain_init_rpc(void);
+
/*
* Module parameter variables
*/
@@ -156,6 +160,12 @@ static int mod_init(void)
LM_ERR("failed to register MI commands\n");
return -1;
}
+ if(domain_init_rpc()!=0)
+ {
+ LM_ERR("failed to register RPC commands\n");
+ return -1;
+ }
+
if(domain_reg_myself!=0)
{
if(register_check_self_func(domain_check_self)<0)
@@ -260,3 +270,81 @@ static void destroy(void)
hash_table_2 = 0;
}
}
+
+
+static const char* domain_rpc_reload_doc[2] = {
+ "Reload domain table from database",
+ 0
+};
+
+
+/*
+ * RPC command to reload domain table
+ */
+static void domain_rpc_reload(rpc_t* rpc, void* ctx)
+{
+ if (!db_mode) {
+ rpc->fault(ctx, 200, "Server Domain Cache Disabled");
+ return;
+ }
+
+ if (reload_domain_table() < 0) {
+ rpc->fault(ctx, 400, "Domain Table Reload Failed");
+ }
+}
+
+
+
+static const char* domain_rpc_dump_doc[2] = {
+ "Return the contents of domain table",
+ 0
+};
+
+
+/*
+ * Fifo function to print domains from current hash table
+ */
+static void domain_rpc_dump(rpc_t* rpc, void* ctx)
+{
+ int i;
+ struct domain_list *np;
+ struct domain_list **ht;
+
+ if (!db_mode) {
+ rpc->fault(ctx, 400, "Server Domain Cache Disabled");
+ return;
+ }
+
+ if(hash_table==0 || *hash_table==0) {
+ rpc->fault(ctx, 404, "Server Domain Cache Empty");
+ return;
+ }
+ ht = *hash_table;
+ for (i = 0; i < DOM_HASH_SIZE; i++) {
+ np = ht[i];
+ while (np) {
+ if (rpc->add(ctx, "S", &np->domain) < 0)
+ return;
+
+ np = np->next;
+ }
+ }
+ return;
+}
+
+
+rpc_export_t domain_rpc_list[] = {
+ {"domain.reload", domain_rpc_reload, domain_rpc_reload_doc, 0},
+ {"domain.dump", domain_rpc_dump, domain_rpc_dump_doc, 0},
+ {0, 0, 0, 0}
+};
+
+static int domain_init_rpc(void)
+{
+ if (rpc_register_array(domain_rpc_list)!=0)
+ {
+ LM_ERR("failed to register RPC commands\n");
+ return -1;
+ }
+ return 0;
+}