<?xml version='1.0' ?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd'>
<rfc ipr='full2026' docName='draft-ietf-sip-scvrtdisco-04' >
    <?rfc toc='yes' ?>
    <?rfc tocompact='no' ?>
    <?rfc compact='yes' ?>
    <?rfc subcompact='yes' ?>
    <front> 
      <title abbrev='SIP Header Field for Service Route Discovery'>
        Session Initiation Protocol Extension Header Field for Service Route Discovery During Registration
      </title>
      <author initials='D.' surname='Willis' fullname='Dean Willis'>
        <organization abbrev='dynamicsoft Inc.'>
          dynamicsoft Inc.
        </organization>
        <address>
          <postal>
            <street>3100 Independence Parkway</street>
            <street>#311-164</street>
            <city>Plano</city>
            <region>TX</region>
            <code>75075</code>
            <country>US</country>
          </postal>
          <phone>+1 972 473 5455</phone>
          <email>dean.willis@softarmor.com</email>
        </address>
      </author>

      <author initials='B.' surname='Hoeneisen' fullname='Bernie Hoeneisen'>
           <organization abbrev='Switch'>
             Switch
           </organization>
           <address>
             <postal>
                <street>Limmatquai 138</street>
                <city>CH-8001 Zuerich</city>
                <country>Switzerland</country>
             </postal>
            <phone>+41 1 268 1515</phone>
            <email>hoeneisen@switch.ch, b.hoeneisen@ieee.org</email>
             <uri>http://www.switch.ch/</uri>
          </address>
      </author>

      <date month='May' year='2003' day="13"/>
      <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>
      <keyword>service</keyword>
      <keyword>route</keyword>

      <abstract>
        <t>This document defines a SIP extension header field used in
        conjunction with responses to REGISTER requests to provide a
        mechanism by which a registrar may inform a registering 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="Terminology">  

      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
      NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described
      in <xref target ="RFC2119">RFC 2119</xref>.</t>

    </section>


    <section title='Background'>

      <t>3GPP established a requirement for discovering home proxies
      during SIP registration and published this requirement in <xref
      target='I-D.ietf-sipping-3gpp-r5-requirements'/>.  The 3GPP
      network dynamically assigns a home service proxy to each
      address-of-record (AOR). 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 (UA originated) services.</t>
 
      <t>In the inbound case, the Request-URI of incoming SIP requests
      matches the address-of-record of a user associated with
      the home service proxy. The home service proxy then (in most
      cases) forwards the request to the registered contact address
      for that AOR. A mechanism for traversing required proxies
      between the home service proxy and the registered UA is
      presented in <xref target="RFC3327"/>.</t>

      <t>Outbound (UA originated) session cases raise another issue.
      Specifically, "How does the UA know which service proxy to use
      and how to get there?"</t>

      <t>Several mechanisms were proposed in list discussions,
      including:</t>

      <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, such 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 significant additional "over the air" traffic.</t>

        <t>Use of lookup tables in the home network, as may be done
        for inbound requests in some 3G networks. 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
        (ostensibly the UA) to retransmit the request toward the
        service proxy. While this shares the database operation of the
        previous alternative, it does explicitly allow for caching the
        302 response thereby potentially reducing the frequency and
        number of database operations.</t>

        <t>Performing an operation equivalent to record-routing in a
        REGISTER transaction between the UA and the associated registrar,
        then storing that route in the UA and reusing it as a service
        route on future requests 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 field in the REGISTER response. While similar to the
        previous alternative, this approach grants the ability for the
        registrar to selectively apply knowledge about the topology of
        the home network in constructing the service route.</t>

      </list>
      </t>
   
      <t>This document defines this final alternative: returning the
      service route information as a header field in the REGISTER
      response. This new header field indicates a "preloaded route"
      that the UA may wish to use if requesting services from the
      proxy network associated with the registrar generating the
      response.</t>

      <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 (this is just an example, and other
      mechanisms besides DHCP are possible). 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 requests
      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>UAs may include a Route header field in an initial request to
      force that request to visit and potentially be serviced
      by one or more proxies. Using such a route (called a
      "service route" or "preloaded route") allows a UA to request
      services from a specific home proxy or network of proxies. The
      open question is "how may a UA discover what service route to
      use?"</t>


      <t>This document defines a header field called "Service-Route"
      which can contain a route vector that, if used as discussed
      above, will direct requests through a specific sequence of
      proxies. A registrar may use a Service-Route header field to
      inform a UA of a service route that, if used by the UA, will
      provide services from a proxy or set of proxies associated with
      that registrar. The Service-Route header field may be included
      by a registrar in the response to a REGISTER request. Consequently,
      a registering UA learns of a service route that may be used to
      request services from the system it just registered with.</t>

      <t> The routing established by the Service-Route mechanism
      applies only to requests originating in the user agent. That is,
      it applies only to UA originated requests, and not to requests
      terminated by that UA.</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 field that the registering UA may use to send requests
      through the service proxy selected by the registrar. The UA
      would use this route by inserting it as a preloaded Route header
      field in requests originated by the UA intended for routing
      through the service proxy.</t>

      <t>The mechanism by which the registrar constructs the header
      field value is specific to the local implementation and outside
      the scope of this document.</t>

    </section>
 
    <section title='Applicability Statement'>

      <t>The Service-Route mechanism is applicable when:</t>

      <t>
        <list style='numbers'>
 
          <t>The UA registers with a registrar.</t>

          <t>The registrar has knowledge of a service proxy that
          should be used by the UA when requesting services from the
          domain of the registrar. This knowledge may be a result of
          dynamic assignment or some other mechanism outside the
          scope of this document. </t>

          <t>The registrar(s) has/have sufficient knowledge of the
          network topology, policy, and situation such that a
          reasonable service route can be constructed.</t>

	  <t>The service route constructed by the registrar is the
	  same for all contacts associated with a single
	  address-of-record. This mechanism does not provide for
	  contact-specific service routes. </t>

          <t>Other mechanisms for proposing a service route to the UA
          are not available or are inappropriate for use within the
          specific environment.</t>

        </list>
      </t>

      <t> Other methods may also be available by which a UA may be
      informed of a service route. Such alternative methods are
      outside the scope of this document. Discussion of why one
      might wish to assign a service route during registration or
      when it might be appropriate to do so is outside the scope of
      this document.</t>

    </section>

    <section title='Syntax'>

      <t>The syntax for the Service-Route header field is:</t>

      <t>Service-Route = "Service-Route" HCOLON sr-value *( COMMA
      sr-value)</t>

      <t>sr-value = name-addr *( SEMI rr-param )</t>

      <t> Note that the Service-Route header field values MUST
      conform to the syntax of a Route element as defined in
      <xref target="RFC3261"/>. As suggested therein, such values MUST
      include the loose-routing indicator parameter ";lr" for full
      compliance with <xref target="RFC3261"/>.</t>

      <t>The allowable usage of header fields is described in Tables 2
      and 3 of <xref target='RFC3261'/>. The following
      additions to this table are needed for Service-Route.</t>

      <figure anchor='figureT2'>
        <preamble>Addition of Service-Route to SIP Table 3:</preamble>
        <artwork><![CDATA[

      Header field          where   proxy ACK BYE CAN INV OPT REG PRA
      _______________________________________________________________
      Service-Route        2xx      ar     -   -   -   -   -   o   -


        ]]></artwork>
      </figure>

    </section>

    <section title='Usage'>


      <section title='Procedures at the UA'>
   
        <t>The UA performs a registration as usual. The REGISTER
        response may contain a Service-Route header field. If so, the
        UA MAY store the value of the Service-Route header field in an
        association with the address-of-record for which the REGISTER
        transaction had registered a contact. If the UA supports
        multiple addresses-of-record, it may be able to store multiple
        service routes, one per address-of-record. If the UA refreshes
        the registration, the stored value of the Service-Route is
        updated according to the Service-Route header field of the
        latest 200 class response. If there is no Service-Route header
        field in the response, the UA clears any service route for
        that address-of-record previously stored by the UA. If the
        re-registration request is refused or if an existing
        registration expires and the UA chooses not to re-register,
        the UA SHOULD discard any stored service route for that
        address-of-record.
        </t>


        <t>The UA MAY choose to exercise a service route for future
        requests associated with a given address-of-record for which a
        service route is known. If so, it uses the content of the
        Service-Route header field as a preloaded Route header field
        in outgoing initial requests <xref target='RFC3261' />. The UA
        MUST preserve the order, in case there is more than one
        Service-Route header field or header field value.</t>

        <t>Loose routes may interact with routing policy in
        interesting ways. The specifics of how the service route set
        integrates with any locally required default route and local
        policy are implementation dependent. For example, some devices
        will use locally-configured explicit loose routing to reach a
        next-hop proxy, and others will use a default outbound-proxy
        routing rule. However, for the result to function, the
        combination MUST provide valid routing in the local
        environment. In general, the service route set is appended to
        any locally configured route needed to egress the access proxy
        chain. Systems designers must match the service routing policy
        of their nodes with the basic SIP routing policy in order to
        get a workable system.</t>

      </section>

      <section title='Procedures at the Proxy'>
  
        <t>The Service-Route header field is generally treated like
        any other unknown header field by intermediate proxies. They
        simply forward it on towards the destination. Note that, as
        usual, intermediate proxies that need to be traversed by
        future requests within a dialog may record-route. Proxies
        should not assume that they will be traversed by future
        requests in a dialog simply because they appear in the
        Service-Route header field.</t>

	<t>There is a question of whether proxies processing a
        REGISTER response may add themselves to the route set in the
        Service-Route header field. While this would enable dynamic
        construction of service routes, it has two significant
        problems. The first is one of transparency, as seen by the
        registrar: Intermediate proxies could add themselves without
        the knowledge or consent of the registrar. The second problem
        is interaction with end-to-end security. If the registrar uses
        S/MIME techniques to protect the REGISTER response, such
        additions would be visible to the UA as "man in the middle"
        alterations in the response. Consequently, intermediate
        proxies SHOULD NOT alter the value of Service-Route in
        REGISTER responses, and if they do, the UA MUST NOT be
        required to accept the alteration.</t>

        <t>Additional considerations apply if a proxy is "dual homed",
        meaning connected to two (or more) different networks such
        that requests are received on one interface and proxied out
        through another network interface. Proxies implementing
        multi-homing precisely as documented in <xref
        target='RFC3261'/> record-route a request with the sending
        interface. When processing the reply, they replace the
        Record-Route header field value that represents the interface
        onto which they proxied the request with a new value that
        represents the interface onto which they will proxy the
        response. Consequently, the route vector seen at the UAS is
        not the exact inverse of the route vector seen at the
        UAC. While in itself harmless, this complicates matters for
        nodes that use the recorded route vector (or recorded Path
        vector as per <xref target="RFC3327"/>) in the determination
        of a service route for future use.</t>

        <t>Instead of following the procedure in <xref
        target='RFC3261'/>, proxies used with Service-Route that are
        inserting Record-Route or Path header field values SHOULD
        record not one but two route values when processing the
        request. The first value recorded indicates the receiving
        interface, and the second indicates the sending
        interface. When processing the response, no modification of
        the recorded route is required. This optimization provides for
        fully invertible routes that can be effectively used in
        construction of service routes.</t>


      </section>

      <section title='Procedures at the Registrar'>

        <t>When a registrar receives a successful REGISTER request, it
        MAY choose to return one or more Service-Route header
        field(s) in the 200 class response.  The determination(s) of
        whether to include these header fields(s) into the 200 class
        response and what value(s) to insert are a matter of local
        policy and outside the scope of this document.</t>

        <t>Having inserted a Service-Route header field or fields,
        the registrar returns the 200 class response to the UA in
        accordance with standard procedures.</t>

        <t>A REGISTER operation performing a Fetching Bindings
        (i.e. no Contact header field is present in the request)
        SHOULD return the same value of Service-Route as returned in
        the corresponding previous REGISTER response for the
        address-of-record in question. In some cases, the
        Service-Route may be dynamically calculated by the registrar
        rather than stored, and the decision as to whether this route
        should be recalculated in the event of a Fetching Bindings
        operation is left to the implementation.</t>

        <t>
          <list style="hanging">
            <t hangText="Note:">A Fetching Bindings operation could be
            used by the UA to recover a lost value of
            Service-Route. Alternatively, a UA in this situation could
            just re-REGISTER.</t>
          </list>
        </t>

        <t>Certain network topologies MAY require a specific proxy
        (e.g. firewall proxy) to be traversed before the home service
        proxy. Thus, a registrar with specific knowledge of the
        network topology MAY return more than one Service-Route header
        field or element in the 200 class response; the order is
        specified as top-down, meaning the topmost Service-Route entry
        will be visited first. Such constructions are implementation
        specific and outside the scope of this document.</t>

        <t>In general, the Service-Route header field contains
        references to elements strictly within the administrative
        domain of the registrar and home service proxy. For example,
        consider a case where a user leaves the "home" network and
        roams into a "visited" network. The registrar cannot be
        assumed to have knowledge of the topology of the visited
        network, so the Service-Route it returns contains elements
        only within the home network.</t>

        <t>Note that the inserted Service-Route element(s) MUST
        conform to the syntax of a Route element as defined in <xref
        target='RFC3261' />. As suggested therein, such route elements
        MUST include the loose-routing indicator parameter ";lr" for
        full compliance with <xref target='RFC3261' /></t>

      </section>


      <section title="Examples of Usage">

        <t>We present an 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 user agent
          UA1 registering to HOME.EXAMPLE.COM using registrar R. R
          returns a Service-Route indicating that UA1 may use home
          service proxy HSP.HOME.EXAMPLE.COM to receive outbound
          services from HOME.EXAMPLE.COM.</t>

          <t>Please note that some header fields (e.g. Content-Length)
          and session descriptions are omitted to provide a shorter
          and hopefully more readable presentation.</t>


          <figure anchor='figureExampleRegister'>
            <preamble>Message sequence for REGISTER returning 
             Service-Route:
            </preamble>
            <artwork><![CDATA[

F1 Register UA1 -> P1

   REGISTER sip:HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKcR1ntRAp
   To: Lawyer <sip:UA1@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=981211
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
    . . .


F2 Register P1 -> P2

   REGISTER sip:HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKlJuB1mcr
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKcR1ntRAp
   To: Lawyer <sip:UA1@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=981211
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
    . . .


F3 Register P2 -> R

   REGISTER sip:HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/UDP P2.HOME.EXAMPLE.COM:5060;branch=z9hG4bKvE0R2l07o2b6T
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKlJuB1mcr
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKcR1ntRAp
   To: Lawyer <sip:UA1@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=981211
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
    . . .


F4 R executes Register

   R Stores:
   For <sip:UA1@HOME.EXAMPLE.COM>
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>


F5 R calculates Service Route

   In this example, R is statically configured to reference HSP as a
   service route, and R also knows that P2 is used as the provider
   edge proxy, so:

   Service-Route: <sip:P2.HOME.EXAMPLE.COM;lr>,<sip:HSP.HOME.EXAMPLE.COM;lr>


F6 Register Response r -> P2

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP P2.HOME.EXAMPLE.COM:5060;branch=z9hG4bKvE0R2l07o2b6T
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKlJuB1mcr
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKcR1ntRAp
   To: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=87654
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=981211
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Service-Route: <sip:P2.HOME.EXAMPLE.COM;lr>,<sip:HSP.HOME.EXAMPLE.COM;lr>
    . . .


F7 Register Response P2 -> P1

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKlJuB1mcr
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKcR1ntRAp
   To: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=87654
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=981211
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Service-Route: <sip:P2.HOME.EXAMPLE.COM;lr>,<sip:HSP.HOME.EXAMPLE.COM;lr>
    . . .


F8 Register Response P1 -> UA1

   SIP/2.0 200 OK
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKcR1ntRAp
   To: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=87654
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=981211
   Call-ID: 843817637684230@998sdasdh09
   CSeq: 1826 REGISTER
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Service-Route: <sip:P2.HOME.EXAMPLE.COM;lr>,<sip:HSP.HOME.EXAMPLE.COM;lr>
    . . .


F9 UA1 stores service route for UA1@HOME.EXAMPLE.COM

            ]]></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 arriving at UA2
          using outbound services from HOME.EXAMPLE.COM. UA1 has
          previously registered with HOME.EXAMPLE.COM and been informed
          of a service route through HSP.HOME.EXAMPLE.COM.  The service
          being provided by HOME.EXAMPLE.COM is a "logging" service,
          which provides a record of the call for UA1's use (perhaps
          the user of UA1 is an attorney who bills for calls to
          customers).</t>
 
          <t>Note that in this example UA1 and UA2 are assumed to be
          registered with the same network (HOME.EXAMPLE.COM). This
          does not generally need to be the case to use the herein
          described service route mechanism.</t>

          <figure anchor='figureExampleInvite'>
            <preamble>Message sequence for INVITE using Service-Route:
            </preamble>
            <artwork><![CDATA[

F1 Invite UA1 -> P1

   INVITE sip:UA2@HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKnashds7
   To: Customer <sip:UA2@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=456248
   Call-ID: 38615183343@s1i1l2j6u
   CSeq: 18 INVITE
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Route: <sip:P2.HOME.EXAMPLE.COM;lr>,<sip:HSP.HOME.EXAMPLE.COM;lr>
    . . .
   
   Note: P1 is selected using the "outbound proxy" rule in UA1.


F2 Invite P1 -> P2

   INVITE sip:UA2@HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bK34ghi7ab04
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKnashds7
   To: Customer <sip:UA2@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=456248
   Call-ID: 38615183343@s1i1l2j6u
   CSeq: 18 INVITE
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Record-Route: <sip:P1.VISITED.EXAMPLE.ORG;lr>
   Route: <sip:P2.HOME.EXAMPLE.COM;lr>,<sip:HSP.HOME.EXAMPLE.COM;lr>
    . . .

   Note: P1 has added itself to the Record Route.


F3 Invite P2 -> HSP

   INVITE sip:UA2@HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/UDP P2.HOME.EXAMPLE.COM:5060;branch=z9hG4bKiokioukju908
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bK34ghi7ab04
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKnashds7
   To: Customer <sip:UA2@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=456248
   Call-ID: 38615183343@s1i1l2j6u
   CSeq: 18 INVITE
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Record-Route: <sip:P2.HOME.EXAMPLE.COM;lr>
   Record-Route: <sip:P1.VISITED.EXAMPLE.ORG;lr>
   Route: <sip:HSP.HOME.EXAMPLE.COM;lr>
    . . .

   Note: HSP is selected using a DNS lookup for HSP within HOME.EXAMPLE.COM.
   P2 has added itself to the Record-Route.
   P2 has removed itself from the Route.


F4 HSP executes service

   HSP identifies the service to be executed from UA1's stored
   profile. The specifics of this are outside the scope of this
   document. For this example HSP writes a record to "Lawyer's log
   book", then looks up the AOR  "sip:UA2@HOME.EXAMPLE.COM" and discovers
   that the current contact for UA2 is at host
   UAADDR2.HOME.EXAMPLE.COM.  This will be the Request-URI of the
   next-hop INVITE.


F5 Invite HSP -> P2

   INVITE sip:UA2@UAADDR2.HOME.EXAMPLE.COM SIP/2.0
   Via: SIP/2.0/USP HSP.HOME.EXAMPLE.COM:5060;branch=z9hG4bKHSP10120323
   Via: SIP/2.0/UDP P2.HOME.EXAMPLE.COM:5060;branch=z9hG4bKiokioukju908
   Via: SIP/2.0/UDP P1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bK34ghi7ab04
   Via: SIP/2.0/UDP UADDR1.VISITED.EXAMPLE.ORG:5060;branch=z9hG4bKnashds7
   To: Customer <sip:UA2@HOME.EXAMPLE.COM>
   From: Lawyer <sip:UA1@HOME.EXAMPLE.COM>;tag=456248
   Call-ID: 38615183343@s1i1l2j6u
   CSeq: 18 INVITE
   Contact: <sip:UA1@UADDR1.VISITED.EXAMPLE.ORG>
   Record-Route: <sip:HSP.HOME.EXAMPLE.COM;lr>
   Record-Route: <sip:P2.HOME.EXAMPLE.COM;lr>
   Record-Route: <sip:P1.VISITED.EXAMPLE.ORG;lr>
    . . .

   Note: P2 selected by outbound proxy rule on HSP.
   HSP has removed itself from the Route.


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
      Service-Route returned by the registrar, or to insert a
      Service-Route even when one was not returned by the
      registrar. The consequence of such an attack is that future
      requests made by the UA using the service route might be
      diverted to or through a node other than would normally be
      visited. 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>

      <t> The "sips:" URI as defined in <xref target='RFC3261' />
      defines a mechanism by which a UA may request transport-level
      message integrity and mutual authentication. Since there is no
      requirement for proxies to modify messages, S/MIME signed bodies
      may be used to provide end-to-end protection for the returned
      value. </t>

      <t>Systems using Service-Route SHOULD provide hop-by-hop message
      integrity and mutual authentication. UAs SHOULD request this
      support by using a "sips:" URI. Registrars returning a
      Service-Route MUST implement end-to-end protection using S/MIME
      and SHOULD use S/MIME to protect all such responses.  UAs
      receiving Service-Route SHOULD authenticate attached S/MIME
      bodies if present.</t>

    </section>

    <section title='IANA Considerations'>

      <t>This document defines the SIP extension header field
      "Service-Route" which shall be included in the registry of SIP
      header fields defined in <xref target='RFC3261'/>. The change
      process for SIP, <xref target='RFC3427'/> mandates that general
      SIP extension header fields be defined by a standards-track
      RFC. This document provides the required definition.</t>


      <t>The following is the registration for the Service-Route
      header field:
      <list style='empty'>
        <t>
        <list style='hanging'>
  
          <t hangText="RFC Number:">RFCXXXX [Note to IANA: Fill in
                with the RFC number of this specification.]</t>
          <t></t>
          <t hangText="Header Field Name:">Service-Route</t>
          <t></t>
          <t hangText="Compact Form:">none</t>
          <t></t>
  
        </list>
        </t>
      </list>
      </t> 

    </section>

  </middle>

  <back>


      <references title='Normative References'>

      
        <?rfc include="reference.RFC.2026" ?>
        <?rfc include="reference.RFC.2119" ?>
        <?rfc include="reference.RFC.2223" ?>
	<?rfc include="reference.RFC.3261" ?>
        <?rfc include="reference.RFC.3327" ?>
        <?rfc include="reference.RFC.3427" ?>
      </references>

      <references title='Non-Normative References'>
        <?rfc include="reference.I-D.ietf-sipping-3gpp-r5-requirements" ?>
      </references>

  </back>

</rfc>




