<?xml version='1.0' ?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>
<rfc ipr='full2026' docName='draft-willis-sip-scvrtdisco-00' >
    <?rfc toc='yes' ?>
    <?rfc tocompact='no' ?>
    <?rfc compact='yes' ?>
    <?rfc subcompact='yes' ?>
    <front> 
    
    <title abbrev='Private SIP Ext for Service Route'>
      Private SIP Extension for Service Route Discovery in Some Networks
    </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>
    <keyword>3GPP</keyword>

    <abstract>
      <t>This document proposes a private SIP extension header used in
      conjunction with responses to REGISTER messages to provide a
      mechanism by which the registrar may inform the UA of a service
      route that the UA may use to request outbound services from the
      registrar's domain.
      </t>
    </abstract>
</front>

<middle>


<section title='Background'>

  <t>3GPP established a requirement for discovering home proxies
  during SIP registration and published this requirement in
  [3GPPReq]. Unlike many other network environments, the 3GPP network
  dynamically assigns a home service proxy to each
  address-of-record. This assignment may occur in conjunction with a
  REGISTER operation, or out-of-band as needed to support call
  services when the address-of-record has no registrations. This home
  service proxy may provide both inbound (UA terminated) and outbound
  services (UA originated).</t>.
 
  <t>The home proxy network routes inbound messages having a
  request-URI targetting the address-of-record associated with the UA
  to the assigned home service proxy by using some sort of
  look-up-mechanism outside the scope of this document. This mechanism
  deals with inbound (UA terminated) messages.</t>

   <t>Outbound (UA originated) messages raise another issue.
   Specifically, "How does the UA know which service proxy to use and
   how to get there?"</t>

   <t>Several mechanisms have been proposed in list discussions, including:</t>

   <list style='numbers'>

   <t>Configuration data in the UA. This raises questions of UA
   configuration management and updating, especially if proxy
   assignment is very dynamic as in load-balancing scenarios.</t>

   <t>Use of some other protocol, such as HTTP, to get configuration
   data from a configuration server in the home network. While
   functional, this solution requires additional protocol engines,
   firewall complexity, operations overhead, and asignificant
   additional "over the air" traffic.</t>

   <t>Use of lookup tables in the home network, as is done for inbound
   messages. This has a relatively high overhead in terms of database
   operations.</t>

   <t>Returning a 302 response indicating the service proxy as a new
   contact, causing the upstream node processing the 302
   (obstensibly the UA) to retransmit the message toward the service
   proxy. While this shares the database operation of the previous
   alternative, it does explicitly alloow for cacheing the 302
   response thereby potentially reducing the frequency and number of
   database operations.</t>

   <t>Performing an operation equivalent to record-routing a REGISTER
   message between the UA and the associated registrar, then storing
   that route in the UA and reusing it as a service route on future
   messages originating from the UA. While efficient, this constrains
   the service route for proxy operations to be congruent with the
   route taken by the REGISTER message.</t>

   <t> Returning service route information as the value of a header in
   the REGISTER response. While similar to the previous alternative,
   this approach grants the ability for the regisrtar to selectively
   apply knowledge about the topology of the home network in
   constructing the service route.</t>

   </list>
   
   This document discusses this final alternative, using a header
   in the REGISTER response to indicate a service route that the UA
   may wish to use if requesting services from the proxy network
   associated with the registrar generating the response.

   <figure anchor='scenario-1'>
     <preamble>Scenario</preamble>
     <artwork><![CDATA[

	      	   
UA1----P1-----|	   |--R-------|
	      |	   |   	      |	 
              P2---| 	     DBMS
	      |	   |	      |
UA2-----------|	   |--HSP-----|
			       

     ]]></artwork>
  </figure>

  <t>In this scenario, we have a "home network" containing routing
  proxy P2, registrar R, home service proxy HSP, and database DBMS
  used by both R and HSP. P2 represents the "edge" of the home network
  from a SIP perspective, and might be called an "edge proxy". UA1 is
  an external UA behind proxy P1. UA1 discovers P1 via DHCP. UA2 is
  another UA on the internet, and does not use a default outbound
  proxy. We do not show DNS elements in this diagram, but will assume
  their reasonable availability in the discussion.

  The mission is for UA1 to discover HSP so that outbound messages
  from UA1 may be routed (at the discretion of UA1) through HSP,
  thereby receiving outbound services from HSP.
  </t>

</section>

<section title='Discussion of Mechanism'>

  <t>The proposed mechanism uses a private header "P-ServiceRoute" in
  the REGISTER response to indicate a service route that the UA may
  wish to use if requesting services from the proxy network associated
  with the registrar generating the response.</t>

  <t>Simply put, the registrar generates a service route for the
  registering UA and returns it in the response to each successful
  REGISTER request. This service route has the form of a Route header
  that the registering UA may use to send messages through the service
  proxy selected by the registrar. The UA would use this route by 
  inserting it as a preloaded Route header in messages originated by
  the UA intended for routing through the service proxy.</t>

  <t>The mechanism by which the registrar constructs the header value
  is specific to the local implementation and outside the scope of
  this document.</t>

</section>

<section title='Applicability Statement'>

  <t>The P-ServiceRoute mechanism is applicable when:</t>

  <list style='numbers'>

    <t>The UA registers with a REGISTRAR in a given domain.</t>

    <t>The domain dynamically assigns a service proxy for the UA.</t>

    <t>The registrar(s) in the domain has/have sufficient knowledge
    of the network topology, policy, and situation such that a
    reasonable service route can be constructed.</t>

    <t>Other mechanisms for proposing a service route to the UA are
    not available or are innapropriate for use within the
    administrative domain.</t>

  </list>
</section>

<section title='Syntax'>

   <t>The syntax for the P-ServiceRoute header is:</t>

   <t>p-ServiceRoute = "P-ServiceRoute" HCOLON 1#( name-addr *( SEMI
   rr-param ))</t>

   <t>rr-param = generic-param</t>

</section>

<section title='Usage'>


<section title='Procedures at the UA'>
   
  <t>The UA performs a register as usual. The register response may
  contain a "P-ServiceRoute" header. If so, the UA MAY store the value
  of the P-ServiceRoute header in an association with the
  address-of-record for which the REGISTER message had registered a
  contact. If the UA supports multiple address of records, it may be
  able to store multiple service routes, one per address-of-record.</t>

  <t>The UA MAY choose to exercise a service route for future messages
  associated with a given address-of-record for which a service route
  is known. If so, it appends the given service route to any local
  required Route headers, and uses the result as a pre-loaded Route
  header in outgoing messages.</t>

</section>

<section title='Procedures at the Proxy'>

  <t>The P-ServiceRoute header is treated like any other unknown header by 
  intermediate proxies. They simply forward it on towards the destination.</t>

</section>

<section title='Procedures at the Registrar'>

  <t>When a registrar receives a successful REGISTER message, it MAY
  choose to return a P-ServiceRoute header in the 200 OK response. The
  determinations of whether to include this header in the and what
  value to insert are a matter of local policy and outside the scope
  of this document. Having inserted a P-ServiceRoute header, the registrar
  returns the 200 OK reponse to the UA in accordance with standard procedures.
  </t>

</section>


<section title="Examples of Usage">

  <t> We present example in the context of the scenario presented in
  the Background section earlier in this document. The network diagram
  is replicated below:
  </t>


   <figure anchor='scenario-1-repeat'>
     <preamble>Scenario</preamble>
     <artwork><![CDATA[

	      	   
UA1----P1-----|	   |--R-------|
	      |	   |   	      |	 
              P2---| 	     DBMS
	      |	   |	      |
UA2-----------|	   |--HSP-----|
			       

     ]]></artwork>
  </figure>

  <section title='Example of Mechanism in REGISTER Transaction'>
 
  <t>This example shows the message sequence for UA1 registering to
  HOMEDOMAIN using registrar R. R returns a P-ServiceRoute indicating
  that UA1 may use home servcie proxy HSP to receive outbound services
  from HOMEDOMAIN.
  </t>

<figure anchor='figure_example_register'>
  <preamble>Message sequence for REGISTER returning P-ServiceRoute:</preamble>
  <artwork><![CDATA[

 F1 Register UA1 -> P1
   REGISTER sip:HOMEDOMAIN SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: UA@HOMEDOMAIN <UA1@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
    . . .

 F2 Register P1 -> P2
   REGISTER sip:HOMEDOMAIN 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@HOMEDOMAIN <UA@HOMEDOMAIN>
   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 -> R
   REGISTER sip:HOMEDOMAIN 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@HOMEDOMAIN <UA@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   Path: <sip:P1;lr>
   Path: <sip:P3;lr>
    . . .


 F4 R executes Register
   R Stores:
   For UA1@P2
   Contact = <sip:UA1@192.0.2.4>

 F5 R calculates Service Route
   Statically configured to reference HSP as a Service Route
   P-ServiceRoute=<sip:HSP;lr>

 F6 Register Response r -> 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@HOMEDOMAIN <sip:UA@P2>
   From: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   P-ServiceRoute=<sip:HSP;lr>
    . . .

 F7 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@HOMEDOMAIN <sip:UA@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   P-ServiceRoute=<sip:HSP;lr>
    . . .

 F8 Register Response P1 -> UA
   SIP/2.0 200 OK
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>
   From: UA@HOMEDOMAIN <sip:UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA@192.0.2.4>
   P-ServiceRoute=<sip:HSP;lr>
    . . .

F9 UA stores service route for HOMEDOMAIN

]]></artwork>
</figure>


  </section>

  <section title='Example of Mechanism in INVITE Transaction'>

  <t>This example shows the message sequence for an INVITE transaction
  originating from UA1 eventually ariving at UA2 using outbound
  servcies from HOMEDOAMIN,, where UA1 has previously registered with
  HOMEDOMAIN and been informed of a service route through HSP. The
  service being provided by HOMEDOMAIN is a "speed dial" service,
  where the user's private speed dial code "Joe" is expanded to
  "sip:Joe@UA2" by the action of HSP.
  </t>

<figure anchor='figure_example_invite'>
  <preamble>Message sequence for INVITE using P-ServiceRoute:</preamble>
  <artwork><![CDATA[

 F1 INVITE UA1 -> P1
   INVITE sip:joe  SIP/2.0
   Via: SIP/2.0/UDP 192.0.2.4:5060;branch=z9hG4bKnashds7
   To: Joe <sip:joe>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Route: <sip:HSP;lr>
    . . .
   (note: P1 is selected using the "outbound proxy" rule in UA1)

 F2 INVITE P1 -> P2
   INVITE sip:joe  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: Joe <sip:joe>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Record-Route <sip:P1;lr>
   Route: <sip:HSP;lr>
    . . .
   (note: P2 is slected using a DNS lookup on the domain of HSP)


 F3 INVITE P2 -> HSP
   INVITE sip:joe  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: Joe <sip:joe>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Record-Route <sip:P1;lr>
   Record-Route <sip:P2;lr>
   Route: <sip:HSP;lr>
    . . .
   (note: HSP is slected using a DNS lookup for HSP within HOMEDOMAIN)

 F4 HSP executes service
   looks up name "sip:joe" in UA1's profile, returns "sip:joe@UA2"
   This will be request-URI of next-hop INVITE

 F5 INVITE HSP->P2
   INVITE sip:joe@UA2
   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/USP HSP:5060;branch=HSP10120323
   To: Joe <sip:joe@UA2>
   From: UA@HOMEDOMAIN <UA@HOMEDOMAIN>;tag=456248
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 18 INVITE
   Contact: <sip:UA@192.0.2.4>
   Record-Route <sip:P1;lr>
   Record-Route <sip:P2;lr>
   Record-Route <sip:HSP;lr>
    . . .
   (note: P2 selected by outbound proxy rule on HSP)

INVITE propagates toward UA2 as usual.

]]></artwork>
</figure>

  </section>


</section>

</section>

<section title='Security Considerations'>

  <t>It is possible for proxies between the UA and the registrar
  during the REGISTER transaction to modify the value of
  P-ServiceRoute returned by the registrar, or to insert a
  P-ServiceRoute even when one was not returned by the registrar. It
  is also possible for proxies on the INVITE path to execute many
  different attacks. It is therefore desirable to apply transitive
  mutual authentication using sips: or other available mechanisms in
  order to prevent such attacks.
  </t> 

</section>

<section title='IANA Considerations'>

  <t>This document defines the SIP extension header "P-ServiceRoute"
  which should be included in the registry of SIP headers defined in
  <xref target='SIPbis'>SIP</xref>.  As required by the SIP change
  process <xref target='sipchange'>draft-tsvarea-sipchange</xref> the
  SIP extension header name "ServiceRoute" should also be registered
  in association with this extension.</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>

<reference anchor='sipchange'>
 <front>
   <title>SIP Change Process
      draft-tsvarea-sipchange</title>
   <author initials='A' surname='Mankin' fullname='Allison Mankin'>
   </author> <date month='March' year='2002' />
 </front>  
</reference>

</references>
</back>

</rfc>












