MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / tr_eval_paramlist

Function tr_eval_paramlist

transformations.c:2180–2446  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2178static param_t* _tr_params_list = NULL;
2179
2180int tr_eval_paramlist(struct sip_msg *msg, tr_param_t *tp, int subtype,
2181 pv_value_t *val)
2182{
2183 pv_value_t v;
2184 str sv;
2185 int n, i;
2186 param_hooks_t phooks;
2187 param_t *pit=NULL;
2188
2189 if (!val)
2190 return -1;
2191
2192 if (val->flags & PV_VAL_NULL)
2193 return 0;
2194
2195 if(!(val->flags&PV_VAL_STR) || val->rs.len<=0)
2196 goto error;
2197
2198 if(_tr_params_str.len==0 || _tr_params_str.len!=val->rs.len ||
2199 strncmp(_tr_params_str.s, val->rs.s, val->rs.len)!=0)
2200 {
2201
2202 if(val->rs.len>_tr_params_str.len)
2203 {
2204 if(_tr_params_str.s) pkg_free(_tr_params_str.s);
2205 _tr_params_str.s = (char*)pkg_malloc((val->rs.len+1)*sizeof(char));
2206 if(_tr_params_str.s==NULL)
2207 {
2208 LM_ERR("no more private memory\n");
2209 memset(&_tr_params_str, 0, sizeof(str));
2210 if(_tr_params_list != NULL)
2211 {
2212 free_params(_tr_params_list);
2213 _tr_params_list = 0;
2214 }
2215 goto error;
2216 }
2217 }
2218 _tr_params_str.len = val->rs.len;
2219 memcpy(_tr_params_str.s, val->rs.s, val->rs.len);
2220 _tr_params_str.s[_tr_params_str.len] = '\0';
2221
2222 /* reset old values */
2223 if(_tr_params_list != NULL)
2224 {
2225 free_params(_tr_params_list);
2226 _tr_params_list = 0;
2227 }
2228
2229 /* parse params */
2230 sv = _tr_params_str;
2231 if (parse_params(&sv, CLASS_ANY, &phooks, &_tr_params_list)<0)
2232 goto error;
2233
2234 }
2235
2236 if(_tr_params_list==NULL)
2237 goto error;

Callers

nothing calls this directly

Calls 4

free_paramsFunction · 0.85
parse_paramsFunction · 0.85
pv_get_spec_valueFunction · 0.85
int2strFunction · 0.85

Tested by

no test coverage detected