[sr-dev] git:master:df817340: pv: using * for header name matches any header for $hdr(name)
Daniel-Constantin Mierla
miconda at gmail.com
Fri Jul 20 18:01:34 CEST 2018
Module: kamailio
Branch: master
Commit: df817340df65abd116e6f9d49a3a32b4d1c0d470
URL: https://github.com/kamailio/kamailio/commit/df817340df65abd116e6f9d49a3a32b4d1c0d470
Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2018-07-20T17:59:36+02:00
pv: using * for header name matches any header for $hdr(name)
- e.g., $hdr(*) is body of first header, $(hdr(*)[-1]) is body of last
header
---
Modified: src/modules/pv/pv_core.c
---
Diff: https://github.com/kamailio/kamailio/commit/df817340df65abd116e6f9d49a3a32b4d1c0d470.diff
Patch: https://github.com/kamailio/kamailio/commit/df817340df65abd116e6f9d49a3a32b4d1c0d470.patch
---
diff --git a/src/modules/pv/pv_core.c b/src/modules/pv/pv_core.c
index 8957098895..65e9491b93 100644
--- a/src/modules/pv/pv_core.c
+++ b/src/modules/pv/pv_core.c
@@ -1900,6 +1900,8 @@ int pv_get_hdr(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
if (tv.ri==hf->type)
break;
} else {
+ if(tv.rs.len==1 && tv.rs.s[0]=='*')
+ break;
if (cmp_hdrname_str(&hf->name, &tv.rs)==0)
break;
}
@@ -1953,8 +1955,10 @@ int pv_get_hdr(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
if (tv.ri==hf->type)
break;
} else {
+ if(tv.rs.len==1 && tv.rs.s[0]=='*')
+ break;
if (cmp_hdrname_str(&hf->name, &tv.rs)==0)
- break;
+ break;
}
}
} while (hf);
@@ -1976,8 +1980,11 @@ int pv_get_hdr(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
if (tv.ri==hf0->type)
n++;
} else {
- if (cmp_hdrname_str(&hf0->name, &tv.rs)==0)
+ if(tv.rs.len==1 && tv.rs.s[0]=='*') {
n++;
+ } else if (cmp_hdrname_str(&hf0->name, &tv.rs)==0) {
+ n++;
+ }
}
}
idx = -idx;
@@ -2003,8 +2010,11 @@ int pv_get_hdr(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
if (tv.ri==hf0->type)
n++;
} else {
- if (cmp_hdrname_str(&hf0->name, &tv.rs)==0)
+ if(tv.rs.len==1 && tv.rs.s[0]=='*') {
+ n++;
+ } else if (cmp_hdrname_str(&hf0->name, &tv.rs)==0) {
n++;
+ }
}
if(n==idx)
break;
@@ -3114,6 +3124,14 @@ int pv_parse_hdr_name(pv_spec_p sp, str *in)
return 0;
}
+ if(in->len==1 && in->s[0]=='*') {
+ /* match any header name */
+ sp->pvp.pvn.type = PV_NAME_INTSTR;
+ sp->pvp.pvn.u.isname.type = AVP_NAME_STR;
+ sp->pvp.pvn.u.isname.name.s = *in;
+ return 0;
+ }
+
if(in->len>=pv_get_buffer_size()-1)
{
LM_ERR("name too long\n");
More information about the sr-dev
mailing list