<div dir="ltr">Interesting!  I'm now storing $ct.fields(uri) before fix_nated_contact() and it's working better, but it's revealed a new problem.<div><br></div><div>The registered contact of a user is "sip:+12162454107@192.168.201.123:4135;rinstance=946433DE".  When I place a call from that user, its INVITE's Contact is "<a href="http://sip:+12162454107@192.168.201.123:4135">sip:+12162454107@192.168.201.123:4135</a>".  is_contact_registered() fails.  Is that caused by the lack of the rinstance param, or something else?</div><div><br></div><div><br></div><div>- Jeff</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 7, 2020 at 3:11 PM Liviu Chircu <<a href="mailto:liviu@opensips.org">liviu@opensips.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <div>On 07.10.2020 21:15, Jeff Pyle wrote:<br>
    </div>
    <blockquote type="cite">
      <div>At call time:</div>
      <div><br>
      </div>
      <div>  $ct = <<a href="mailto:sip%3A%2B12162450000@192.168.0.91" target="_blank">sip:+12162450000@192.168.0.91</a>> <br>
      </div>
      <div>  $ct.fields(uri) = sip:+12162450000@[PUBLIC_IP]:8490<br>
      </div>
      <div><br>
      </div>
      <div>Am I expecting the wrong thing?</div>
    </blockquote>
    <p><tt>Absolutely not.  You actually discovered an interesting,
        wacky effect of fix_nated_contact(), which does an in-place
        replacement of the private Contact with the public IP that has
        sourced the INVITE.  However, the original header pointers and
        data still stay unchanged (!!), hence why each variable now
        returns different pieces of data...<br>
      </tt></p>
    <p><tt>To mitigate this effect, just make a backup of that
        $ct.fields(uri) value earlier in the INVITE processing, before
        calling fix_nated_contact().</tt><br>
    </p>
    <blockquote type="cite">
      <div><br>
      </div>
      <div>The only difference between $ct and the registered Contact is
        that $ct is wrapped in <>.  I wrote a nasty regex to strip
        the <> characters and it works with
        is_contact_registered(), at least from this phone. </div>
      <div><tt><br>
        </tt></div>
    </blockquote>
    <p><tt>Probably $(ct{nameaddr.uri}) would have gotten the job done
        as well, however I'm not so sure it's equipped to ignore Contact
        header field parameters -- which makes the regexp-based approach
        more solid.</tt></p>
    <pre cols="72">-- 
Liviu Chircu
<a href="http://www.twitter.com/liviuchircu" target="_blank">www.twitter.com/liviuchircu</a> | <a href="http://www.opensips-solutions.com" target="_blank">www.opensips-solutions.com</a></pre>
  </div>

_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opensips.org" target="_blank">Users@lists.opensips.org</a><br>
<a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users" rel="noreferrer" target="_blank">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><br>
</blockquote></div>