mirror of https://github.com/sipwise/kamailio.git
* previously we where not supporting pseudo-variables as index Change-Id: I04a22cef363b9ff17a8d5d617a3eecb72ca51787mr9.1
parent
f31edfbb97
commit
bf28749611
@ -0,0 +1,67 @@
|
|||||||
|
From: Victor Seva <vseva@sipwise.com>
|
||||||
|
Date: Fri, 4 Sep 2020 11:19:33 +0200
|
||||||
|
Subject: pv_headers: fix $x_hdr index on get
|
||||||
|
|
||||||
|
* previously we where not supporting pseudo-variables as index
|
||||||
|
---
|
||||||
|
src/modules/pv_headers/pvh_xavp.c | 35 +++++++++++++++--------------------
|
||||||
|
1 file changed, 15 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/modules/pv_headers/pvh_xavp.c b/src/modules/pv_headers/pvh_xavp.c
|
||||||
|
index ad5ba9d..7cba757 100644
|
||||||
|
--- a/src/modules/pv_headers/pvh_xavp.c
|
||||||
|
+++ b/src/modules/pv_headers/pvh_xavp.c
|
||||||
|
@@ -539,38 +539,33 @@ int pvh_get_header(struct sip_msg *msg, pv_param_t *param, pv_value_t *res)
|
||||||
|
sr_xavp_t *xavi = NULL;
|
||||||
|
sr_xval_t *xval = NULL;
|
||||||
|
pv_value_t tv;
|
||||||
|
- str hname = STR_NULL;
|
||||||
|
- int idx = 0;
|
||||||
|
+ str *hname = NULL;
|
||||||
|
+ int idx, idxf;
|
||||||
|
int cnt = 0;
|
||||||
|
|
||||||
|
- idx = param->pvi.u.ival;
|
||||||
|
+ if(pv_get_spec_name(msg, param, &tv) != 0 || (!(tv.flags & PV_VAL_STR))) {
|
||||||
|
+ LM_ERR("invalid header name, must be a string\n");
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ hname = &tv.rs;
|
||||||
|
|
||||||
|
- if(param->pvn.type == PV_NAME_PVAR) {
|
||||||
|
- if(pv_get_spec_value(msg, (pv_spec_p)(param->pvn.u.dname), &tv) != 0) {
|
||||||
|
- LM_ERR("cannot get avp value\n");
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
- if(!(tv.flags & PV_VAL_STR)) {
|
||||||
|
- return pv_get_null(msg, param, res);
|
||||||
|
- }
|
||||||
|
- hname = tv.rs;
|
||||||
|
- } else if(param->pvn.u.isname.type == AVP_NAME_STR) {
|
||||||
|
- hname = param->pvn.u.isname.name.s;
|
||||||
|
- } else {
|
||||||
|
- return pv_get_null(msg, param, res);
|
||||||
|
+ /* get the index */
|
||||||
|
+ if(pv_get_spec_index(msg, param, &idx, &idxf) != 0) {
|
||||||
|
+ LM_ERR("invalid index\n");
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(idx < 0) {
|
||||||
|
- if((xavi = pvh_xavi_get_child(msg, &xavi_name, &hname)) == NULL)
|
||||||
|
+ if((xavi = pvh_xavi_get_child(msg, &xavi_name, hname)) == NULL)
|
||||||
|
cnt = 0;
|
||||||
|
else
|
||||||
|
- cnt = xavi_count(&hname, &xavi);
|
||||||
|
+ cnt = xavi_count(hname, &xavi);
|
||||||
|
idx = idx + cnt;
|
||||||
|
if(idx < 0)
|
||||||
|
- pv_get_null(msg, param, res);
|
||||||
|
+ return pv_get_null(msg, param, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
- xval = pvh_xavi_get_value(msg, &xavi_name, &hname, idx);
|
||||||
|
+ xval = pvh_xavi_get_value(msg, &xavi_name, hname, idx);
|
||||||
|
|
||||||
|
if(xval == NULL || !xval->v.s.s)
|
||||||
|
return pv_get_null(msg, param, res);
|
||||||
Loading…
Reference in new issue