[sr-dev] git:master: modules/pv: added PVs to provide access to the user-agent string retrieved from usrloc

Peter Dunkley peter.dunkley at crocodile-rcs.com
Sat May 18 01:19:18 CEST 2013


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

Author: Peter Dunkley <peter.dunkley at crocodile-rcs.com>
Committer: Peter Dunkley <peter.dunkley at crocodile-rcs.com>
Date:   Sat May 18 00:14:07 2013 +0100

modules/pv: added PVs to provide access to the user-agent string retrieved from usrloc

---

 modules/pv/pv.c        |    3 +++
 modules/pv/pv_branch.c |   12 +++++++++++-
 modules/pv/pv_core.c   |   24 +++++++++++++++++++++---
 modules/pv/pv_core.h   |    3 +++
 4 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/modules/pv/pv.c b/modules/pv/pv.c
index 2c4d544..44d35e0 100644
--- a/modules/pv/pv.c
+++ b/modules/pv/pv.c
@@ -416,6 +416,9 @@ static pv_export_t mod_pvs[] = {
 	{{"ruid", (sizeof("ruid")-1)}, /* */
 		PVT_OTHER, pv_get_ruid, 0,
 		0, 0, 0, 0},
+	{{"location_ua", (sizeof("location_ua")-1)}, /* */
+		PVT_OTHER, pv_get_location_ua, 0,
+		0, 0, 0, 0},
 
 	{ {"shv", (sizeof("shv")-1)}, PVT_OTHER, pv_get_shvar,
 		pv_set_shvar, pv_parse_shvar_name, 0, 0, 0},
diff --git a/modules/pv/pv_branch.c b/modules/pv/pv_branch.c
index 791bb5a..0b5138a 100644
--- a/modules/pv/pv_branch.c
+++ b/modules/pv/pv_branch.c
@@ -41,6 +41,7 @@ int pv_get_branchx(struct sip_msg *msg, pv_param_t *param,
 	unsigned int fl = 0;
 	struct socket_info* fsocket = NULL;
 	str ruid;
+	str location_ua;
 
 	/* get the index */
 	if(pv_get_spec_index(msg, param, &idx, &idxf)!=0)
@@ -49,7 +50,7 @@ int pv_get_branchx(struct sip_msg *msg, pv_param_t *param,
 		return pv_get_null(msg, param, res);
 	}
 
-	uri.s = get_branch(idx, &uri.len, &lq, &duri, &path, &fl, &fsocket, &ruid, 0);
+	uri.s = get_branch(idx, &uri.len, &lq, &duri, &path, &fl, &fsocket, &ruid, 0, &location_ua);
 
 	/* branch(count) doesn't need a valid branch, everything else does */
 	if(uri.s == 0 && ( param->pvn.u.isname.name.n != 5/* count*/ ))
@@ -84,6 +85,10 @@ int pv_get_branchx(struct sip_msg *msg, pv_param_t *param,
 			if(ruid.len==0)
 				return pv_get_null(msg, param, res);
 			return pv_get_strval(msg, param, res, &ruid);
+		case 8: /* location_ua */
+			if(location_ua.len==0)
+				return pv_get_null(msg, param, res);
+			return pv_get_strval(msg, param, res, &location_ua);
 		default:
 			/* 0 - uri */
 			return pv_get_strval(msg, param, res, &uri);
@@ -253,6 +258,9 @@ int pv_set_branchx(struct sip_msg* msg, pv_param_t *param,
 		case 7: /* ruid */
 			/* do nothing - cannot set the ruid */
 		break;
+		case 8: /* location_ua */
+			/* do nothing - cannot set the location_ua */
+		break;
 		default:
 			/* 0 - uri */
 			if(val==NULL || (val->flags&PV_VAL_NULL))
@@ -316,6 +324,8 @@ int pv_parse_branchx_name(pv_spec_p sp, str *in)
 		case 11: 
 			if(strncmp(in->s, "send_socket", 11)==0)
 				sp->pvp.pvn.u.isname.name.n = 4;
+			else if(strncmp(in->s, "location_ua", 11)==0)
+				sp->pvp.pvn.u.isname.name.n = 8;
 			else goto error;
 		break;
 		case 5: 
diff --git a/modules/pv/pv_core.c b/modules/pv/pv_core.c
index 3dda6a2..4225f21 100644
--- a/modules/pv/pv_core.c
+++ b/modules/pv/pv_core.c
@@ -1359,7 +1359,7 @@ int pv_get_branch(struct sip_msg *msg, pv_param_t *param,
 		return pv_get_null(msg, param, res);
 
 
-	branch.s = get_branch(0, &branch.len, &q, 0, 0, 0, 0, 0, 0);
+	branch.s = get_branch(0, &branch.len, &q, 0, 0, 0, 0, 0, 0, 0);
 	if (!branch.s) {
 		return pv_get_null(msg, param, res);
 	}
@@ -1388,7 +1388,7 @@ int pv_get_branches(struct sip_msg *msg, pv_param_t *param,
   
 	cnt = s.len = 0;
 
-	while ((uri.s = get_branch(cnt, &uri.len, &q, 0, 0, 0, 0, 0, 0)))
+	while ((uri.s = get_branch(cnt, &uri.len, &q, 0, 0, 0, 0, 0, 0, 0)))
 	{
 		cnt++;
 		s.len += uri.len;
@@ -1412,7 +1412,7 @@ int pv_get_branches(struct sip_msg *msg, pv_param_t *param,
 	i = 0;
 	p = pv_local_buf;
 
-	while ((uri.s = get_branch(i, &uri.len, &q, 0, 0, 0, 0, 0, 0)))
+	while ((uri.s = get_branch(i, &uri.len, &q, 0, 0, 0, 0, 0, 0, 0)))
 	{
 		if (i)
 		{
@@ -1823,6 +1823,24 @@ int pv_get_ruid(struct sip_msg *msg, pv_param_t *param,
 	return pv_get_strval(msg, param, res, &msg->ruid);
 }
 
+int pv_get_location_ua(struct sip_msg *msg, pv_param_t *param,
+		pv_value_t *res)
+{
+	if(msg==NULL)
+		return -1;
+
+	if(msg->first_line.type == SIP_REPLY)
+		return pv_get_null(msg, param, res);
+
+	if(msg->location_ua.len==0) 
+	{
+		LM_DBG("no location_ua\n");
+		return pv_get_null(msg, param, res);
+	}
+	
+	return pv_get_strval(msg, param, res, &msg->location_ua);
+}
+
 int pv_get_tcpconn_id(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res)
 {
diff --git a/modules/pv/pv_core.h b/modules/pv/pv_core.h
index 9b62d41..193185b 100644
--- a/modules/pv/pv_core.h
+++ b/modules/pv/pv_core.h
@@ -217,6 +217,9 @@ int pv_get_cnt(struct sip_msg *msg, pv_param_t *param,
 int pv_get_ruid(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res);
 
+int pv_get_location_ua(struct sip_msg *msg, pv_param_t *param,
+		pv_value_t *res);
+
 int pv_get_tcpconn_id(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res);
 




More information about the sr-dev mailing list