[OpenSIPS-Users] Problem with prefix() during call forwarding

Bogdan-Andrei Iancu bogdan at voice-system.ro
Sun Nov 15 20:42:25 CET 2009


Hi Andrew,

Noticed you fixed the problem, but here are some ideas/questions:

1) what version on opensips do you use?

2) keep in mind that all the changes you do before creating the 
transaction (which is typically done by the first t_relay()) are 
inherited by all the following branched (you create via failure route). 
If you want to do changes to affect only a specific branch, you should 
use the onbranch route (see 
http://www.opensips.org/Resources/DocsCoreRoutes#toc2)

Regards,
Bogdan

Andrew Pogrebennyk wrote:
> Hi,
> I'm trying to put together some configuration for unconditional call 
> forwarding. The carrier requires me to send the call with prefix "400" 
> in R-URI. Here are the relevant routes:
>
> route[6]
> {
>          if(avp_db_load("$ru/username","$avp(s:callfwd)")) {
>                  avp_pushto("$ru", "$avp(s:callfwd)");
>                  xlog("L_INFO", "forwarded to: $avp(s:callfwd)");
>                  avp_delete("$avp(s:callfwd)");
>                  $avp(i:25) = 20;
>          }
>          route(7);
> }
>
> route[7]
> {
> 	prefix("400");
> 	rewritehost("XX.YY.ZZ.WW");
> 	t_on_failure("2");
> 	xlog("L_INFO", "Request leaving server, D-URI='$du' - M=$rm RURI=$ru 
> F=$fu T=$tu IP=$si ID=$ci\n");
> 	t_relay("XX.YY.ZZ.WW:5060");
> 	exit;
> }
>
> failure_route[2]
> {
>          # forward on busy
>          if(t_check_status("(486)|(408)") && avp_pushto("$ru", 
> "$avp(s:callfwd)")) {
>                  append_branch();
>                  xlog("forwarded on $T_reply_code to: $avp(s:callfwd)");
>                  avp_pushto("$du", "$avp(s:callfwd)");
>                  avp_delete("$avp(s:callfwd)");
>                  $avp(i:25) = 20;
>                  route(7);
>          }
> }
>
> The problem is that while the call is sent to the first call forward 
> destination correctly (with prefix 400 in R-URI), it goes to the next 
> destination (triggered from failure_route) without the prefix in R-URI! 
> There are the following messages in the log file:
>
> Nov 12 21:12:00 sip2 /usr/local/sbin/openser[52971]: forwarded on 408
> to: sip:89151793786 at XX.YY.ZZ.WW
> Nov 12 21:12:00 sip2 /usr/local/sbin/openser[52971]:  1 avps were removed
> Nov 12 21:12:00 sip2 /usr/local/sbin/openser[52971]:
> DBG:core:pv_get_dsturi: no destination URI
> Nov 12 21:12:00 sip2 /usr/local/sbin/openser[52971]: Request leaving
> server, D-URI='<null>' - M=INVITE RURI=sip:40089151793786 at XX.YY.ZZ.WW
> F=sip:84957978105 at XX.YY.ZZ.WW T=sip:4953801234 at AA.BB.CC.DD
> IP=XX.YY.ZZ.WW ID=470BED43-CECE11DE-B158F4A9-DA974BBF at XX.YY.ZZ.WW
>
>
> Despite R-URI appears with 400, it is sent without the prefix as I've 
> confirmed by the trace.
>
> That "no destination URI" line looked suspicious to me, in fact I would 
> expect that prefix() handles destination URI as well. I thought that 
> could be the case so I've added explicit "$du = $ru;" after prefix and 
> rewritehost. D-URI looks fine now, but it is still sent on the wire 
> without 400:
>
> ov 12 21:59:29 sip2 /usr/local/sbin/openser[53183]: forwarded on 408 to: 
> sip:89165438934 at XX.YY.ZZ.WW
> Nov 12 21:59:29 sip2 /usr/local/sbin/openser[53183]: 
> DBG:avpops:ops_pushto_avp: 1 avps were processed
> Nov 12 21:59:29 sip2 /usr/local/sbin/openser[53183]:  1 avps were removed
> Nov 12 21:59:29 sip2 /usr/local/sbin/openser[53183]: Request leaving 
> server, D-URI='sip:40089165438934 at XX.YY.ZZ.WW' - M=INVITE 
> RURI=sip:40089165438934 at XX.YY.ZZ.WW F=sip:84957978105 at XX.YY.ZZ.WW 
> T=sip:4953801234 at AA.BB.CC.DD IP=XX.YY.ZZ.WW 
> ID=E9C3FA8B-CED411DE-B59EF4A9-DA974BBF at XX.YY.ZZ.WW
>
> What is the problem?
>
>   




More information about the Users mailing list