<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hello,</p>
<p>the problem is that the ACK doesn't have in R-URI the address
from Contact header in 200ok, as required by RFC.</p>
<p>The R-URI and the Route are both having the IP of Kamailio, so
there is no other address where to send the ACK.<br>
</p>
<p> ACK <a class="moz-txt-link-freetext" href="sip:10.15.1.30:5060">sip:10.15.1.30:5060</a> SIP/2.0<br>
*Route: <a class="moz-txt-link-freetext" href="sip:10.15.1.30;lr;ftag=SDkbo9901-42090">sip:10.15.1.30;lr;ftag=SDkbo9901-42090</a><br>
</p>
You have to track why the ACK is not coming with R-URI having the
address from Contact of 200ok. See how 200ok is received by caller
and how caller's devices sets the R-URI. Might be the sbc or other
hop breaking it.<br>
<br>
If you can't fix the device/application messing up the R-URI for the
ACK, then you can try some solutions in kamailio:<br>
<br>
1) use set_contact_alias() for 18x/200ok responses and then
handle_ruri_alias() for ACK and other requests within dialog.<br>
<br>
if(has_totag() && uri==myself && $ru=~";alias=") {<br>
handle_ruri_alias();<br>
if($du != $null) {<br>
$ru = $du;<br>
}<br>
}<br>
# continue with loose_route(), etc ...<br>
<br>
It works if the devices messes up only the host/port of the R-URI in
ACK, but keeps the other parameters.<br>
<br>
2) if 1 doesn't work, use htable to store association between
callid+from-tag and the contact address of 200ok, then use it for
requests within dialog that have uri==myself<br>
<br>
reply_route {<br>
...<br>
if(is_method("INVITE") && status=="200") {<br>
$sht(ct=>$ci::$ft) = $sel(contact.uri);<br>
}<br>
...<br>
}<br>
<br>
request_route {<br>
...<br>
if(has_totag() && uri==myself) {<br>
if($sht(ct=>$ci::$ft) != $null) {<br>
$ru = $sht(ct=>$ci::$ft);<br>
}<br>
}<br>
# continue with loose_route(), etc ...<br>
...<br>
}<br>
<br>
You have to set the auto-expire for htable ct to the maximum
lifetime for a dialog. You can delete the items from ct hash table
(or reduce their expire value) when processing the BYE or the
response to BYE. Note that for bye you have to try the combination
$ci:$ft as well as $ci:$tt<br>
<br>
3) if you have only one asterisk, then if the request has to-tag and
a route header and uri==myself, then just set $ru to <a class="moz-txt-link-freetext" href="sip:ip:port">sip:ip:port</a> of
asterisk<br>
<br>
Cheers,<br>
Daniel<br>
<br>
<div class="moz-cite-prefix">On 08/06/16 12:18, Francisco Valentin
Vinagrero wrote:<br>
</div>
<blockquote
cite="mid:D344618A4B7B0F4ABA8047A07E92D474017E0E7305@CERNXCHG52.cern.ch"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@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:0cm;
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:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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]-->
<div class="WordSection1">
<p class="MsoNormal">Hi there,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m having an issue in a SBC (ACME) ->
KAMAILIO -> Asterisk scenario with an ACK that gets ignored
in Kamailio because it does not match any transaction.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The INVITE coming from the SBC looks like
this (only relevant headers and hidden numbers for simplicity
– SBC has IP .12 , Kamailio .30 and Asterisk .34)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">INVITE
<a class="moz-txt-link-freetext" href="sip:mynumber@10.15.1.30:5060">sip:mynumber@10.15.1.30:5060</a>
SIP/2.0
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">Via: SIP/2.0/UDP
10.15.1.12:5060;branch=z9hG4bKdd1m7b00aom47rggc700.1
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">To: <a class="moz-txt-link-rfc2396E" href="sip:mynumber@10.15.1.30:5060"><sip:
mynumber@10.15.1.30:5060></a> <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">From:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12;user=phone"><sip:a-number@10.15.1.12;user=phone></a>;tag=SDkbo9901-42090 <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">P-Asserted-Identity:
<sip: a-number
@10.15.1.12>
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">Call-ID:
SDkbo9901-71a1d17456b829b4c422af61de9eee7e-ao32g50 <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">CSeq: 1
INVITE <o:p></o:p></p>
<p class="MsoNormal" style="margin-left:36.0pt">Contact:
<a class="moz-txt-link-rfc2396E" href="sip:41754112601@10.15.1.12:5060;transport=udp"><sip:41754112601@10.15.1.12:5060;transport=udp></a> <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And its forwarded to Asterisk with the
Record-Route header:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> INVITE sip: mynumber
@10.15.1.30:5060 SIP/2.0<o:p></o:p></p>
<p class="MsoNormal"> *Record-Route:
<a class="moz-txt-link-rfc2396E" href="sip:10.15.1.30;lr=on;ftag=SDkbo9901-42090"><sip:10.15.1.30;lr=on;ftag=SDkbo9901-42090></a><o:p></o:p></p>
<p class="MsoNormal"> *Via: SIP/2.0/UDP
10.15.1.30;branch=z9hG4bK1c02.7dc1b94be22d8780df5141f9ba3c5b7b.0<o:p></o:p></p>
<p class="MsoNormal"> Via: SIP/2.0/UDP
10.15.1.12:5060;branch=z9hG4bKdd1m7b00aom47rggc700.1<o:p></o:p></p>
<p class="MsoNormal"> To:
<a class="moz-txt-link-rfc2396E" href="sip:mynumber@10.15.1.30:5060"><sip:mynumber@10.15.1.30:5060></a><o:p></o:p></p>
<p class="MsoNormal"> From:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12;user=phone"><sip:a-number@10.15.1.12;user=phone></a>;tag=SDkbo9901-42090<o:p></o:p></p>
<p class="MsoNormal"> P-Asserted-Identity:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12"><sip:a-number@10.15.1.12></a><o:p></o:p></p>
<p class="MsoNormal"> Call-ID:
SDkbo9901-71a1d17456b829b4c422af61de9eee7e-ao32g50<o:p></o:p></p>
<p class="MsoNormal"> CSeq: 1 INVITE<o:p></o:p></p>
<p class="MsoNormal"><span lang="FR"> Contact:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12:5060;transport=udp"><sip:a-number@10.15.1.12:5060;transport=udp></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="FR"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="FR"><o:p> </o:p></span></p>
<p class="MsoNormal">Then, 200 OK from Asterisk:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> SIP/2.0 200 OK<o:p></o:p></p>
<p class="MsoNormal"> *Via: SIP/2.0/UDP
10.15.1.30;rport=5060;received=10.15.1.30;branch=z9hG4bK1c02.7dc1b94be22d8780df5141f9ba3c5b7b.0<o:p></o:p></p>
<p class="MsoNormal"> Via: SIP/2.0/UDP
10.15.1.12:5060;branch=z9hG4bKdd1m7b00aom47rggc700.1<o:p></o:p></p>
<p class="MsoNormal"> *Record-Route:
<a class="moz-txt-link-rfc2396E" href="sip:10.15.1.30;lr;ftag=SDkbo9901-42090"><sip:10.15.1.30;lr;ftag=SDkbo9901-42090></a><o:p></o:p></p>
<p class="MsoNormal"> Call-ID:
SDkbo9901-71a1d17456b829b4c422af61de9eee7e-ao32g50<o:p></o:p></p>
<p class="MsoNormal"> From:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12;user=phone"><sip:a-number@10.15.1.12;user=phone></a>;tag=SDkbo9901-42090<o:p></o:p></p>
<p class="MsoNormal"> To:
<a class="moz-txt-link-rfc2396E" href="sip:mynumber@10.15.1.30"><sip:mynumber@10.15.1.30></a>;tag=2e3c2071-c895-4069-afc2-37a19b20637a<o:p></o:p></p>
<p class="MsoNormal"> CSeq: 1 INVITE<o:p></o:p></p>
<p class="MsoNormal"> Server: Asterisk PBX 13.8.0<o:p></o:p></p>
<p class="MsoNormal"> Contact:
<a class="moz-txt-link-rfc2396E" href="sip:10.15.1.34:5060"><sip:10.15.1.34:5060></a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Which is sent to the SBC like this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> SIP/2.0 200 OK<o:p></o:p></p>
<p class="MsoNormal"> Via: SIP/2.0/UDP
10.15.1.12:5060;branch=z9hG4bKdd1m7b00aom47rggc700.1<o:p></o:p></p>
<p class="MsoNormal"> *Record-Route:
<a class="moz-txt-link-rfc2396E" href="sip:10.15.1.30;lr;ftag=SDkbo9901-42090"><sip:10.15.1.30;lr;ftag=SDkbo9901-42090></a><o:p></o:p></p>
<p class="MsoNormal"> Call-ID:
SDkbo9901-71a1d17456b829b4c422af61de9eee7e-ao32g50<o:p></o:p></p>
<p class="MsoNormal"> From:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12;user=phone"><sip:a-number@10.15.1.12;user=phone></a>;tag=SDkbo9901-42090<o:p></o:p></p>
<p class="MsoNormal"> To:
<a class="moz-txt-link-rfc2396E" href="sip:mynumber@10.15.1.30"><sip:mynumber@10.15.1.30></a>;tag=2e3c2071-c895-4069-afc2-37a19b20637a<o:p></o:p></p>
<p class="MsoNormal"> CSeq: 1 INVITE<o:p></o:p></p>
<p class="MsoNormal"> Server: Asterisk PBX 13.8.0<o:p></o:p></p>
<p class="MsoNormal"> Contact:
<a class="moz-txt-link-rfc2396E" href="sip:10.15.1.34:5060"><sip:10.15.1.34:5060></a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And finally the SBC sends the ACK:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> ACK <a class="moz-txt-link-freetext" href="sip:10.15.1.30:5060">sip:10.15.1.30:5060</a> SIP/2.0<o:p></o:p></p>
<p class="MsoNormal"> Via: SIP/2.0/UDP
10.15.1.12:5060;branch=z9hG4bKdt7p9k00dounet8ic600.1<o:p></o:p></p>
<p class="MsoNormal"> To:
<a class="moz-txt-link-rfc2396E" href="sip:mynumber@10.15.1.30"><sip:mynumber@10.15.1.30></a>;tag=2e3c2071-c895-4069-afc2-37a19b20637a<o:p></o:p></p>
<p class="MsoNormal"> From:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12;user=phone"><sip:a-number@10.15.1.12;user=phone></a>;tag=SDkbo9901-42090<o:p></o:p></p>
<p class="MsoNormal"> Call-ID:
SDkbo9901-71a1d17456b829b4c422af61de9eee7e-ao32g50<o:p></o:p></p>
<p class="MsoNormal"> CSeq: 1 ACK<o:p></o:p></p>
<p class="MsoNormal"><span lang="FR"> Contact:
<a class="moz-txt-link-rfc2396E" href="sip:a-number@10.15.1.12:5060;transport=udp"><sip:a-number@10.15.1.12:5060;transport=udp></a><o:p></o:p></span></p>
<p class="MsoNormal"> *Route: <a moz-do-not-send="true"
href="sip:10.15.1.30;lr;ftag=SDkbo9901-42090">
sip:10.15.1.30;lr;ftag=SDkbo9901-42090</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The problem: this ACK gets not
retransmitted to Asterisk<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">At first, I thought it was some sanity
check but after disabling that I realized that it was in the
WITHINDLG route.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For the incoming ACK I get in the logs:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Jun 8 11:56:47 tone-0866-fe-2-qa
/usr/local/sbin/kamailio[53240]: ALERT: <script>: Inside
LOOSE route for ACK proto=UDP trans=4194304
from=<a class="moz-txt-link-freetext" href="sip:00754112601@10.15.1.12;user=phone">sip:00754112601@10.15.1.12;user=phone</a>
route=<a class="moz-txt-link-freetext" href="sip:10.15.1.30;lr;ftag=SDkbo9901-42090">sip:10.15.1.30;lr;ftag=SDkbo9901-42090</a> src_ip=10.15.1.12<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And once the ACK is ready to be sent to
Asterisk, the Route header has been removed and no
Record-Route has been added so it fails.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Jun 8 11:56:44 tone-0866-fe-2-qa
/usr/local/sbin/kamailio[53238]: INFO: rr [rr_mod.c:402]:
<span style="background:yellow;mso-highlight:yellow">pv_get_route_uri_f():
No route header present.</span><o:p></o:p></p>
<p class="MsoNormal">Jun 8 11:56:44 tone-0866-fe-2-qa
/usr/local/sbin/kamailio[53238]: ALERT: <script>: ACK
does not match transaction!! proto=UDP trans=4194304
from=<a class="moz-txt-link-freetext" href="sip:00754112601@10.15.1.12;user=phone">sip:00754112601@10.15.1.12;user=phone</a> route=
src_ip=10.15.1.30<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My WITHINDLG route looks like this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Handle requests within SIP
dialogs <o:p></o:p></p>
<p class="MsoNormal">route[WITHINDLG]
{
<o:p></o:p></p>
<p class="MsoNormal"> if (has_totag())
{ <o:p></o:p></p>
<p class="MsoNormal"> # sequential request withing a
dialog
should <o:p></o:p></p>
<p class="MsoNormal"> # take the path determined by
record-routing <o:p></o:p></p>
<p class="MsoNormal"> if (loose_route())
{ <o:p></o:p></p>
<p class="MsoNormal"> if (is_method("BYE"))
{ <o:p></o:p></p>
<p class="MsoNormal"> xlog("L_ALERT","Inside
LOOSE
route\n"); <o:p></o:p></p>
<p class="MsoNormal"> setflag(FLT_ACC); # do
accounting
...
<o:p></o:p></p>
<p class="MsoNormal"> setflag(FLT_ACCFAILED); #
... even if the transaction
fails
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal"> if ( is_method("ACK") )
{ <o:p></o:p></p>
<p class="MsoNormal"> xlog("L_ALERT","<span
style="background:yellow;mso-highlight:yellow">Inside LOOSE
route for ACK</span> proto=$rP trans=$mf from=$fu
route=$route_uri src_ip=$si \n");
<o:p></o:p></p>
<p class="MsoNormal"> # ACK is forwarded
statelessy <o:p></o:p></p>
<p class="MsoNormal"> route(NATMANAGE);
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal"> route(RELAY);
<o:p></o:p></p>
<p class="MsoNormal"> } else
{ <o:p></o:p></p>
<p class="MsoNormal"> if (is_method("SUBSCRIBE")
&& uri == myself)
{ <o:p></o:p></p>
<p class="MsoNormal"> # in-dialog subscribe
requests
<o:p></o:p></p>
<p class="MsoNormal"> route(PRESENCE);
<o:p></o:p></p>
<p class="MsoNormal"> exit;
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal"> if ( is_method("ACK") )
{
<o:p></o:p></p>
<p class="MsoNormal"> if ( t_check_trans() )
{ <o:p></o:p></p>
<p class="MsoNormal"> # no loose-route, but
stateful ACK;
<o:p></o:p></p>
<p class="MsoNormal"> # must be an ACK after
a
487 <o:p></o:p></p>
<p class="MsoNormal"> # or e.g. 404 from
upstream server
<o:p></o:p></p>
<p class="MsoNormal"> t_relay();
<o:p></o:p></p>
<p class="MsoNormal"> exit;
<o:p></o:p></p>
<p class="MsoNormal"> } else
{ <o:p></o:p></p>
<p class="MsoNormal"> # ACK without matching
transaction ... ignore and
discard
<o:p></o:p></p>
<p class="MsoNormal"> xlog("L_ALERT","<span
style="background:yellow;mso-highlight:yellow">ACK does not
match transaction</span>!! proto=$rP trans=$mf from=$fu
route=$route_uri src_ip=$si \n");
<o:p></o:p></p>
<p class="MsoNormal"> exit;
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal"> sl_send_reply("404","Not
here");
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal"> exit;
<o:p></o:p></p>
<p class="MsoNormal"> }
<o:p></o:p></p>
<p class="MsoNormal">}
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks for reading this <span
style="font-family:Wingdings">
J</span> Any idea about how to validate the transaction?
t_check_trans is not being validated…<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Cheers, Francisco.<o:p></o:p></p>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:sr-users@lists.sip-router.org">sr-users@lists.sip-router.org</a>
<a class="moz-txt-link-freetext" href="http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users">http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="72">--
Daniel-Constantin Mierla
<a class="moz-txt-link-freetext" href="http://www.asipto.com">http://www.asipto.com</a> - <a class="moz-txt-link-freetext" href="http://www.kamailio.org">http://www.kamailio.org</a>
<a class="moz-txt-link-freetext" href="http://twitter.com/#!/miconda">http://twitter.com/#!/miconda</a> - <a class="moz-txt-link-freetext" href="http://www.linkedin.com/in/miconda">http://www.linkedin.com/in/miconda</a></pre>
</body>
</html>