<div dir="ltr"><div class="gmail_quote"><div dir="ltr">Hi guys, <div><br></div><div>I'm having an issue which I have narrowed down to is_first_hop(), I can apply a workaround, but I don't know if I'm doing it correctly or if my problem is caused by misconfiguration of anything.</div><div><br></div><div>Let's say we have the following flow:</div><div><br></div><div><br></div><div><br></div><div>Client (NAT) TLS -> Kamailio1 (only Public IP) UDP -> Kamailio2 <span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>(only Public IP) UDP </span>-> FreeSWITCH<span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>(only Public IP).</span></div><div><br></div><div><br></div><div>Regarding this setup, let's focus only on Kamailio1. And for the sake of a clear example, I have done a little <a href="http://draw.io" target="_blank">draw.io</a> diagram:</div><div><br></div><div><br></div><div><div><div><img src="cid:ii_jixu94741_16443e468b7a977d" width="279" height="492" style="margin-right: 0px;"><br></div><br></div><br></div><div><br></div><div><br></div><div><br></div><div>From the above flow, let's stick to the <font color="#0000ff"><b>200 OK</b></font> that Kam1 is going to receive from Kam2. (marked in <font color="#0000ff"><b>blue</b> </font>in the screenshot).</div><div><br></div><div><br></div><div><br></div><div>First 200 OK (replying to initial INVITE):<br></div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><font face="monospace, monospace">SIP/2.0 200 OK</font></div><div><font face="monospace, monospace">Via: SIP/2.0/UDP KAM1_PUB_IP;rport=5060;branch=<wbr>z9hG4bK1e2b.<wbr>e1307b519c9b5f0015343e13f35aea<wbr>ce.0;i=3</font></div><div><font face="monospace, monospace">Via: SIP/2.0/TLS [2607:fb90:489b:6e13:85f8:<wbr>596b:b86b:c831]:54744;<wbr>received=172.58.17.149;branch=<wbr>z9hG4bK.jmXSnh-7x;rpo</font></div><div><font face="monospace, monospace">=43842</font></div><div><font face="monospace, monospace">Record-Route: <sip:KAM2_PUB_IP;lr=on;ftag=<wbr>7vidaJ3Hw;did=36e.d441></font></div><div><font face="monospace, monospace">Record-Route: <sip:KAM1_PUB_IP;r2=on;lr=on;<wbr>ftag=7vidaJ3Hw;did=36e.a792;<wbr>nat=yes></font></div><div><font face="monospace, monospace">Record-Route: <sip:KAM1_PUB_FQDN:443;<wbr>transport=tls;r2=on;lr=on;<wbr>ftag=7vidaJ3Hw;did=36e.a792;<wbr>nat=yes></font></div><div><font face="monospace, monospace">From: "Joel Test 1" <sip:<wbr>8bd2a0aba14541789bb72698006464<wbr>58@MY_DOMAIN>;tag=7vidaJ3Hw</font></div><div><font face="monospace, monospace">To: "Joel Test 2" <sip:<wbr>e78f2617b0d345d3bdb7b6780ece90<wbr>3c@MY_DOMAIN>;tag=<wbr>vceg6N0m5ypHa</font></div><div><font face="monospace, monospace">Call-ID: 3ezoQGF1kp</font></div><div><font face="monospace, monospace">CSeq: 21 INVITE</font></div><div><font face="monospace, monospace">Contact: <sip:<wbr>e78f2617b0d345d3bdb7b6780ece90<wbr>3c@FS_PUB_IP:6061;transport=<wbr>udp></font></div><div><font face="monospace, monospace">User-Agent: TP MEDIA 2.0</font></div><div><font face="monospace, monospace">Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY</font></div><div><font face="monospace, monospace">Supported: timer, path, replaces</font></div><div><font face="monospace, monospace">Allow-Events: talk, hold, conference, refer</font></div><div><font face="monospace, monospace">Content-Type: application/sdp</font></div><div><font face="monospace, monospace">Content-Disposition: session</font></div><div><font face="monospace, monospace">Content-Length: 358</font></div><div><font face="monospace, monospace">Remote-Party-ID: "<wbr>e78f2617b0d345d3bdb7b6780ece90<wbr>3c" <sip:<wbr>e78f2617b0d345d3bdb7b6780ece90<wbr>3c@MY_DOMAIN>;party=calling;<wbr>privacy=off;screen=no</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">v=0</font></div><div><font face="monospace, monospace">o=TP 1529576021 1529576022 IN IP4 FS_PUB_IP</font></div><div><font face="monospace, monospace">s=TP</font></div><div><font face="monospace, monospace">c=IN IP4 FS_PUB_IP</font></div><div><font face="monospace, monospace">t=0 0</font></div><div><font face="monospace, monospace">m=audio 25484 RTP/AVP 96 101</font></div><div><font face="monospace, monospace">a=rtpmap:96 opus/48000/2</font></div><div><font face="monospace, monospace">a=fmtp:96 useinbandfec=1; maxplaybackrate=8000; sprop-maxcapturerate=8000</font></div><div><font face="monospace, monospace">a=rtpmap:101 telephone-event/48000</font></div><div><font face="monospace, monospace">a=fmtp:101 0-16</font></div><div><font face="monospace, monospace">a=silenceSupp:off - - - -</font></div><div><font face="monospace, monospace">a=ptime:20</font></div><div><font face="monospace, monospace">a=rtcp:25485 IN IP4 FS_PUB_IP</font></div></blockquote><div><br></div><div><br></div><div><br></div><div>Second 200 OK (replying to in-dialog INVITE with updated SDP):</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><div><font face="monospace, monospace">SIP/2.0 200 OK</font></div><div><font face="monospace, monospace">Via: SIP/2.0/UDP KAM1_PUB_IP;rport=5060;branch=<wbr>z9hG4bKed2b.<wbr>0006a6a159e800129a62b4415fdd64<wbr>e6.0;i=7</font></div><div><font face="monospace, monospace">Via: SIP/2.0/TLS 192.168.30.63:54752;received=<wbr>A.B.C.D;branch=z9hG4bK.<wbr>iKO2iYIgK;rport=27819</font></div><div><font face="monospace, monospace">From: "Joel Test 1" <sip:<wbr>8bd2a0aba14541789bb72698006464<wbr>58@MY_DOMAIN>;tag=7vidaJ3Hw</font></div><div><font face="monospace, monospace">To: "Joel Test 2" <sip:<wbr>e78f2617b0d345d3bdb7b6780ece90<wbr>3c@MY_DOMAIN>;tag=<wbr>vceg6N0m5ypHa</font></div><div><font face="monospace, monospace">Call-ID: 3ezoQGF1kp</font></div><div><font face="monospace, monospace">CSeq: 22 INVITE</font></div><div><font face="monospace, monospace">Contact: <sip:<wbr>e78f2617b0d345d3bdb7b6780ece90<wbr>3c@FS_PUB_IP:6061;transport=<wbr>udp></font></div><div><font face="monospace, monospace">User-Agent: TP MEDIA 2.0</font></div><div><font face="monospace, monospace">Accept: application/sdp</font></div><div><font face="monospace, monospace">Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY</font></div><div><font face="monospace, monospace">Supported: timer, path, replaces</font></div><div><font face="monospace, monospace">Content-Type: application/sdp</font></div><div><font face="monospace, monospace">Content-Disposition: session</font></div><div><font face="monospace, monospace">Content-Length: 358</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">v=0</font></div><div><font face="monospace, monospace">o=TP 1529576021 1529576022 IN IP4 FS_PUB_IP</font></div><div><font face="monospace, monospace">s=TP</font></div><div><font face="monospace, monospace">c=IN IP4 FS_PUB_IP</font></div><div><font face="monospace, monospace">t=0 0</font></div><div><font face="monospace, monospace">m=audio 25484 RTP/AVP 96 101</font></div><div><font face="monospace, monospace">a=rtpmap:96 opus/48000/2</font></div><div><font face="monospace, monospace">a=fmtp:96 useinbandfec=1; maxplaybackrate=8000; sprop-maxcapturerate=8000</font></div><div><font face="monospace, monospace">a=rtpmap:101 telephone-event/48000</font></div><div><font face="monospace, monospace">a=fmtp:101 0-16</font></div><div><font face="monospace, monospace">a=silenceSupp:off - - - -</font></div><div><font face="monospace, monospace">a=ptime:20</font></div><div><font face="monospace, monospace">a=rtcp:25485 IN IP4 FS_PUB_IP</font></div></div></div></blockquote><div><div><br></div></div><div><br></div><div><br></div><div><br></div><div>Now here comes the problem, I have the following in my kam1 config:</div><div><br></div><div><br></div><div><div><div><br></div><div><font face="monospace, monospace">route[NATMANAGE] {</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    ...</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    if (is_reply()) {</font></div><div><font face="monospace, monospace">        if (isbflagset(FLB_NATB)) {</font></div><div><font face="monospace, monospace">            if (is_first_hop()) {</font></div><div><font face="monospace, monospace">                 fix_nated_contact();</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">            }</font></div><div><font face="monospace, monospace">        }</font></div><div><font face="monospace, monospace">    }</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    ...</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">}</font></div></div></div><div><br></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">So, on the first 200 OK, when it reaches that part of the config:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">1- is_reply() -> OK</font></div><div><font face="arial, helvetica, sans-serif">2- <span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">isbflagset(FLB_NATB) -> OK (because on the initial request NAT was detected blablabla....)</span></font></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif">3- <span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">is_first_hop() -> FAIL </span></font></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">fix_nated_contact() is NOT applied.</span><br></font></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif">(This is the correct and the expected behavior).</font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif">Now, on the second 200 OK, again in that part of the config:</font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">1- is_reply() -> OK</font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">2-<span> </span><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">isbflagset(FLB_NATB) -> OK</span></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif">3-<span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">is_first_hop() -> OK </span></font></span></div><div style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></div><div style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif">fix_nated_contact() is applied, thus the contact will be changed, and the client will send the ACK with incorrect information leading to another set of issues...</font></span></span></span></div><div style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div style="text-decoration-style:initial;text-decoration-color:initial"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><font face="arial, helvetica, sans-serif"><br></font></span></span></span></div><div style="text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="text-decoration-style:initial;text-decoration-color:initial">From the docs: <a href="https://www.kamailio.org/docs/modules/5.1.x/modules/siputils.html#siputils.f.is_first_hop" target="_blank">https://www.kamailio.<wbr>org/docs/modules/5.1.x/<wbr>modules/siputils.html#<wbr>siputils.f.is_first_hop</a></div><div style="text-decoration-style:initial;text-decoration-color:initial"><br></div></span></span></span></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div><i>4.30.  is_first_hop()</i></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div><i>The function returns true if the proxy is first hop after the original sender. For incoming SIP requests, it means there is only one Via header. <b>For incoming SIP replies, it means that top Record-Route URI is 'myself' and source address is not matching it </b>(to avoid detecting in case of local loops). Note that it does not detect spirals, which can have the condition for replies true also in the case of additional SIP reply receival.</i></div></div></span></span></span></div></blockquote><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">So going back to the examples:</font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">first 200 OK:</font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">1- "top Record-Route URI is 'myself' -> FAIL</font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">So we we are NOT the first hop, we do nothing and forward the reply to the client.</font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">second 200 OK:</font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif">1- "top Record-Route URI is 'myself' -> No record-route headers are present, so we enter the is_first_hop() condition and modify the contact with fix_nated_contact(). </font></div><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><br></font></div><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial"><br></div><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial">Now to the real topic, I have a workaround as:</div><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial"><br></div></font></div></span></span></span></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">...</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">if (is_reply()) {</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">    if (isbflagset(FLB_NATB)) {</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">        if (is_first_hop()) {</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">            <font color="#ff0000">if (!ds_is_from_list()) {</font> <font color="#0000ff"># <-- Check to see if the reply is coming from our internal servers</font></font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><span style="font-family:monospace,monospace">                fix_nated_contact();</span><br></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">           <font color="#ff0000"> }</font></font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">        }</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">    }</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">}</font></div></div></div></span></span></span></div><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><div style="font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><font face="monospace, monospace">...</font></div></div></div></span></span></span></div></blockquote><div><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span style="font-size:small;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div style="text-decoration-style:initial;text-decoration-color:initial"><font face="arial, helvetica, sans-serif"><div style="font-family:arial,sans-serif;font-size:small;text-decoration-style:initial;text-decoration-color:initial"><div><br></div><div><br></div><div><br></div><div>And that is working correctly, but I would like to understand the reasons.</div><div><br></div><div><br></div><div>I hope I have explained myself correctly, otherwise it's impossible to get to the point of my questions:</div><div><br></div><div>1- Is it correct for is_first_hop() to detect the second 200 OK as a first hop when it isn't? the behavior matches the documentation, so I don't know. If we stick to the check of the headers etc etc, it's working as described, if we stick to the concept of kam1 being actually being the first hop of that 200OK, then the check would need another condition to exclude the 200 OK (or better, the replies) of an in-dialog INVITE. </div><div><br></div><div>2- Do you guys consider the workaround something reasonable? Under my opinion I would like to not have to add that, but I also don't know.</div><div><br></div><div>3- Am I missing something super standard that avoids all of this? I'm starting to go crazy trying and comparing different things to get to understand this and I want to make sure it's not just a is_first_hop() bug?</div><div><br></div><div><br></div><div>Sorry for such a long email, but I think that describing the scenario and flow was required.</div><div><br></div><div>Any input is more than welcome!</div><div><br></div><div><br></div><div>Thanks!</div><span class="HOEnZb"><font color="#888888"><div>Joel.</div><div><br></div><div><br></div><div><br></div><div><br></div></font></span></div></font></div></span></span></span></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div></div>
</div><br></div>