Module: sip-router
Branch: master
Commit: 9287609db4ac64c709aa500e6326ac33af2c2061
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9287609…
Author: Marius Zbihlei <marius.zbihlei(a)1and1.ro>
Committer: Marius Zbihlei <marius.zbihlei(a)1and1.ro>
Date: Thu Apr 28 10:30:55 2011 +0300
module_k/pv Changed the nameaddr transformation by relaxing the requirements on the
input.
As some headers might be either uri or nameaddr form, using a single transformation for
parsing them was
impossible, as nameaddr.uri returns "" on an uri input(e.g.
sip:12345@example.com). With this change, the
nameaddr transformation succedes and the resulting transformation places the whole string
in the .uri field,
.name field being empty. A transformation chaning like the one below will work as expected
on both SIP URIs and
SIP Nameaddr
$(val(test){nameaddr.uri}{uri.domain})
---
modules_k/pv/pv_trans.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/modules_k/pv/pv_trans.c b/modules_k/pv/pv_trans.c
index b60f529..4cf2555 100644
--- a/modules_k/pv/pv_trans.c
+++ b/modules_k/pv/pv_trans.c
@@ -1016,6 +1016,7 @@ int tr_eval_nameaddr(struct sip_msg *msg, tr_param_t *tp, int
subtype,
pv_value_t *val)
{
str sv;
+ int ret;
if(val==NULL || (!(val->flags&PV_VAL_STR)) || val->rs.len<=0)
return -1;
@@ -1045,8 +1046,14 @@ int tr_eval_nameaddr(struct sip_msg *msg, tr_param_t *tp, int
subtype,
/* parse params */
sv = _tr_nameaddr_str;
- if (parse_nameaddr(&sv, &_tr_nameaddr)<0)
- return -1;
+ ret = parse_nameaddr(&sv, &_tr_nameaddr);
+ if (ret < 0) {
+ if(ret != -3) return -1;
+ /* -3 means no "<" found so treat whole nameaddr as an URI */
+ _tr_nameaddr.uri = _tr_nameaddr_str;
+ _tr_nameaddr.name = _tr_empty;
+ _tr_nameaddr.len = _tr_nameaddr_str.len;
+ }
}
memset(val, 0, sizeof(pv_value_t));