Module: sip-router Branch: master Commit: 11f3eb6788c1f4db5848b1c05e424aa81512d8d1 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=11f3eb67...
Author: Olle E. Johansson oej@edvina.net Committer: Olle E. Johansson oej@edvina.net Date: Sun Dec 7 18:58:43 2014 +0100
dialplan Add dialplan.dump <id> RPC command
---
modules/dialplan/README | 30 +++++++--- modules/dialplan/dialplan.c | 102 +++++++++++++++++++++++++++++++ modules/dialplan/doc/dialplan_admin.xml | 16 +++++ 3 files changed, 140 insertions(+), 8 deletions(-)
diff --git a/modules/dialplan/README b/modules/dialplan/README index 08ee011..5604c7c 100644 --- a/modules/dialplan/README +++ b/modules/dialplan/README @@ -56,8 +56,9 @@ Juha Heinanen
8. Exported RPC Commands
- 8.1. dialplan.reload - 8.2. dialplan.translate + 8.1. dialplan.dump + 8.2. dialplan.reload + 8.3. dialplan.translate
9. Installation
@@ -121,8 +122,9 @@ Chapter 1. Admin Guide
8. Exported RPC Commands
- 8.1. dialplan.reload - 8.2. dialplan.translate + 8.1. dialplan.dump + 8.2. dialplan.reload + 8.3. dialplan.translate
9. Installation
@@ -453,10 +455,22 @@ xlog("translated to var $var(y) \n");
8. Exported RPC Commands
- 8.1. dialplan.reload - 8.2. dialplan.translate + 8.1. dialplan.dump + 8.2. dialplan.reload + 8.3. dialplan.translate
-8.1. dialplan.reload +8.1. dialplan.dump + + Dumps the content of one dialplan ID + + Name: dialplan.dump + + Parameters: Dialplan ID + + Example: + kamcmd dialplan.dump 100 + +8.2. dialplan.reload
Forces an update of the translation rules from the database.
@@ -467,7 +481,7 @@ xlog("translated to var $var(y) \n"); Example: kamcmd dialplan.reload
-8.2. dialplan.translate +8.3. dialplan.translate
Will apply a translation rule identified by a dialplan id and an input string. diff --git a/modules/dialplan/dialplan.c b/modules/dialplan/dialplan.c index d86eb56..3d6fcbe 100644 --- a/modules/dialplan/dialplan.c +++ b/modules/dialplan/dialplan.c @@ -5,6 +5,8 @@ * * Copyright (C) 2008 Juha Heinanen * + * Copyright (C) 2015 Olle E. Johansson, Edvina AB + * * This file is part of SIP-router, a free SIP server. * * SIP-router is free software; you can redistribute it and/or modify @@ -25,6 +27,7 @@ * -------- * 2007-08-01 initial version (ancuta onofrei) * 2008-10-09 module is now using pcre regexp lib (juha heinanen) + * 2015-11-25 added RPC command for listing dialplan */
/*! @@ -657,12 +660,111 @@ static void dialplan_rpc_translate(rpc_t* rpc, void* ctx) return; }
+/* + * RPC command to dump dialplan + */ +static void dialplan_rpc_dump(rpc_t* rpc, void* ctx) +{ + dpl_id_p idp; + dpl_index_p indexp; + dpl_node_p rulep; + str input; + int dpid; + str attrs = {"", 0}; + str output = {0, 0}; + void* th; + void* ih; + void* sh; + + if (rpc->scan(ctx, "d", &dpid) < 1) + { + rpc->fault(ctx, 500, "Missing parameter"); + return; + } + + if ((idp = select_dpid(dpid)) == 0 ) { + LM_ERR("no information available for dpid %i\n", dpid); + rpc->fault(ctx, 500, "Dialplan ID not matched"); + return; + } + + LM_DBG("trying to dump dpid %i\n", idp->dp_id); + + /* add entry node */ + if (rpc->add(ctx, "{", &th) < 0) + { + rpc->fault(ctx, 500, "Internal error root reply"); + return; + } + + if(rpc->struct_add(th, "d[", + "DPID", dpid, + "ENTRIES", &ih)<0) + { + rpc->fault(ctx, 500, "Internal error sets structure"); + return; + } + + for(indexp=idp->first_index; indexp!=NULL;indexp=indexp->next) { + LM_DBG("INDEX LEN: %i\n", indexp->len); + for(rulep = indexp->first_rule; rulep!= NULL;rulep = rulep->next) { + LM_DBG("DPID: %i PRIO : %i\n", rulep->dpid, rulep->pr); + if (rpc->struct_add(ih, "{","ENTRY", &sh) < 0) + { + rpc->fault(ctx, 500, "Internal error root reply"); + return; + } + + if (rpc->struct_add(sh, "dd", "PRIO", rulep->pr, + "MATCHOP", rulep->matchop)<0) + { + rpc->fault(ctx, 500, "Internal error adding prio"); + return; + } + if (rpc->struct_add(sh, "s", "MATCHEXP", rulep->match_exp) < 0 ) + { + rpc->fault(ctx, 500, "Internal error adding match exp"); + return; + } + if (rpc->struct_add(sh, "d", "MATCHLEN", rulep->matchlen) < 0 ) + { + rpc->fault(ctx, 500, "Internal error adding expression data and attribute"); + return; + } + if (rpc->struct_add(sh, "s", "SUBSTEXP", rulep->subst_exp) < 0 ) + { + rpc->fault(ctx, 500, "Internal error adding subst exp"); + return; + } + if (rpc->struct_add(sh, "s", "REPLEXP", rulep->repl_exp) < 0 ) + { + rpc->fault(ctx, 500, "Internal error adding replace exp "); + return; + } + if (rpc->struct_add(sh, "s", "ATTRS", rulep->attrs) < 0 ) + { + rpc->fault(ctx, 500, "Internal error adding attribute"); + return; + } + } + } + + return; +} + +static const char* dialplan_rpc_dump_doc[2] = { + "Dump dialplan content", + 0 +}; +
rpc_export_t dialplan_rpc_list[] = { {"dialplan.reload", dialplan_rpc_reload, dialplan_rpc_reload_doc, 0}, {"dialplan.translate", dialplan_rpc_translate, dialplan_rpc_translate_doc, 0}, + {"dialplan.dump", dialplan_rpc_dump, + dialplan_rpc_dump_doc, 0}, {0, 0, 0, 0} };
diff --git a/modules/dialplan/doc/dialplan_admin.xml b/modules/dialplan/doc/dialplan_admin.xml index 6b07a2d..5bfa870 100644 --- a/modules/dialplan/doc/dialplan_admin.xml +++ b/modules/dialplan/doc/dialplan_admin.xml @@ -553,6 +553,22 @@ xlog("translated to var $var(y) \n"); <section> <title>Exported RPC Commands</title>
+ <section id="dialplan.r.dp.dump"> + <title><varname>dialplan.dump</varname></title> + <para> + Dumps the content of one dialplan ID + </para> + <para> + Name: <emphasis>dialplan.dump</emphasis> + </para> + <para>Parameters: <emphasis>Dialplan ID</emphasis></para> + <para> + Example: + </para> + <programlisting format="linespecific"> + &sercmd; dialplan.dump 100 + </programlisting> + </section> <section id="dialplan.r.dp.reload"> <title><varname>dialplan.reload</varname></title> <para>