Module: sip-router Branch: master Commit: a68e48bc3c322be79a608d91f40d10329c2e9664 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a68e48bc...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: Mon Sep 16 20:31:44 2013 +0200
corex: new pv $cfg(key) - return attributes for config file
- $cfg(line) - the line of the current action. - $cfg(name) - the name of the current conf file
Example of usage:
append_to_reply("P-Cfg-Line: $cfg(line)\r\n");
---
modules/corex/corex_mod.c | 10 +++++- modules/corex/corex_var.c | 83 +++++++++++++++++++++++++++++++++++++++++++++ modules/corex/corex_var.h | 28 +++++++++++++++ 3 files changed, 120 insertions(+), 1 deletions(-)
diff --git a/modules/corex/corex_mod.c b/modules/corex/corex_mod.c index bddba03..8d62498 100644 --- a/modules/corex/corex_mod.c +++ b/modules/corex/corex_mod.c @@ -30,6 +30,7 @@
#include "corex_lib.h" #include "corex_rpc.h" +#include "corex_var.h"
MODULE_VERSION
@@ -43,6 +44,13 @@ static int mod_init(void); static int child_init(int); static void mod_destroy(void);
+static pv_export_t mod_pvs[] = { + { {"cfg", (sizeof("cfg")-1)}, PVT_OTHER, pv_get_cfg, 0, + pv_parse_cfg_name, 0, 0, 0 }, + + { {0, 0}, 0, 0, 0, 0, 0, 0, 0 } +}; + static cmd_export_t cmds[]={ {"append_branch", (cmd_function)w_append_branch, 0, 0, 0, REQUEST_ROUTE | FAILURE_ROUTE }, @@ -76,7 +84,7 @@ struct module_exports exports = { params, 0, 0, /* exported MI functions */ - 0, /* exported pseudo-variables */ + mod_pvs, /* exported pseudo-variables */ 0, /* extra processes */ mod_init, /* module initialization function */ 0, /* response function */ diff --git a/modules/corex/corex_var.c b/modules/corex/corex_var.c new file mode 100644 index 0000000..2beaf70 --- /dev/null +++ b/modules/corex/corex_var.c @@ -0,0 +1,83 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Daniel-Constantin Mierla (asipto.com) + * + * This file is part of Kamailio, a free SIP server. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#include "../../dprint.h" +#include "../../action.h" + +#include "corex_var.h" + +/** + * + */ +int pv_parse_cfg_name(pv_spec_p sp, str *in) +{ + if(sp==NULL || in==NULL || in->len<=0) + return -1; + + switch(in->len) + { + case 4: + if(strncmp(in->s, "line", 4)==0) + sp->pvp.pvn.u.isname.name.n = 0; + else if(strncmp(in->s, "name", 4)==0) + sp->pvp.pvn.u.isname.name.n = 1; + else goto error; + break; + default: + goto error; + } + sp->pvp.pvn.type = PV_NAME_INTSTR; + sp->pvp.pvn.u.isname.type = 0; + + return 0; + +error: + LM_ERR("unknown PV af key: %.*s\n", in->len, in->s); + return -1; +} + +/** + * + */ +int pv_get_cfg(sip_msg_t *msg, pv_param_t *param, pv_value_t *res) +{ + char *n; + + if(param==NULL) + return -1; + + switch(param->pvn.u.isname.name.n) + { + case 1: + n = get_cfg_crt_name(); + if(n==0) + return pv_get_null(msg, param, res); + return pv_get_strzval(msg, param, res, n); + default: + return pv_get_sintval(msg, param, res, get_cfg_crt_line()); + } +} + diff --git a/modules/corex/corex_var.h b/modules/corex/corex_var.h new file mode 100644 index 0000000..c5c2a23 --- /dev/null +++ b/modules/corex/corex_var.h @@ -0,0 +1,28 @@ +/** + * Copyright (C) 2013 Daniel-Constantin Mierla (asipto.com) + * + * This file is part of Kamailio, a free SIP server. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ + +#ifndef _COREX_VAR_H_ +#define _COREX_VAR_H_ + +#include "../../pvar.h" + +int pv_parse_cfg_name(pv_spec_p sp, str *in); +int pv_get_cfg(sip_msg_t *msg, pv_param_t *param, pv_value_t *res); + +#endif
16 sep 2013 kl. 20:33 skrev Daniel-Constantin Mierla miconda@gmail.com:
corex: new pv $cfg(key) - return attributes for config file
- $cfg(line) - the line of the current action.
- $cfg(name) - the name of the current conf file
Example of usage:
append_to_reply("P-Cfg-Line: $cfg(line)\r\n");
Cool idea. Thank you for this patch!
/O