[sr-dev] git:master: corex: new pv $cfg(key) - return attributes for config file

Daniel-Constantin Mierla miconda at gmail.com
Mon Sep 16 20:33:57 CEST 2013


Module: sip-router
Branch: master
Commit: a68e48bc3c322be79a608d91f40d10329c2e9664
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a68e48bc3c322be79a608d91f40d10329c2e9664

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at 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




More information about the sr-dev mailing list