[SR-Users] Problem with CANCEL handling
Mordechay Kaganer
mkaganer at gmail.com
Tue Jun 17 12:57:19 CEST 2014
B.H.
On Mon, Jun 16, 2014 at 5:38 PM, Mordechay Kaganer <mkaganer at gmail.com>
wrote:
> B.H.
>
> Hello, all!
>
> I'm trying to set up kamailio as a simple load balancer proxy between PSTN
> gateway and a cluster of asterisk servers - rather common use case IMHO.
> I'm completely new to kamailio.
>
> I have started with the default kamailio.cfg that comes with Ubuntu
> package and added the dispatcher module as described in the docs (
> http://www.kamailio.org/docs/modules/4.0.x/modules/dispatcher.html).
>
> At the end, i got this up and running, but with one exception: if incoming
> call is not answered by the asterisk end (i.e. it is in ringing state), and
> then the gateway sends CANCEL request, kamailio is unable to recognize the
> transaction and is not forwarding the request to asterisk. The result is:
> the call is left "dangling" in the PBX and is not properly hang up.
>
> When the gateway sends CANCEL to kamailio, i get the following log
> messages:
> 4(25442) DEBUG: tm [t_lookup.c:769]: t_lookupOriginalT(): DEBUG:
> t_lookupOriginalT: searching on hash entry 31287
> 4(25442) DEBUG: tm [t_lookup.c:492]: matching_3261(): DEBUG: RFC3261
> transaction matching failed
> 4(25442) DEBUG: tm [t_lookup.c:859]: t_lookupOriginalT(): DEBUG:
> t_lookupOriginalT: no CANCEL matching found!
> 4(25442) DEBUG: tm [t_lookup.c:861]: t_lookupOriginalT(): DEBUG:
> t_lookupOriginalT completed
> 4(25442) DEBUG: tm [tm.c:1039]: w_t_lookup_cancel(): lookup_original:
> t_lookupOriginalT returned: (nil)
> 4(25442) ERROR: *** cfgtrace: c=[/etc/kamailio/kamailio.cfg] l=485 a=25
> n=xdbg
> 4(25442) DEBUG: <script>: is_method(CANCEL): t_check_trans()==false
> 4(25442) ERROR: *** cfgtrace: c=[/etc/kamailio/kamailio.cfg] l=487 a=2
> n=exit
>
> The relevant script snippet is standard from the distro package:
> # CANCEL processing
> if (is_method("CANCEL"))
> {
> xdbg("is_method(CANCEL): entry");
> if (t_check_trans()) {
> xdbg("is_method(CANCEL): t_check_trans()==true");
> route(RELAY);
> } else {
> xdbg("is_method(CANCEL): t_check_trans()==false");
> }
> exit;
> }
>
> How can i fix this?
>
Finally, i have found the source of the problem:
route[DISPATCH] {
if(!ds_select_domain("1", "5"))
{
send_reply("404", "No destination");
exit;
}
xlog("L_NOTICE", "--- DISPATCH: going to <$ru> via <$du>\n");
# forward();
# exit();
route(RELAY);
}
By advice from some blog, i have put only forward(); exit(); instead of
route(RELAY). This broke the transaction tracking.
With route(RELAY) everything works perfectly.
>
> Thanks!
>
> --
> משיח NOW!
> Moshiach is coming very soon, prepare yourself!
> יחי אדוננו מורינו ורבינו מלך המשיח לעולם ועד!
>
--
משיח NOW!
Moshiach is coming very soon, prepare yourself!
יחי אדוננו מורינו ורבינו מלך המשיח לעולם ועד!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140617/2bf47c3b/attachment.html>
More information about the sr-users
mailing list