<?xml version='1.0' ?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>
<rfc ipr='full2026' docName='draft-willis-sip-path-01-a' >
    <?rfc toc='yes' ?>
    <?rfc tocompact='no' ?>
    <?rfc compact='yes' ?>
    <?rfc subcompact='yes' ?>
    <front> 
    
    <title abbrev='Path Extension Header for SIP'>
      SIP Extension for Registering Non-Adjacent Contacts
    </title>
      <author initials='D.W' surname='Willis' fullname='Dean Willis'>
	 <organization abbrev='dynamicsoft Inc.'>
	   dynamicsoft Inc.
	 </organization>
         <address>
           <postal>
	      <street>5100 Tennyson Parkway</street>
	      <street>Suite 1200</street>
	      <city>Plano</city>
	      <region>TX</region>
	      <code>75028</code>
	      <country>US</country>
	   </postal>
	   <phone>+1 972 473 5455</phone>
	   <email>dwillis@dynamicsoft.com</email>
	   <uri>http://www.dynamicsoft.com/</uri>
	</address>
    </author>
    <date month='March' year='2002' />
    <area>Transport</area>
    <workgroup>SIP -- Session Initiation Protocol Working Group</workgroup>
    <keyword>SIP</keyword>
    <keyword>Path</keyword>
    <keyword>REGISTER</keyword>
    <keyword>Contact</keyword>

    <abstract>
      <t>The REGISTER function is used in a SIP system primarily to
      associate a temporary contact address with an
      address-of-record. This contact is generally in the form of a
      URI, such as Contact: &ltsip:alice@pc33.atlanta.com&gt and is
      generally dynamic and associated with the IP address or hostname
      of the SIP UA. The problem is that network topology may be that
      there are one or more SIP proxies between the UA and the
      registrar, such that any message from the user's home network to
      the registered UA must traverse these proxies. The REGISTER
      method itself does not give us a mechanism to discover and
      record this sequence of proxies in the registrar for future
      use. This document defines an extension header, "Path" which
      provides such a mechanism.</t>
    </abstract>
</front>

<middle>


<section title='Background'>

  <t>3GPP established a requirement for discovering intermediate
  proxies during SIP registration and published this requirement in
  [3GPPReq]</t>.

   
   <t>Scenario:</t>

   <t>UA----P1-----P2-----P3------REGISTRAR</t>

   <t>UA wishes to register with REGISTRAR.  However, due to network
   topology, UA must use P1 as an "outbound proxy", and all messages
   between UA1 and REGISTRAR must also traverse P1, P2, and P3 before
   reaching REGISTRAR. Likewise, all messages between REGISTRAR UA
   must also traverse P1, P2, and P3 before reaching UA.</t>

   <t>UA has a standing relationship with REGISTRAR, which it
   considers its "Home"". How UA establishes this relationship is
   outside the scope of this document. UA discovers P1 as a result of
   a DHCP assignment or similar operation, also outside the scope of
   this document. REGISTRAR has a similar "default outbound proxy"
   relationship with P3.</t>

   <t>Eventually, REGISTRAR or a service proxy closely related to it
   will receive a message for UA. It needs to know which proxies must
   be transited by that message in order to get back to UA. In some
   cases, this information may be deducible from SIP routing
   configuration tables or from DNS entries. In other cases, such as
   that raised by 3GPP, the information is not readily available
   outside of the SIP REGISTER transacation.</t>

   <t>The proposed Path extension header allows accumulating and
   transmitting the list of proxies between UA and REGISTRAR.
   Intermediate nodes such as P1 may statefully retain Path
   information if needed by operational policy. This mechanism is in
   many ways similar to the operation of Record-Route in
   dialog-initiating messages.</t>

</section>

<section title='Applicability Statement'>

  <t>The Path mechanism is applicable whenever there are intermediate
  proxies between a SIP UA and a SIP Registrar used by that UA where the
  following conditions are true:</t>

  <list style='numbers'>

     <t>One or more of the intermediate proxies MUST be visited by
     messages between REGISTRAR and UA.</t>

     <t>The same set of intervening proxies MUST be visited by
     messages between a home service proxy and UA. That is, the proxy
     route between the UA and its home service proxy is identical to
     the proxy route between the UA and its rregistrar.</t>

     <t>The network topology is such that the intermediate proxies which
     must be visited are NOT implied by SIP routing tables, DNS, or
     similar mechanisms.</t>

  </list>
</section>

<section title='Path Header Definition and Syntax'>

   <t>The Path header is a SIP extension header with syntax very
   similar to the Record-Route header. It is used in conjunction with
   SIP REGISTER messages and with 200 OK messages in response to
   REGISTER (a REGISTER response).</t>

   <t>A Path header may inserted into a REGISTER by any SIP node
   traversed by that message. Like the Route header, sequential Path
   headers are evaluated in the sequence in which they are present in
   the message, and Path header values may be combined into compound
   Path elements in a single Path header. The registrar reflects the
   accumulated Path back into the REGISTER response, and intermediate
   nodes propagate this back toward the originating UA. The
   originating UA is therefore informed of the inclusion of nodes on
   its registered Path, and MAY use that information in other
   capacities outside the scope of this document.</t>

   <t>The primary difference between Path and Record-Route is that
   Path applies to REGISTER and responses to REGISTER. Record-Route
   doesn't, and can't be defined in REGISTER for reasons of backward
   compatinility.</t>

   <t>The syntax for Path can be given as:</t>

   <t>Path = "Path" HCOLON path-value *( COMMA path-value )</t>
   <t>path-value = name-addr *( SEMI rr-param )</t>

   <t>Note: an alternate suggestion for syntax is:</t>

   <t>Path = "Path" HCOLON 1#( name-addr *( SEMI rr-param ))</t>
   <t>rr-param = generic-param</t>

</section>

<section title='Usage of Path Header'>


<section title='Procedures at the UA'>
   
  <t> The UA executes its register operation as usual. The response
  may contain a Path header. The general operation of the UA is to
  ignore the Path header in the response. It MAY choose to display the
  contents of the Path header to the user or take other action outside
  the scope of this document.</t>

  <t>It has been suggested that the UA MAY choose to store the
  contents of the Path header for future use as a preloaded Route for
  use when the UA wishes to send a SIP message that, for reasons of
  acquiring services in the home network, need to transit the service
  proxies in the home network. Such usage is explicitly outside the
  scope of this document.</t>

</section>

<section title='Procedures at Intermediate Proxies'>

  <t>When a proxy processing a REGISTER request wishes to be on the
  path for future transmissions toward the UA originating that
  REGISTER request, the proxy inserts a URI for that proxy as the
  bottomost entry in the Path header (or inserts a new bottommost Path
  header) before proxying that request. It is also possible for a
  proxy with specific knowledge of network topology to add a Path
  header referencing another node, thereby allowing construction of a
  Path which is discongruent with the route taken by the REGISTER
  request. Such a construction is implementation specific and outside
  the scope of this document.</t>

</section>

<section title='Procedures at the Registrar'>

  <t>If a Path header exists in a sucessful REGISTER request, the
  registrar constructs an ordered list of route elements from the
  nodes listed in the Path header(s), preserving the order as
  indicated in the Path headers. The registrar then stores this route
  set in association with that contact and the adddres-of-record
  indicated in the Register request (the "binding" as defined in <xref
  target='RFC2543'>RFC 2543</xref>). The registrar copies the Path
  header list into the REGISTER response message.</t>

</section>

<section title='Procedures at the Home Proxy'>

<t>In the common SIP model, there is a home service proxy associated
with the registrar for a user. Each incoming message targeted to the
public address-of-record for the user is routed to this proxy, which
consults the registrar's database in order to determine the contact to
which the message should be retargetted. The home service proxy, in
its basic mode of operation, rewrites the request-URI from the
incoming message with the value of the registered contact and
retransmits the message.</t>

<t>With the addition of Path, the home service proxy also copies
(inverted) the route set associated with the specific contact in the
registrar database into the Route header of the outgoing message as a
preloaded route. This causes the outoing message to transit the set of
proxies that indicated that they were to be used in future messages to
that contact by including themseleves in the Path header on the
REGISTER message.</t>

</section>

<section title='Examples of Usage'>

  <t>As an example, we use the scenario from the Background section:</t>

  <t>UA----P1-----P2----P3-----REGISTRAR</t>

  <t>UA sends a REGISTER message to REGISTRAR. This message transits
  its default outbound proxy P1, an intermediate proxy P2, and the
  firewall proxy for the home domain, P3, before reaching
  REGISTRAR. Due to network topology and operational policy, P1 and
  and P3 need to be transited by messages from REGISTRAR or other nodes
  in the home network targeted to UA. P2 does not. P1 and P3 have been
  configured to include themselves in Path headers on REGISTER
  messages that they process.</t>

<figure anchor='figure_example'>
  <preamble>Message sequence for REGISTER with Path</preamble>
  <artwork><![CDATA[

 F1 Register UA -> P1
   REGISTER sip:REGISTRAR SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: UA@REGISTRAR <UA1@REGISTRAR>
   From: UA@REGISTRAR <UA@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
    . . .

 F2 Register P1 -> P2

   REGISTER sip:REGISTRAR SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   To: UA@REGISTRAR <UA@REGISTRAR>
   From: UA@REGISTAR <UA@REGISTAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>
    . . .

F3 Register P2 -> P3
   REGISTER sip:REGISTRAR SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   To: UA@REGISTRAR <UA@REGISTRAR>
   From: UA@REGISTRAR <UA1@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>
    . . .

F4 Register P3 -> REGISTRAR
   REGISTER sip:REGISTRAR SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   Via: SIP/2.0/UDP P3:5060;branch=p3wer654363
   To: UA@REGISTRAR <UA@REGISTRAR>
   From: UA@REGISTRAR <UA@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>
   Path: <sip:P3;lr>
    . . .


 F5 REGISTRAR executes Register
   P2 Stores:
   For UA1@P2
   Contact = <sip:UA1@192.0.2.4>
   Path=<sip:P1;lr>,<sip:P3;lr>

 F6 Register Response REGISTRAR -> P3
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   Via: SIP/2.0/UDP P3:5060;branch=p3wer654363
   To: UA@REGISTRAR <sip:UA@P2>
   From: UA@REGISTRAR <sip:UA@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>,<sip:P3;lr>
    . . .

 F7 Register Response P3 -> P2
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   Via: SIP/2.0/UDP P2:5060;branch=iokioukju908
   To: UA@REGISTRAR <sip:UA@REGISTRAR>
   From: UA@REGISTRAR <sip:UA@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>,<sip:P3;lr>
    . . .

 F8 Register Response P2 -> P1
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   Via: SIP/2.0/UDP P1:5060;branch=34ghi7ab04
   To: UA@REGISTRAR <sip:UA@REGISTRAR>
   From: UA@REGISTRAR <sip:UA@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>,<sip:P3;lr>
    . . .

 F9 Register Response P1 -> UA
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: UA@REGISTRAR <sip:UA@REGISTRAR>
   From: UA@REGISTRAR <sip:UA@REGISTRAR>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>,<sip:P3;lr>
    . . .

]]></artwork>
</figure>
</section>

</section>

<section title='Security Considerations'>
 
 <t>There are no security considerations for this draft beyond those
  in SIP BIS (draft-sip-rfc2543bis-07.txt). From a security
  perspective, the Path extension and its usage are identical to the
  Record-Route header of basic SIP. Note that the transparency of the
  user expectations are preserved by returning the final Path to the
  originating UA -- that is, the UA is informed which additional
  proxies have been inserted into the path for the registration
  associated with that response.</t>

</section>

<section title='IANA Considerations'>

  <t>There are no IANA considerations raised by this document.</t>

</section>


<section title='Acknowledgements'>

  <t>Min Huang and Stinson Mathai, who put together the original
  proposal in 3GPP for this mechanism, and worked most of the 3GPP
  procedures in 24.229.</t>

  <t>Keith Drage, Bill Marshall, and Miguel Angel Garcia-Martin who
  argued with everybody a lot about the idea as well as helped refine
  the requirements.</t>

  <t>Juha Heinanen, who argued steadfastly against standardizing the
  function of discovering the home service proxy with this technique
  in this document.</t>

</section>

</middle>

<back>
<references>

<reference anchor='RFC2543'>
  <front>
    <title>SIP: Session Initiation Protocol, RFC2543</title>
    <author initials='M' surname='Handley' fullname='Mark Handley'>
        </author> 
    <author initials='H' surname='Schulzrinne' fullname='Henning Schulzrinne'>
        </author>
    <author initials='E' surname='Schooler' fullname='Eve Schooler'>
        </author>
    <author initials='J' surname='Rosenberg' fullname='Jonathan Rosenberg'>
        </author>
    <date month='April' year='1999' />
  </front>
</reference>

<reference anchor='SIPbis'>
  <front>
    <title>SIP: Session Initiation Protocol 
       draft-ietf-sip-rfc2543bis-09.txt</title>
    <author initials='J' surname='Rosenberg' fullname='J. Rosenberg'>
       <organization>dynamicsoft Inc.</organization>
    </author>
    <date month='March' year='2002' />
   </front>
</reference>

<reference anchor='3GPPReq'>
 <front>
   <title>3GPP requirements On SIP, 
      draft-garcia-sipping-3GPPRequirements.txt</title>
   <author initials='MA' surname='Garcia-Martin' fullname='Miguel Angel Garcia-Martin'></author>
   <date month='March' year='2002' />
 </front>  
</reference>

</references>
</back>

</rfc>












