Juri, You say it only happens after a do_routing(). To be clear, you mean that you used do_routing on the invite and not that you already tried do_routing for the cancel earlier in the script. (I'm not sure it would make any difference)
The hack to store the destination in a variable is one you would want to strongly avoid. But sometimes hacks are unavoidable and a stop gap until you can really resolve the problem. I believe $avp's are retained per transaction and if the t_check_trans() fails then the $avp created in the reply would also not be available. $var also would not work most of the time since it is persistent per process. You would need to use core functions cache_store and cache_fetch using either local_cache or memcached backend depending if you need persistant between opensips reboot. Example: route{ ..... if (is_method("CANCEL") ) { route(5); # drop media proxy if (t_check_trans()){ # this always fails after a do_routing() xlog("L_INFO","CANCEL Transaction[$fd/$fu/$rd/$ru/$si/]\n"); t_relay(); exit; } else { if ( cache_fetch("local", "tran_dest_$ci", "$avp(s:next_hop)") ) { $rd = $avp(s:next_hop); t_relay(); } exit; } } on_reply[main] { cache_store("local", "tran_dest_$ci", "$si", 500); } Dave On Sun, Feb 13, 2011 at 5:15 AM, Tyler Merritt <ty...@fonality.com> wrote: > > Why not use an $avp and grab the Call ID header on the inbound packet and > then create some routing logic that checks the $avp against the return packet > Call ID header to validate it's the same thing? $avps can be made available > onreply with a modparam though forgive me if it's a bit late at night and I > don't have the link handy. > An avp can store more than a single value but they index in reverse order as > written if I recall correctly. > > On Sat, Feb 12, 2011 at 5:05 AM, Russell Bierschbach > <rbierschb...@telepointglobal.com> wrote: >> >> I have a similar problem, but not solution, my probably is actually >> occurring because the originating UA is ignoring a contact header that is >> sent back during a 183 progress message. OpenSIPS uses information from >> that contact header to figure out where to relay the incoming message (BYE >> in my case, CANCEL in yours). It seems like it would be possible for >> OpenSIPS to use a call-id or tag to determine where to relay the message >> though. >> >> >> >> Russell Bierschbach >> >> em: rbierschb...@telepointglobal.com, im: rbierschb...@hotmail.com >> >> >> >> From: users-boun...@lists.opensips.org >> [mailto:users-boun...@lists.opensips.org] On Behalf Of Juri Nysschen >> Sent: Friday, February 11, 2011 7:44 AM >> To: users@lists.opensips.org >> Subject: [OpenSIPS-Users] FW: CANCELs with no transaction >> >> >> >> Hi All, >> >> >> >> Need help with a nagging issue: >> >> >> >> UA->Opensips 1->Opensips 2->PSTN >> >> >> >> UA sends an invite on Opensips 1, and is routed via do_routing() to Opensips >> 2, Opensips 2 uses do_routing to get to the PSTN, call starts ringing. >> >> >> >> UA cancels call before answer, but now t_check_trans fails and the CANCEL is >> not passed onto the PSTN, with the result that the call rings forever and >> can only be terminated by the remote answering and dropping the call or >> through a timeout. >> >> >> >> The scripts on Opensips 1 & Opensips 2 is virtuall identical: >> >> >> >> How do I get the CANCEL to the PSTN ? >> >> >> >> route{ >> >> ..... >> >> if (is_method("CANCEL") ) { >> >> route(5); # drop media proxy >> >> if (t_check_trans()){ # this always fails after a do_routing() >> >> xlog("L_INFO","CANCEL >> Transaction[$fd/$fu/$rd/$ru/$si/]\n"); >> >> t_relay(); >> >> exit; >> >> }; >> >> exit; >> >> } >> >> } >> >> >> >> >> >> route[4] { >> >> xlog("L_INFO","Route4 [$fd/$fu/$rd/$ru/$si/]\n"); >> >> >> >> $avp(i:102)=1; # Default dr-group >> >> route(10); # Do custom stuff >> >> t_on_failure("4"); >> >> if (do_routing("$avp(i:102)")){ >> >> xlog("L_INFO","Route4 Route to Dyna Group: >> $avp(i:102)[$fd/$fu/$rd/$ru/$si/]\n"); >> >> t_newtran(); >> >> route(1); >> >> exit; >> >> }; >> >> xlog("L_INFO","Route4 No Route to Host[$fd/$fu/$rd/$ru/$si/]\n"); >> >> sl_reply_error(); >> >> exit; >> >> } >> >> >> >> Regards >> >> Juri Nysschen >> >> >> >> _______________________________________________ >> Users mailing list >> Users@lists.opensips.org >> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >> > > > _______________________________________________ > Users mailing list > Users@lists.opensips.org > http://lists.opensips.org/cgi-bin/mailman/listinfo/users > _______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users