[SR-Users] BYE not forwarded

Grant Bagdasarian gb at cm.nl
Wed Apr 8 13:13:34 CEST 2015


Hello,

I have the following setup:

UAC (Bria)  ------ Kamailio -------- Freeswitch

Kamailio is used to authenticate the client using basic authentication.
Upon authentication the INVITE is sent to Freeswitch for further handling.
Kamailio stays in the path using record-route.

At this point, the authentication and calling FS works fine.
For now, FS just answers, plays a file and hangsup the call.
Answering the call and playing a file works fine.
When FS hangs up the call, the BYE message is sent back to Kamailio.

The problem is the BYE message from FS contains a Route header which points to Kamailio again.
Which causes Kamailio to send the BYE message back to itself. Kamailio then replies with a 404.
The BYE is never sent to the UAC.

When I remove the record_route() for INVITEs, the call works fine, but Kamailio isn't kept in the signaling path.
The BYE is sent directly to the UAC.

T 10.0.5.52:54822 -> 10.0.5.50:5060 [AP]
BYE sip:grant at 10.0.0.40:5060;transport=tcp SIP/2.0.
Via: SIP/2.0/TCP 10.0.5.52;rport;branch=z9hG4bK99X8a4Q8BFy1a.
Route: <sip:10.0.5.50;transport=tcp;lr=on>.
Max-Forwards: 70.
From: <sip:123456789 at 10.0.0.40>;tag=aey7rKe7DmQte.
To: <sip:grant at 10.0.0.40>;tag=dbc9c27b.
Call-ID: NmQ4YjYyMDFkNmMwZjg0ZmU5NjQ3ODhjYzU0MDBmNGI.
CSeq: 73909300 BYE.
User-Agent: CM SBC.
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, NOTIFY.
Supported: timer, path, replaces.
Reason: Q.850;cause=16;text="NORMAL_CLEARING".
Content-Length: 0.

Here is the WITHINDLG route:

route[WITHINDLG] {
                xlog("L_INFO", "[R-ROUTE-WITHINDLG:$ci] !>" "Route:WITHINDLG;UnixTime:$TV(un);RequestURI:$rU;RequestMethod:$rm;FromTag:$ft;ToTag:$tt;CallID:$ci;From:$fU;To:$rU\r\n");

                if (!has_totag()) {
                               return;
                }

                # Sequential request within a dialog should take the path determined by record-routing
                if (loose_route()) {
                               route(RELAY);
                               exit;
                } else {
                               if (is_method("ACK")) {
                                               if (t_check_trans()) {
                                                               # No Loose-Route, but stateful ACK. Must be ACK after 487
                                                               route(RELAY);
                                                               exit;
                                               } else {
                                                               # ACK without matching transaction
                                                               exit;
                                               }
                               }
                               sl_send_reply("404","Not here");
                }
                exit;
}

I'm using TCP as the transport.
Kamailio: 4.2.3
Freeswitch: 1.5.15


I've attached a SIP trace from the point of view of Kamailio.
UAC: 10.0.0.40
Kamailio: 10.0.5.50
Freeswitch: 10.0.5.52

What is going on here?
The whole Record-Route thing confuses me a lot.

Regards,

Grant

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150408/7f99d8ae/attachment.html>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: sip_trace_bye.txt
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20150408/7f99d8ae/attachment.txt>


More information about the sr-users mailing list