[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