[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