| 2178 | static param_t* _tr_params_list = NULL; |
| 2179 | |
| 2180 | int 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; |
nothing calls this directly
no test coverage detected