<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="NL" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hello,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I have the following setup: <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">UAC (Bria)  ------ Kamailio -------- Freeswitch<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Kamailio is used to authenticate the client using basic authentication.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Upon authentication the INVITE is sent to Freeswitch for further handling.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Kamailio stays in the path using record-route.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">At this point, the authentication and calling FS works fine.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">For now, FS just answers, plays a file and hangsup the call.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Answering the call and playing a file works fine.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">When FS hangs up the call, the BYE message is sent back to Kamailio.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The problem is the BYE message from FS contains a Route header which points to Kamailio again.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Which causes Kamailio to send the BYE message back to itself. Kamailio then replies with a 404.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The BYE is never sent to the UAC.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">When I remove the record_route() for INVITEs, the call works fine, but Kamailio isn’t kept in the signaling path.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The BYE is sent directly to the UAC.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">T 10.0.5.52:54822 -> 10.0.5.50:5060 [AP]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">BYE sip:grant@10.0.0.40:5060;transport=tcp SIP/2.0.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Via: SIP/2.0/TCP 10.0.5.52;rport;branch=z9hG4bK99X8a4Q8BFy1a.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Route: <sip:10.0.5.50;transport=tcp;lr=on>.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Max-Forwards: 70.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">From: <sip:123456789@10.0.0.40>;tag=aey7rKe7DmQte.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">To: <sip:grant@10.0.0.40>;tag=dbc9c27b.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Call-ID: NmQ4YjYyMDFkNmMwZjg0ZmU5NjQ3ODhjYzU0MDBmNGI.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">CSeq: 73909300 BYE.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">User-Agent: CM SBC.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, NOTIFY.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Supported: timer, path, replaces.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Reason: Q.850;cause=16;text="NORMAL_CLEARING".<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Content-Length: 0.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Here is the WITHINDLG route:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">route[WITHINDLG] {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                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");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                if (!has_totag()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               return;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                # Sequential request within a dialog should take the path determined by record-routing<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                if (loose_route()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               route(RELAY);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               exit;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                } else {  <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               if (is_method("ACK")) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                               if (t_check_trans()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                                               # No Loose-Route, but stateful ACK. Must be ACK after 487<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                                               route(RELAY);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                                               exit;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                               } else {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                                               # ACK without matching transaction<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                                               exit;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                               }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                               sl_send_reply("404","Not here");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                exit;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I’m using TCP as the transport.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Kamailio: 4.2.3<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Freeswitch: 1.5.15<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I’ve attached a SIP trace from the point of view of Kamailio.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">UAC: 10.0.0.40<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Kamailio: 10.0.5.50<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Freeswitch: 10.0.5.52<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">What is going on here?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">The whole Record-Route thing confuses me a lot.
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Grant<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</div>
</body>
</html>