}
-#define verify_par_type(_par_no, _spec)\
+#define verify_par_type(_par_no, _spec, _ret) \
do{\
if( ((_par_no == 1) \
&& (_spec->type != PVT_AVP) && (_spec->type != PVT_XAVP) && \
&& (_spec->type!=PVT_RURI) && (_spec->type!=PVT_RURI_USERNAME))){\
\
LM_ERR("Unsupported Parameter TYPE[%d]\n", _spec->type);\
- return E_UNSPEC;\
+ _ret = E_UNSPEC; \
+ goto error; \
}\
}while(0);
dp_param_p dp_par= NULL;
char *p, *s=NULL;
str lstr;
+ int ret = E_INVALID_PARAMS;
if(param_no!=1 && param_no!=2)
return 0;
lstr.s = *param; lstr.len = strlen(*param);
if(str2sint(&lstr, &dpid) != 0) {
LM_ERR("bad number <%s>\n",(char *)(*param));
- pkg_free(dp_par);
- return E_CFG;
+ ret = E_CFG;
+ goto error;
}
dp_par->type = DP_VAL_INT;
lstr.s = p; lstr.len = strlen(p);
dp_par->v.sp[0] = pv_cache_get(&lstr);
if (dp_par->v.sp[0]==NULL) {
- pkg_free(dp_par);
goto error;
}
- verify_par_type(param_no, dp_par->v.sp[0]);
+ verify_par_type(param_no, dp_par->v.sp[0], ret);
dp_par->type = DP_VAL_SPEC;
}
} else {
lstr.s = p; lstr.len = strlen(p);
dp_par->v.sp[0] = pv_cache_get(&lstr);
if(dp_par->v.sp[0]==NULL) {
- pkg_free(dp_par);
goto error;
}
lstr.s = s; lstr.len = strlen(s);
dp_par->v.sp[1] = pv_cache_get(&lstr);
if (dp_par->v.sp[1]==NULL) {
- pkg_free(dp_par);
goto error;
}
- verify_par_type(param_no, dp_par->v.sp[1]);
+ verify_par_type(param_no, dp_par->v.sp[1], ret);
}
dp_par->type = DP_VAL_SPEC;
error:
LM_ERR("failed to parse param %i\n", param_no);
- return E_INVALID_PARAMS;
+ if(dp_par) pkg_free(dp_par);
+
+ return ret;
}
/**