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

Function tr_eval_uri

transformations.c:1119–1309  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1117static param_t* _tr_uri_params = NULL;
1118
1119int tr_eval_uri(struct sip_msg *msg, tr_param_t *tp, int subtype,
1120 pv_value_t *val)
1121{
1122 pv_value_t v;
1123 str sv;
1124 param_hooks_t phooks;
1125 param_t *pit=NULL;
1126
1127 if (!val)
1128 return -1;
1129
1130 if (val->flags & PV_VAL_NULL)
1131 return 0;
1132
1133 if((!(val->flags&PV_VAL_STR)) || val->rs.len<=0)
1134 goto error;
1135
1136 if(_tr_uri.len==0 || _tr_uri.len!=val->rs.len ||
1137 strncmp(_tr_uri.s, val->rs.s, val->rs.len)!=0)
1138 {
1139 if(val->rs.len>_tr_uri.len)
1140 {
1141 if(_tr_uri.s) pkg_free(_tr_uri.s);
1142 _tr_uri.s = (char*)pkg_malloc((val->rs.len+1)*sizeof(char));
1143 if(_tr_uri.s==NULL)
1144 {
1145 LM_ERR("no more private memory\n");
1146 if(_tr_uri_params != NULL)
1147 {
1148 free_params(_tr_uri_params);
1149 _tr_uri_params = 0;
1150 }
1151 memset(&_tr_uri, 0, sizeof(str));
1152 memset(&_tr_parsed_uri, 0, sizeof(struct sip_uri));
1153 goto error;
1154 }
1155 }
1156 _tr_uri.len = val->rs.len;
1157 memcpy(_tr_uri.s, val->rs.s, val->rs.len);
1158 _tr_uri.s[_tr_uri.len] = '\0';
1159 /* reset old values */
1160 memset(&_tr_parsed_uri, 0, sizeof(struct sip_uri));
1161 if(_tr_uri_params != NULL)
1162 {
1163 free_params(_tr_uri_params);
1164 _tr_uri_params = 0;
1165 }
1166 /* parse uri -- params only when requested */
1167 if(parse_uri(_tr_uri.s, _tr_uri.len, &_tr_parsed_uri)!=0)
1168 {
1169 LM_ERR("invalid uri [%.*s]\n", val->rs.len,
1170 val->rs.s);
1171 if(_tr_uri_params != NULL)
1172 {
1173 free_params(_tr_uri_params);
1174 _tr_uri_params = 0;
1175 }
1176 pkg_free(_tr_uri.s);

Callers

nothing calls this directly

Calls 5

free_paramsFunction · 0.85
parse_uriFunction · 0.85
parse_paramsFunction · 0.85
pv_get_spec_valueFunction · 0.85
q_memchrFunction · 0.85

Tested by

no test coverage detected