int pv_var_to_xavp(str *varname, str *xname) { script_var_t *it; sr_xavp_t *xavp = NULL; sr_xval_t xval; LM_DBG("xname:%.*s varname:%.*s\n", xname->len, xname->s, varname->len, varname->s); // clean xavp xavp_rm_by_name(xname, 1, NULL); if(varname->len==1 && varname->s[0] == '*') { for(it=get_var_all(); it; it=it->next) { memset(&xval, 0, sizeof(sr_xval_t)); if(it->v.flags==VAR_VAL_INT) { xval.type = SR_XTYPE_INT; xval.v.i = it->v.value.n; } 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; } xavp = xavp_add_xavp_value(xname, &it->name, &xval, NULL); if(xavp==NULL) { LM_ERR("can't copy [%.*s]\n", it->name.len, it->name.s); goto error; } } } else { it = get_var_by_name(varname); if(it==NULL) { LM_ERR("script var [%.*s] not found\n", varname->len, varname->s); return -1; } memset(&xval, 0, sizeof(sr_xval_t)); if(it->v.flags==VAR_VAL_INT) { xval.type = SR_XTYPE_INT; xval.v.i = it->v.value.n; } else { xval.type = SR_XTYPE_STR; xval.v.s.s = it->v.value.s.s; xval.v.s.len = it->v.value.s.len; } xavp = xavp_add_xavp_value(xname, &it->name, &xval, NULL); if(xavp==NULL) { LM_ERR("can't copy [%.*s]\n", it->name.len, it->name.s); goto error; } } return 1; error: xavp_rm_by_name(xname, 1, NULL); return -1; }
sr_xavp_t *xbuff_new(str *name) { sr_xavp_t *xbuffs_root; sr_xavp_t *xbuff; sr_xval_t xbuff_val; memset((void*)&xbuff_val,0,sizeof(sr_xval_t)); xbuff_val.type = SR_XTYPE_NULL; xbuffs_root = xavp_get_xbuffs(); if(!xbuffs_root) { xbuff = xavp_add_xavp_value(&xbuff_list,name,&xbuff_val,xavp_get_crt_list()); } xbuff=xavp_get_child(&xbuff_list, name); if (!xbuff) { xbuff_val.type = SR_XTYPE_NULL; xbuff_val.v.xavp = NULL; xbuff=xavp_add_value(name,&xbuff_val,&xbuffs_root->val.v.xavp); } return xbuff; }