[sr-dev] git:master:f1630caf: pv: add the $env() PV class to read env vars (#978)

Victor Seva linuxmaniac at torreviejawireless.org
Thu Feb 9 15:24:41 CET 2017


Module: kamailio
Branch: master
Commit: f1630caf691aa1e5b92086af08d49be38cf6c82f
URL: https://github.com/kamailio/kamailio/commit/f1630caf691aa1e5b92086af08d49be38cf6c82f

Author: Camille Oudot <camille.oudot at orange.com>
Committer: Victor Seva <linuxmaniac at torreviejawireless.org>
Date: 2017-02-09T15:24:37+01:00

pv: add the $env() PV class to read env vars (#978)

* pv: add the $env() PV class to read env vars
* pv: $env() code style improvements

---

Modified: src/modules/pv/pv.c
Modified: src/modules/pv/pv_core.c
Modified: src/modules/pv/pv_core.h

---

Diff:  https://github.com/kamailio/kamailio/commit/f1630caf691aa1e5b92086af08d49be38cf6c82f.diff
Patch: https://github.com/kamailio/kamailio/commit/f1630caf691aa1e5b92086af08d49be38cf6c82f.patch

---

diff --git a/src/modules/pv/pv.c b/src/modules/pv/pv.c
index 8f69b94..f1e1f41 100644
--- a/src/modules/pv/pv.c
+++ b/src/modules/pv/pv.c
@@ -208,6 +208,8 @@ static pv_export_t mod_pvs[] = {
 	{{"duri", (sizeof("duri")-1)}, /* */
 		PVT_DSTURI, pv_get_dsturi, pv_set_dsturi,
 		0, 0, 0, 0},
+	{{"env", (sizeof("env")-1)}, PVT_OTHER, pv_get_env, 0,
+		pv_parse_env_name, 0, 0, 0},
 	{{"err.class", (sizeof("err.class")-1)}, /* */
 		PVT_OTHER, pv_get_errinfo_attr, 0,
 		0, 0, 0, 0},
diff --git a/src/modules/pv/pv_core.c b/src/modules/pv/pv_core.c
index e82c1e0..f1d264b 100644
--- a/src/modules/pv/pv_core.c
+++ b/src/modules/pv/pv_core.c
@@ -50,6 +50,8 @@
 #include "pv_core.h"
 #include "pv_svar.h"
 
+#include <string.h>
+#include <stdlib.h>
 
 static str str_udp    = { "UDP", 3 };
 static str str_5060   = { "5060", 4 };
@@ -3233,3 +3235,41 @@ int pv_get_msg_attrs(sip_msg_t *msg, pv_param_t *param, pv_value_t *res)
 			return pv_get_null(msg, param, res);
 	}
 }
+
+int pv_parse_env_name(pv_spec_p sp, str *in)
+{
+	char *csname;
+
+	if(in->s==NULL || in->len<=0)
+		return -1;
+
+	csname = pkg_malloc(in->len + 1);
+
+	if (csname == NULL) {
+		LM_ERR("no more pkg memory");
+		return -1;
+	}
+
+	memcpy(csname, in->s, in->len);
+	csname[in->len] = '\0';
+
+	sp->pvp.pvn.u.dname = (void*)csname;
+	sp->pvp.pvn.type = PV_NAME_OTHER;
+	return 0;
+}
+
+int pv_get_env(sip_msg_t *msg, pv_param_t *param, pv_value_t *res)
+{
+	char *val;
+	char *csname = (char *) param->pvn.u.dname;
+
+	if (csname) {
+		val = getenv(csname);
+
+		if (val) {
+			return pv_get_strzval(msg, param, res, val);
+		}
+	}
+	return pv_get_null(msg, param, res);
+}
+
diff --git a/src/modules/pv/pv_core.h b/src/modules/pv/pv_core.h
index 58fe262..27c13bb 100644
--- a/src/modules/pv/pv_core.h
+++ b/src/modules/pv/pv_core.h
@@ -334,5 +334,9 @@ int pv_parse_msg_attrs_name(pv_spec_p sp, str *in);
 
 int pv_get_msg_attrs(sip_msg_t *msg, pv_param_t *param,
 		pv_value_t *res);
+
+int pv_parse_env_name(pv_spec_p sp, str *in);
+
+int pv_get_env(sip_msg_t *msg, pv_param_t *param, pv_value_t *res);
 #endif
 




More information about the sr-dev mailing list