|
@@ -1409,6 +1409,7 @@ int tr_eval_uri(struct sip_msg *msg, tr_param_t *tp, int subtype,
|
|
|
val->rs = (_tr_parsed_uri.passwd.s)?_tr_parsed_uri.passwd:_tr_empty;
|
|
|
break;
|
|
|
case TR_URI_DURI:
|
|
|
+ case TR_URI_SAOR:
|
|
|
case TR_URI_SURI:
|
|
|
if(_tr_uri.len >= TR_BUFFER_SIZE) {
|
|
|
LM_WARN("uri too long [%.*s] (%d)\n",
|
|
@@ -1436,7 +1437,8 @@ int tr_eval_uri(struct sip_msg *msg, tr_param_t *tp, int subtype,
|
|
|
memcpy(_tr_buffer, sv.s, sv.len);
|
|
|
sv.s = _tr_buffer;
|
|
|
sv.len++;
|
|
|
- if(subtype == TR_URI_SURI && _tr_parsed_uri.user.len > 0) {
|
|
|
+ if((_tr_parsed_uri.user.len > 0)
|
|
|
+ && (subtype != TR_URI_DURI)) {
|
|
|
memcpy(sv.s + sv.len, _tr_parsed_uri.user.s,
|
|
|
_tr_parsed_uri.user.len);
|
|
|
sv.len += _tr_parsed_uri.user.len;
|
|
@@ -1448,19 +1450,21 @@ int tr_eval_uri(struct sip_msg *msg, tr_param_t *tp, int subtype,
|
|
|
_tr_parsed_uri.host.len);
|
|
|
sv.len += _tr_parsed_uri.host.len;
|
|
|
}
|
|
|
- if(_tr_parsed_uri.port.len > 0) {
|
|
|
- sv.s[sv.len] = ':';
|
|
|
- sv.len++;
|
|
|
- memcpy(sv.s + sv.len, _tr_parsed_uri.port.s,
|
|
|
- _tr_parsed_uri.port.len);
|
|
|
- sv.len += _tr_parsed_uri.port.len;
|
|
|
- }
|
|
|
- if(_tr_parsed_uri.transport_val.len > 0) {
|
|
|
- memcpy(sv.s + sv.len, ";transport=", 11);
|
|
|
- sv.len += 11;
|
|
|
- memcpy(sv.s + sv.len, _tr_parsed_uri.transport_val.s,
|
|
|
- _tr_parsed_uri.transport_val.len);
|
|
|
- sv.len += _tr_parsed_uri.transport_val.len;
|
|
|
+ if(subtype != TR_URI_SAOR) {
|
|
|
+ if(_tr_parsed_uri.port.len > 0) {
|
|
|
+ sv.s[sv.len] = ':';
|
|
|
+ sv.len++;
|
|
|
+ memcpy(sv.s + sv.len, _tr_parsed_uri.port.s,
|
|
|
+ _tr_parsed_uri.port.len);
|
|
|
+ sv.len += _tr_parsed_uri.port.len;
|
|
|
+ }
|
|
|
+ if(_tr_parsed_uri.transport_val.len > 0) {
|
|
|
+ memcpy(sv.s + sv.len, ";transport=", 11);
|
|
|
+ sv.len += 11;
|
|
|
+ memcpy(sv.s + sv.len, _tr_parsed_uri.transport_val.s,
|
|
|
+ _tr_parsed_uri.transport_val.len);
|
|
|
+ sv.len += _tr_parsed_uri.transport_val.len;
|
|
|
+ }
|
|
|
}
|
|
|
sv.s[sv.len] = '\0';
|
|
|
val->rs = sv;
|
|
@@ -2845,6 +2849,9 @@ char* tr_parse_uri(str* in, trans_t *t)
|
|
|
} else if(name.len==4 && strncasecmp(name.s, "port", 4)==0) {
|
|
|
t->subtype = TR_URI_PORT;
|
|
|
goto done;
|
|
|
+ } else if(name.len==4 && strncasecmp(name.s, "saor", 4)==0) {
|
|
|
+ t->subtype = TR_URI_SAOR;
|
|
|
+ goto done;
|
|
|
} else if(name.len==4 && strncasecmp(name.s, "suri", 4)==0) {
|
|
|
t->subtype = TR_URI_SURI;
|
|
|
goto done;
|