mirror of https://github.com/sipwise/kamailio.git
Change-Id: I7d7b629be707066de20d3dfec5e8f375b6a72390changes/29/13629/2
parent
ad82b828b1
commit
6fd6b73361
@ -0,0 +1,129 @@
|
|||||||
|
From b7bd4beabe76b01342afb4eb84ea4a4a68863efe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Victor Seva <linuxmaniac@torreviejawireless.org>
|
||||||
|
Date: Sun, 4 Jun 2017 12:46:59 +0200
|
||||||
|
Subject: [PATCH 54/55] pv: fix pv_var_to_xavp() and pv_xavp_to_var() functions
|
||||||
|
|
||||||
|
* xavp was not properly created at pv_var_to_xavp()
|
||||||
|
* add proper xavp loop for pv_xavp_to_var()
|
||||||
|
---
|
||||||
|
modules/pv/pv_xavp.c | 54 ++++++++++++++++++++++++++++++++++------------------
|
||||||
|
1 file changed, 35 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/modules/pv/pv_xavp.c b/modules/pv/pv_xavp.c
|
||||||
|
index 28bb06ed2..d6fd83d95 100644
|
||||||
|
--- a/modules/pv/pv_xavp.c
|
||||||
|
+++ b/modules/pv/pv_xavp.c
|
||||||
|
@@ -622,7 +622,7 @@ int xavp_params_explode(str *params, str *xname)
|
||||||
|
int pv_var_to_xavp(str *varname, str *xname)
|
||||||
|
{
|
||||||
|
script_var_t *it;
|
||||||
|
- sr_xavp_t *xavp = NULL;
|
||||||
|
+ sr_xavp_t *avp = NULL;
|
||||||
|
sr_xval_t xval;
|
||||||
|
|
||||||
|
LM_DBG("xname:%.*s varname:%.*s\n", xname->len, xname->s,
|
||||||
|
@@ -638,18 +638,29 @@ int pv_var_to_xavp(str *varname, str *xname)
|
||||||
|
{
|
||||||
|
xval.type = SR_XTYPE_INT;
|
||||||
|
xval.v.i = it->v.value.n;
|
||||||
|
+ LM_DBG("[%.*s]: %d\n", it->name.len, it->name.s, xval.v.i);
|
||||||
|
} else {
|
||||||
|
if(it->v.value.s.len==0) continue;
|
||||||
|
xval.type = SR_XTYPE_STR;
|
||||||
|
xval.v.s.s = it->v.value.s.s;
|
||||||
|
xval.v.s.len = it->v.value.s.len;
|
||||||
|
+ LM_DBG("[%.*s]: '%.*s'\n", it->name.len, it->name.s,
|
||||||
|
+ xval.v.s.len, xval.v.s.s);
|
||||||
|
}
|
||||||
|
- xavp = xavp_add_xavp_value(xname, &it->name, &xval, NULL);
|
||||||
|
- if(xavp==NULL) {
|
||||||
|
+ if(xavp_add_value(&it->name, &xval, &avp)==NULL) {
|
||||||
|
LM_ERR("can't copy [%.*s]\n", it->name.len, it->name.s);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ if(avp) {
|
||||||
|
+ memset(&xval, 0, sizeof(sr_xval_t));
|
||||||
|
+ xval.type = SR_XTYPE_XAVP;
|
||||||
|
+ xval.v.xavp = avp;
|
||||||
|
+ if(xavp_add_value(xname, &xval, NULL)==NULL) {
|
||||||
|
+ LM_ERR("Can't create xavp[%.*s]\n", xname->len, xname->s);
|
||||||
|
+ goto error;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
it = get_var_by_name(varname);
|
||||||
|
@@ -662,21 +673,23 @@ int pv_var_to_xavp(str *varname, str *xname)
|
||||||
|
{
|
||||||
|
xval.type = SR_XTYPE_INT;
|
||||||
|
xval.v.i = it->v.value.n;
|
||||||
|
+ LM_DBG("[%.*s]: %d\n", it->name.len, it->name.s, xval.v.i);
|
||||||
|
} else {
|
||||||
|
xval.type = SR_XTYPE_STR;
|
||||||
|
xval.v.s.s = it->v.value.s.s;
|
||||||
|
xval.v.s.len = it->v.value.s.len;
|
||||||
|
+ LM_DBG("[%.*s]: '%.*s'\n", it->name.len, it->name.s,
|
||||||
|
+ xval.v.s.len, xval.v.s.s);
|
||||||
|
}
|
||||||
|
- xavp = xavp_add_xavp_value(xname, &it->name, &xval, NULL);
|
||||||
|
- if(xavp==NULL) {
|
||||||
|
+ if(xavp_add_xavp_value(xname, &it->name, &xval, NULL)==NULL) {
|
||||||
|
LM_ERR("can't copy [%.*s]\n", it->name.len, it->name.s);
|
||||||
|
- goto error;
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
error:
|
||||||
|
- xavp_rm_by_name(xname, 1, NULL);
|
||||||
|
+ if(avp) xavp_destroy_list(&avp);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -691,7 +704,7 @@ int pv_xavp_to_var_helper(sr_xavp_t *avp) {
|
||||||
|
flags |= VAR_VAL_STR;
|
||||||
|
value.s.len = avp->val.v.s.len;
|
||||||
|
value.s.s = avp->val.v.s.s;
|
||||||
|
- LM_DBG("var:[%.*s] STR:[%.*s]\n", avp->name.len, avp->name.s,
|
||||||
|
+ LM_DBG("var:[%.*s] STR:[%.*s]\n", avp->name.len, avp->name.s,
|
||||||
|
value.s.len, value.s.s);
|
||||||
|
}
|
||||||
|
else if(avp->val.type==SR_XTYPE_INT) {
|
||||||
|
@@ -723,18 +736,21 @@ int pv_xavp_to_var(str *xname) {
|
||||||
|
LM_ERR("%.*s not xavp type?\n", xname->len, xname->s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
- avp = xavp->val.v.xavp;
|
||||||
|
- if (avp)
|
||||||
|
- {
|
||||||
|
- if(pv_xavp_to_var_helper(avp)<0) return -1;
|
||||||
|
- avp = avp->next;
|
||||||
|
- }
|
||||||
|
+ do {
|
||||||
|
+ avp = xavp->val.v.xavp;
|
||||||
|
+ if (avp)
|
||||||
|
+ {
|
||||||
|
+ if(pv_xavp_to_var_helper(avp)<0) return -1;
|
||||||
|
+ avp = avp->next;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- while(avp)
|
||||||
|
- {
|
||||||
|
- if(pv_xavp_to_var_helper(avp)<0) return -1;
|
||||||
|
- avp = avp->next;
|
||||||
|
- }
|
||||||
|
+ while(avp)
|
||||||
|
+ {
|
||||||
|
+ if(pv_xavp_to_var_helper(avp)<0) return -1;
|
||||||
|
+ avp = avp->next;
|
||||||
|
+ }
|
||||||
|
+ xavp = xavp_get_next(xavp);
|
||||||
|
+ } while(xavp);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
--
|
||||||
|
2.11.0
|
||||||
|
|
Loading…
Reference in new issue