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@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@10.0.0.40>;tag=aey7rKe7DmQte.
To: <sip:grant@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