<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <tt>Hi Ben,<br>
      <br>
      <tt><tt>I see you<tt>r problem here. So, <tt>le<tt>t's exp<tt>lore
                  this:<br>
                  <tt>1) <tt>for <tt>sending the call to carrier, on
                        OpenSIPS, you do TH (w<tt>ith advertise)
                          resulting in a Contact with the public IP of
                          the SBC.<br>
                          <tt>2) also, <tt>manually add a RR header
                              with the private IP of OpenSIPS.<br>
                              <tt>3) send call to SBC, which will add
                                its own RR stuff.<br>
                                <br>
                                <tt>Now, on th<tt>e sequential request
                                    from Carrier<tt>, the RURI will co<tt>ntain
                                        the Contact of OpenSIPS (the pub
                                        IP of SBC), some R<tt>oute hdrs
                                          due the SBC and the Route we
                                          added on OpenSIPS.<br>
                                          <tt>- <tt>when<tt> request<tt>
                                                  <tt>gets<tt> to SBC,
                                                      the SBC will <tt>do
                                                        loose route,
                                                        consume its
                                                        Route h<tt>ead<tt>ers,
                                                          and <tt>it
                                                          will use the
                                                          next available
                                                          R<tt>oute w<tt>hich
                                                          points to the
                                                          pri<tt>v IP of
                                                          OpenSIPS<tt>
                                                          (and it will
                                                          not use the
                                                          public <tt>IP
                                                          in <tt>RURI
                                                          for <tt>routing)<br>
                                                          <tt>- <tt>requests
                                                          gets to
                                                          OpenSIPS,
                                                          simply
                                                          remove_hf()
                                                          and Route head<tt>ers
                                                          (<tt>do not do
                                                          any loose_r<tt>oute()
                                                          a<tt>s it is
                                                          useless) and h<tt>it
                                                          th_matching<tt>
                                                          -&gt; this
                                                          will refact<tt>or
                                                          the request <tt>(RURI,
                                                          Contact,
                                                          Route) for the
                                                          leg on the
                                                          other side
                                                          -&gt; this <tt>should
                                                          be f<tt>ine.<br>
                                                          <br>
                                                          <tt>For the
                                                          other
                                                          direction<tt>
                                                          (still sequent<tt>ial),
                                                          you <tt>do <tt>th_matching<tt>
                                                          on OpenSIPS <tt>and
                                                          not<tt>hing
                                                          more. This <tt>will
                                                          sen<tt>d a<tt>
                                                          request
                                                          holding t<tt>he
                                                          Routes due <tt>the
                                                          SBC, a <tt>Cont<tt>act
                                                          with the
                                                          public IP and
                                                          <tt>and RURI
                                                          pointing <tt>probably</tt>
                                                          to the
                                                          carrier.<br>
                                                          <br>
                                                          <tt>Shortl<tt>y
                                                          you do
                                                          standard TH,
                                                          but on
                                                          outbound
                                                          scenario, add
                                                          a fake RR
                                                          header to
                                                          trick the SBC
                                                          to route the
                                                          sequent<tt>ial
                                                          to <tt>your
                                                          OpenSIPS.</tt></tt></tt></tt><br>
                                                          <br>
                                                          </tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt>Does
                                                        <tt>it make
                                                          sense ?</tt> </tt></tt></tt></tt></tt></tt></tt><br>
                                        </tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt></tt><br>
            <br>
          </tt></tt></tt><tt>Regards,</tt><br>
    </tt>
    <pre class="moz-signature" cols="72">Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
<a class="moz-txt-link-freetext" href="http://www.opensips-solutions.com">http://www.opensips-solutions.com</a></pre>
    <div class="moz-cite-prefix">On 29.07.2016 18:05, Newlin, Ben wrote:<br>
    </div>
    <blockquote cite="mid:418CE841-BB2E-46D9-B8C3-2CD7BCDD5841@inin.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Title" content="">
      <meta name="Keywords" content="">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
        {font-family:Arial;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Courier New";
        panose-1:2 7 3 9 2 2 5 2 4 4;}
@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:12.0pt;
        font-family:Calibri;}
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;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New","serif";}
tt
        {mso-style-priority:99;
        font-family:"Courier New","serif";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Courier;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:Calibri;
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:Calibri;
        color:windowtext;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:Calibri;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
      <div class="WordSection1">
        <p class="MsoNormal"><span style="font-size:11.0pt">Here is the
            scenario:<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt">My servers
            are only listening on a private IP address. There is a
            public address on our SBC. I have a carrier that requires
            that the Contact IP address matches the public address we
            provided to them. So when I do TH on my server I have to
            also do set_advertised_address to advertise the public
            address in the Contact header. Sequential requests use the
            Contact as the Request URI and the SBC is doing RR so all
            requests will come back through it. When the SBC receives a
            sequential request it strips its Route headers and forwards
            to the Request URI (previous Contact URI). But that URI now
            points back to the SBC, so it cannot deliver the request. If
            my server could Record-Route the initial request with its
            private address, the SBC would be able to route the request
            back to it.<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt">Here is a
            trace of my scenario:
            <a moz-do-not-send="true"
              href="http://pastebin.com/x927mFtq">http://pastebin.com/x927mFtq</a>.
            I created it with SIPp so some endpoints are on the same IPs
            but with different ports. The public IP is 192.168.99.100,
            with port 7060 representing the PSTN carrier and port 5060
            the SBC. The private IP is 10.0.2.15, with port 5060 being
            the SBC again and port 6060 being my server. You can see
            that the ACK cannot be delivered correctly to my server with
            this configuration.<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt">The problem
            here stems from the fact that Topology Hiding should really
            be done at the edge of the network in order to be most
            effective. But my OpenSIPS server doesn’t sit on the Edge of
            the network, it is behind an SBC. So TH is complicated by
            the fact that my OpenSIPS has no public IP of its own and
            must advertise the public IP of the SBC instead, but future
            requests must still be routable into the private network. I
            am really using TH to hide the two ends of the call from
            each other, not to hide my internal network topology.<o:p></o:p></span></p>
        <div>
          <div>
            <p class="MsoNormal"><span
                style="font-size:10.5pt;color:black"><o:p> </o:p></span></p>
          </div>
        </div>
        <p class="MsoNormal"><span style="font-size:10.5pt;color:black">Ben
            Newlin</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
        <div style="border:none;border-top:solid #B5C4DF
          1.0pt;padding:3.0pt 0in 0in 0in">
          <p class="MsoNormal"><b><span style="color:black">From: </span></b><span
              style="color:black">Bogdan-Andrei Iancu
              <a class="moz-txt-link-rfc2396E" href="mailto:bogdan@opensips.org">&lt;bogdan@opensips.org&gt;</a><br>
              <b>Date: </b>Friday, July 29, 2016 at 8:40 AM<br>
              <b>To: </b>"Newlin, Ben" <a class="moz-txt-link-rfc2396E" href="mailto:Ben.Newlin@inin.com">&lt;Ben.Newlin@inin.com&gt;</a>,
              OpenSIPS users mailling list
              <a class="moz-txt-link-rfc2396E" href="mailto:users@lists.opensips.org">&lt;users@lists.opensips.org&gt;</a><br>
              <b>Subject: </b>Re: [OpenSIPS-Users] Record-Route and
              Dialog topology_hiding()<o:p></o:p></span></p>
        </div>
        <div>
          <p class="MsoNormal"><span style="font-family:&quot;Times New
              Roman&quot;,&quot;serif&quot;"><o:p> </o:p></span></p>
        </div>
        <div>
          <div>
            <p class="MsoNormal"><tt><span style="font-size:10.0pt">Hi
                  Ben,</span></tt><span
                style="font-size:10.0pt;font-family:&quot;Courier
                New&quot;,&quot;serif&quot;"><br>
                <br>
                <tt>Sorry to disagree, but IMHO they do exclude one each
                  other. </tt><br>
                <br>
                <tt>Adding RR to TH should not be seen as a way of
                  fixing some broken TH scenarios (with advertise).</tt><br>
                <tt>So, let me try to understand what is not working for
                  you. You do TH and advertise. In this case, normally,
                  in the Contact headers generated by OpenSIPS (as a
                  result of TH), it should be the TH interface, right ?
                  What exactly seems to be the problem ? do you have a
                  trace to show the issues ?</tt><br>
                <br>
                <tt>Regards,</tt><br>
                <br>
              </span><o:p></o:p></p>
            <pre>Bogdan-Andrei Iancu<o:p></o:p></pre>
            <pre>OpenSIPS Founder and Developer<o:p></o:p></pre>
            <pre><a moz-do-not-send="true" href="http://www.opensips-solutions.com">http://www.opensips-solutions.com</a><o:p></o:p></pre>
            <div>
              <p class="MsoNormal">On 27.07.2016 16:05, Newlin, Ben
                wrote:<o:p></o:p></p>
            </div>
            <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
              <p class="MsoNormal"><span style="font-size:11.0pt">I
                  understand that normally you would not need RR with
                  TH, but the two concepts are not mutually exclusive in
                  SIP. As I said, I have a need to Record-Route the call
                  on my server as I am advertising a different address
                  than I am listening on. This means that TH will
                  populate the Contact header with the advertised
                  address and if I cannot Record-Route with the actual
                  address then I will not receive sequential requests.</span><o:p></o:p></p>
              <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
              <div>
                <div>
                  <p class="MsoNormal"><span
                      style="font-size:10.5pt;color:black"> </span><o:p></o:p></p>
                </div>
              </div>
              <p class="MsoNormal"><span
                  style="font-size:10.5pt;color:black">Ben Newlin</span><o:p></o:p></p>
              <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
              <div style="border:none;border-top:solid #B5C4DF
                1.0pt;padding:3.0pt 0in 0in 0in">
                <p class="MsoNormal"><b><span style="color:black">From:
                    </span></b><span style="color:black">Bogdan-Andrei
                    Iancu
                    <a moz-do-not-send="true"
                      href="mailto:bogdan@opensips.org">&lt;bogdan@opensips.org&gt;</a><br>
                    <b>Date: </b>Wednesday, July 27, 2016 at 3:59 AM<br>
                    <b>To: </b>OpenSIPS users mailling list <a
                      moz-do-not-send="true"
                      href="mailto:users@lists.opensips.org">
                      &lt;users@lists.opensips.org&gt;</a>, "Newlin,
                    Ben" <a moz-do-not-send="true"
                      href="mailto:Ben.Newlin@inin.com">
                      &lt;Ben.Newlin@inin.com&gt;</a><br>
                    <b>Subject: </b>Re: [OpenSIPS-Users] Record-Route
                    and Dialog topology_hiding()</span><o:p></o:p></p>
              </div>
              <div>
                <p class="MsoNormal"><span
                    style="font-family:&quot;Times New
                    Roman&quot;,&quot;serif&quot;"> </span><o:p></o:p></p>
              </div>
              <div>
                <div>
                  <p class="MsoNormal"><tt><span
                        style="font-size:10.0pt">Hi Ben,</span></tt><span
                      style="font-size:10.0pt;font-family:&quot;Courier
                      New&quot;,&quot;serif&quot;"><br>
                      <br>
                      <tt>As I mentioned in different thread, TH is not
                        compatible with the RR mechanism. If you do TH,
                        your OpenSIPS will act as and end point (from
                        SIP perspective), so there will be no Route/RR
                        headers at all. So no need to do loose_route or
                        so. You just do TH matching for the sequential
                        requests and nothing more.</tt><br>
                      <br>
                      <tt>Regards,</tt><br>
                      <br>
                      <br>
                    </span><o:p></o:p></p>
                  <pre>Bogdan-Andrei Iancu<o:p></o:p></pre>
                  <pre>OpenSIPS Founder and Developer<o:p></o:p></pre>
                  <pre><a moz-do-not-send="true" href="http://www.opensips-solutions.com">http://www.opensips-solutions.com</a><o:p></o:p></pre>
                  <div>
                    <p class="MsoNormal">On 22.07.2016 16:48, Newlin,
                      Ben wrote:<o:p></o:p></p>
                  </div>
                  <blockquote
                    style="margin-top:5.0pt;margin-bottom:5.0pt">
                    <p class="MsoNormal"><span style="font-size:11.0pt">Hi,</span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt">I
                        am using the Dialog module with
                        topology_hiding() in my server and I have a need
                        to Record-Route the call on my server as I am
                        advertising a different address than I am
                        listening on. I have found what I believe is an
                        inconsistency in the handling of Record-Route
                        within the Dialog topology_hiding functionality.
                        The topology_hiding isn’t a true B2BUA, but it
                        does set up different parameters for the
                        incoming UAC and outgoing UAS sides of the call
                        for the Via headers, Record-Route and Route
                        headers, and the Contact header(s).</span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt">The
                        problem is that the record_route() and
                        loose_route() functions operate on different
                        sides of the call. The record_route() function
                        will only add a Record-Route header to the
                        outgoing UAS side of the call. And since the
                        record_route() function cannot be called from
                        onreply_route, but is no way to add a
                        Record-Route header to the UAC side of the call.</span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt">On
                        the other hand, the loose_route() function only
                        operates on the incoming UAC side of the call
                        and there is no way to perform loose_route() on
                        the UAS side of the call.</span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt">So
                        there is a situation where Record-Route headers
                        can only be added on the outgoing UAS side, but
                        the associated Route headers can only be removed
                        on the incoming UAC side (where they won’t exist
                        since they can’t be added) and any added headers
                        on the UAS side cannot be processed properly due
                        to the lack of loose_route.</span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt"> </span><o:p></o:p></p>
                    <p class="MsoNormal"><span style="font-size:11.0pt">I
                        can provide further information if this is
                        unclear. It should be easily reproducible by
                        attempting to use record_route in a
                        topology_hiding scenario. The route is added to
                        the outbound leg, but is not removed by
                        loose_route so the message is looped back every
                        time.</span><o:p></o:p></p>
                    <div>
                      <p class="MsoNormal"
                        style="line-height:16.8pt;background:white"><span
style="font-size:9.0pt;font-family:Arial;color:#666666"> </span><o:p></o:p></p>
                    </div>
                    <div>
                      <p class="MsoNormal"
                        style="line-height:16.8pt;background:white"><b><span
style="font-size:10.0pt;font-family:Arial;color:#155570">Ben Newlin</span></b><b><span
style="font-size:10.0pt;font-family:Arial;color:#666666"> </span></b><span
style="font-size:10.0pt;font-family:Arial;color:#666666">| Sr Voice
                          Network Engineer, PureCloud</span><o:p></o:p></p>
                    </div>
                    <div>
                      <p class="MsoNormal"
                        style="line-height:16.8pt;background:white"><span
style="font-size:10.0pt;font-family:Arial;color:#666666">phone &amp; fax
                          +1.317.957.1009 | </span><span
                          style="font-size:10.0pt;font-family:Arial;color:#0585A7"><a
                            moz-do-not-send="true"
                            href="mailto:ben.newlin@inin.com">ben.newlin@inin.com</a> </span><o:p></o:p></p>
                    </div>
                    <div>
                      <p class="MsoNormal"
                        style="line-height:16.8pt;background:white"><span
style="font-size:9.0pt;font-family:Arial;color:#666666;border:solid
                          windowtext 1.0pt;padding:0in"><img
                            moz-do-not-send="true" id="_x0000_i1025"
                            src="cid:Word%20Work%20File%20D_.jpg"
                            alt="age removed by sender." border="0"
                            height="21" width="196"></span><o:p></o:p></p>
                    </div>
                    <div>
                      <p class="MsoNormal"
                        style="line-height:12.0pt;background:white"><span
style="font-size:10.0pt;font-family:Arial;color:#0585A7"><a
                            moz-do-not-send="true"
                            href="http://www.inin.com">www.inin.com</a></span><o:p></o:p></p>
                    </div>
                    <p class="MsoNormal"> <o:p></o:p></p>
                    <p class="MsoNormal"><span
                        style="font-family:&quot;Times New
                        Roman&quot;,&quot;serif&quot;"><br>
                        <br>
                        <br>
                        <br>
                      </span><o:p></o:p></p>
                    <pre>_______________________________________________<o:p></o:p></pre>
                    <pre>Users mailing list<o:p></o:p></pre>
                    <pre><a moz-do-not-send="true" href="mailto:Users@lists.opensips.org">Users@lists.opensips.org</a><o:p></o:p></pre>
                    <pre><a moz-do-not-send="true" href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a><o:p></o:p></pre>
                  </blockquote>
                  <p class="MsoNormal"><span
                      style="font-family:&quot;Times New
                      Roman&quot;,&quot;serif&quot;"> </span><o:p></o:p></p>
                </div>
              </div>
            </blockquote>
            <p class="MsoNormal"><span style="font-family:&quot;Times
                New Roman&quot;,&quot;serif&quot;"><o:p> </o:p></span></p>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>