Internet Engineering Task Force                       Sriram Parameswar
Internet Draft                                            Brian Stucker
                                                        Nortel Networks
                                                            August 2001
                                                  Expires February 2002
                                      <draft-spbs-sip-negotiate-00.txt>



                        The SIP Negotiate Method

Status of this Memo

     This document is an Internet-Draft and is in full conformance
     with all provisions of Section 10 of RFC2026.

     Internet-Drafts are working documents of the Internet Engineering
     Task Force (IETF), its areas, and its working groups. Note that
     other groups may also distribute working documents as
     Internet-Drafts.

     Internet-Drafts are draft documents valid for a maximum of six
     months and may be updated, replaced, or obsoleted by other
     documents at any time. It is inappropriate to use Internet-Drafts
     as reference material or cite them other than as "work in
     progress".

     The list of current Internet-Drafts can be accessed at
     http://www.ietf.org/ietf/lid-abstracts.txt

     The list of Internet-Draft Shadow Directories can be accessed at
     http://www.ietf.org/shadow.html

     This document is an individual submission to the IETF. Comments
     should be directed to the authors.

Abstract
     There is a need to negotiate a multitude of parameters, settings,
     and algorithms when setting up sessions using Session Initiated
     Protocol (SIP). While SIP itself provides mechanisms for
     negotiation of these parameters on a per-session basis through the
     use of the INVITE method, it does not provide a ready mechanism
     for meta-session negotiation. The closest mechanism provided is
     the REGISTER method, however, this method is directed towards the
     registrar alone, and cannot be used to conduct negotiation of
     parameters between any two arbitrary SIP nodes.

     Examples of parameters that may need to be negotiated (and thus,
     the ready impetus for providing a simple mechanism to handle this)
     include: compression algorithms, code book size, message integrity
     mechanisms, encryption algorithms, etc. Many of these parameters
     are not always eligible for use in an INVITE method, for two
     reasons:




Parameswar, Stucker                                            [Page 1]


Internet Draft      The SIP Negotiate Method                August 2001


       - The INVITE method describes the parameters for initiation of
         a particular session. Once the session is over, the negotiated
         settings (such as the RTP profile used, in the case of SDP)
         are invalidated for future re-use. It would be inefficient to
         have to renegotiate parameters that are the same from session
         to session, or have to transmit large quantities of
         persistent data (such as a code book) each time.

       - Many meta-session applications (and therefore their attendant
         negotiable parameters) are best utilized if they can be
         applied for the first message of a session.
         An example of this would be header compression. If the INVITE
         were compressed, then the header that identifies the type of
         compression in use would also be compressed, and therefore
         unintelligible (assuming no shim mechanism).

     This document seeks to solve these problems by introducing a SIP
     extension that allows for meta-session parameters to be negotiated
     in a generic manner. This negotiation would take place prior to
     session establishment, between any two SIP entities
     (User Agents, Proxies etc.).




1 Terminology

     In this document, the key words "MUST", "MUST NOT", "REQUIRED",
    "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
     and "OPTIONAL" are to be interpreted as described in RFC 2119 [1]
     and indicate requirement levels for compliant SIP guidelines

2 Introduction

     SIP sets up multimedia sessions between User Agents. Given the
     complexity of these sessions, and the variety of User Agents and
     their capabilities, there are several session parameters that need
     to be pre-defined or negotiated prior to establishing these
     sessions.

     There is a real need to have a generic mechanism that will help
     negotiate these parameters a-priori. The initial goal was to
     establish a generic approach to negotiation, which would be
     applicable across all protocols used in the Internet world. Given
     the difficulty in coming up with a sufficiently generic approach
     that would be acceptable, the authors decided to attack a more
     immediate problem in the SIP arena and establish a generic
     negotiation mechanism.

     This draft does not describe an extension which may be used



Parameswar, Stucker                                            [Page 2]


Internet Draft      The SIP Negotiate Method                August 2001


     directly; it must be extended by other drafts by defining
     payloads (preferably XML based) to perform the actual negotiation.

     The result of the negotiation is a key that will be used in
     subsequent transactions to maintain negotiation state. This key is
     carried either as a shim i.e. between the transport and
     application layers (SIP and UDP for example) or as a SIP header
     (Key) in further SIP messages.

     This new method may be used in both end-to-end and hop-by-hop
     scenarios.

2.1. Overview of Operation

     In general the network entity that needs to negotiate meta-session
     parameters sends a NEGOTIATE with the payload indicating the
     offered parameters/algorithms.
     The NEGOTIATE follows the offer-answer model as described in
     section B.1 of [bis-04], the entity that offers the parameters
     must be willing and able to support all parameters in the offer.
     The offer is placed in a NEGOTIATE payload. The offer may be
     accepted or rejected, in case the offer is accepted the answer
     is returned in the payload of a 200 OK. In case of a rejection a
     488 or 606 is returned.

        UAC                 UAS
         |-----NEGOTIATE---->|     Make an offer on one or more session
         |                   |     parameters. Negotiate carries Key.
         |                   |
         |<-------200--------|     Accept offer and key. Key used to
         |                   |     maintain negotiation state.
         |                   |
         |---INVITE(etc.)--->|     Session establishment with
         |                   |     negotiated parameters and key.


     Negotiations expire and must be refreshed in exactly the same
     manner as registrations (see RFC 2543 [1] ).

3.0 NEGOTIATE Method

     "NEGOTIATE" is added to the definition of the element "Method" in
     the SIP message grammar.

     The NEGOTIATE method is used to set up session parameters and
     algorithms prior to session establishment.

     As with other methods the NEGOTIATE method name is case sensitive.

     This document specifies the named extension 'negotiate'.



Parameswar, Stucker                                            [Page 3]


Internet Draft      The SIP Negotiate Method                August 2001


     This feature name is placed in the Proxy-Require, Require,
     Supported or Proxy-Supported header in requests; and the Require,
     Supported, Unsupported or Proxy-Supported header in responses.


     NOTE: The Proxy-Supported header is still under consideration.
     Further releases of this document will incorporate/delete headers
     as required.

          Header                    Where    NEGOTIATE
          ------                    -----    ---------
          Accept                      R       o
          Accept-Encoding             R       o
          Accept-Language             R       o
          Allow                       g       o
          Authorization               R       o
          Call-ID                    gc       m
          Contact                     R       m
          Contact                    1xx      -
          Contact                    2xx      m
          Contact                    3xx      -
          Contact                    4xx      -
          Contact                    5xx      -
          Contact                    6xx      -
          Content-Encoding            e       o
          Content-Length              e       o
          Content-Type                e       *
          CSeq                       gc       m
          Date                        g       o
          Encryption                  g       o
          Expires                     g       o
          From                       gc       m
          Hide                        R       o
          Max-Forwards                R       o
          Organization                g       o
          Priority                    R       o
          Proxy-Authenticate         407      o
          Proxy-Authorization         R       o
          Proxy-Require               R       o
          Proxy-Supported             g       o
          Require                     R       o
          Retry-After                 R       -
          Retry-After            404,480,486  o
          Retry-After                503      o
          Retry-After              600,603    o
          Response-Key                R       o
          Record-Route                R       o
          Route                       R       -

          Table 1 Summary of header fields, A-R



Parameswar, Stucker                                            [Page 4]


Internet Draft      The SIP Negotiate Method                August 2001


          Header                    Where    NEGOTIATE
          ------                    -----    ---------
          Server                      r       o
          Subject                     R       o
          Supported                   g       o
          Timestamp                   g       o
          To                        gc(1)     m
          Unsupported                420      o
          User-Agent                  g       o
          Via                       gc(2)     m
          Warning                     r       o
          WWW-Authenticate           401      o

          Table 2 Summary of header fields, S-Z

3.1 Header Field Support for NEGOTIATE Method

     Tables 1 and 2 add a column to tables 4 and 5 in the [rfc2543].
     Refer to Section 6 of [1] for a description of the content of the
     tables.  Note that the rules defined in the enc. and e-e columns
     in tables 4 and 5 in [1] also apply to use of the headers in the
     NEGOTIATE request and responses to the NEGOTIATE request.



3.2 Responses to the NEGOTIATE Request Method

     If a server receives an NEGOTIATE request it MUST send a final
     response.

     A 200 OK response MUST be sent by a UAS for an NEGOTIATE request
     that is successful. The 200 OK MUST carry the key sent in the
     original NEGOTIATE (see section 6.0) that is used to maintain
     negotiation state.



4.0 New Headers

     This table expands on tables 4 and 5 in RFC 2543 [1], by adding
     support for the SUBSCRIBE, NOTIFY and NEGOTIATE.

     Header field    where  proxy ACK BYE CAN INV OPT REG SUB NOT NEG
     ----------------------------------------------------------------
     Key               g           o   o   o   o   o   o   o   o   m








Parameswar, Stucker                                            [Page 5]


Internet Draft      The SIP Negotiate Method                August 2001


4.1 "Key" header

     The following header is defined for the purposes of this
     specification.

     Key             =  [( "Key" | "y" )
                        (":" key-format)
                        ("=" key-param)]
     key-param       =  1*( alphanum)
     key-format      =  ( "Header" | "Key32" | "Key8" )

     Examples:

         Key: Header=ab45c6d2811e4681

         y: Key32=1e6f9a33

         Key: Key8=2c

4.1.1 Semantics of the Key Header

     The role of the Key header is critical to creating a meta-session
     parameter sets that reflect the outcome of negotiations between
     various end-points. It is used to identify the resultant set of
     parameters stored at the endpoints after a completed negotiation.

     Because SIP does not provide a generic, non-registration, method
     of referring to parameters that are kept and used across multiple
     sessions; identification of these parameters is requires an
     extension to the existing SIP specification in order to work under
     all circumstances. This becomes especially important when
     parameters cause the general headers of the SIP message to be
     unintelligible prior to some type of decoding (ie. decompression,
     decryption, etc.).

     Additionally, it may be important that a SIP message is routable
     without exposing the entire contents of the message itself. This
     was identified in SIP. However this requirement may need to take
     a back seat to other considerations, for example bandwidth
     efficiency concerns, where the contents of the entire message may
     not be intelligible. As you can see, this becomes very tricky to
     identify which set of meta-session parameters to use to handle any
     given message between two endpoints.

     As a result, we offer two mechanisms in order to provide a means
     by which to transport the Key information: header format, and
     shim format. The key is always transported in header format, as
     a normal, general SIP header when present in a NEGOTIATE method
     transaction. Thereafter, it may be transported in either format
     as indicated by in the original NEGOTIATE method.



Parameswar, Stucker                                            [Page 6]


Internet Draft      The SIP Negotiate Method                August 2001


     The key8 is an 8 bit Key and the key32 is a 32 bit Key, and either
     maybe transported in a subsequent shim structure. The shims are
     carried between the transport protocol (UDP, SCTP etc.) and SIP.
     The use of the shim allows the entire SIP message to be treated in
     the negotiated manner for example: the entire message may be
     encrypted or compressed. The shim allows for the recipient to
     perform the requisite decoding based on the negotiated algorithm.

     Shims work well when they are negotiated hop-by-hop. However,
     there exists a need to transit through a proxy and expose only
     enough information for it to route on the message. In such
     situations the header format is used. The header format places the
     Key in clear text in a SIP message with any other pertinent
     information required by a proxy in the clear. Thus end-to-end
     negotiations may be performed in networks with intervening proxy
     hops.


5.0 Key Generation

     Keys must be relatively unique, and therefore must be generated
     using an algorithm with distinct enough inputs to ensure that a
     1-to-1 relationship exists between any single endpoint and the key
     that maps to that endpoint. Keys are also symmetric. Meaning that
     both endpoints use the same key value to describe the other
     endpoint.

     One way of ensuring this is to use an MD5 hash of values pertaining
     to both the parties of a NEGOTIATE message. This could then be used
     in the case that the key is transported in a header, or distilled
     to an acceptable size for the shim in use. In order to provide a
     consistent means of generating keys, implementations SHOULD use
     the following algorithm:

          The TO URL, FROM URL, Call-ID value, and Via Branch value (if
          no branch is present, then an alphanumeric 0 should be used
          instead) should be converted to upper case, with all
          whitespace removed, and then concatenated together to form a
          single string. This string should have the MD5 hash algorithm
          applied to it, to create the negotiated key. This is the key
          that is transported as part of the NEGOTIATE message.

          The same callid should NOT be reused between two given
          endpoints when sending NEGOTIATEs, in order to reduce the
          likelihood that the same MD5 hash is generated. If an endpoint
          receives a NEGOTIATE with a key value that already exists,
          it should reject the request (with 400 "Bad Request" or
          409 "Conflict").






Parameswar, Stucker                                             [Page 7]


Internet Draft      The SIP Negotiate Method                 August 2001


          Example:

               NEGOTIATE sip:broker@example.com SIP/2.0
               Via: SIP/2.0/UDP client.example.com:5060
               From: Endpoint <sip:user@client.example.com>;tag=88a7s
               To: sip:broker@example.com
               Call-ID: 3248543@client.example.com
               CSeq: 1 NEGOTIATE
               Content-Type: application/xpidf+xml
               Content-Length: 120
               ...

               Starter String fed in MD5:

                  SIP:BROKER@EXAMPLE.COMENDPOINT<SIP:USER@CLIENT.EXAMPLE
                  .COM>;TAG=88A7S3248543@CLIENT.EXAMPLE.COM0

               MD5 Key output (representation):

               ab45c6d2811e4681f23513

5.1 Conversion to Key8

     When Key8 is used, the negotiated key must be distilled into an
     8-bit value in order to fit into the shim properly (thus the term
     Key8). This may be done by selecting the 8 most significant bits
     of the negotiated key. Note, that this format should only be used
     between a VERY small set of user agents, as the potential for key
     collision, and subsequent need to recalculate a new callid, and
     therefore a new key to try the negotiation again, increases.

5.2 Conversion to Key32

     When Key32 is used, the negotiated key must be distilled into a
     32-bit value in order to fit into the shim properly (thus the term
     Key32). This may be done by selecting the 32 most significant bits
     of the negotiated key (in network byte format). In practice a
     random 32 bit number is likely to yield similar results.

6.0 Key Transport

6.1 Key Transport By Header

      When the Key has been setup to be transported via a general
      header, both endpoints continue to send a valid, clear-text, SIP
      start line followed immediately by the Key header, which is also
      sent as clear text. More of the headers of the message may be in
      the clear, but at a minimum these two MUST be readable.





Parameswar, Stucker                                             [Page 8]


Internet Draft      The SIP Negotiate Method                 August 2001


      This is done so that intermediary proxies may still be able to
      route the request based off of the request URI in the start line,
      and still be able to maintain some semblance of context by using
      the Key header itself. Since the message data may not be readable
      to such proxies, it should use the Key header alone to keep track
      of context. This will likely not give enough information for the
      proxy to be able to operate if it is call-stated, in which case a
      hop-by-hop negotiation should be used so the proxy is able to
      operate more completely. Note, that since only the Key header
      form of transport has a notion of endpoint context, that the shim
      should not be used to keep context alone.

      It is recommended to allow the same headers used in the
      construction of a key (TO, FROM, CALLID, and the top VIA), plus
      the CSEQ to be in the clear in addition to the fields above if an
      intermediate proxy is used. This is due to the fact that the key
      is only sufficient to keep context in terms of a single
      request/response pair, and is very limited in that regard for use
      at a proxy.

      When meta-session parameters which exhibit hop-by-hop nature are
      to be supported - it is strongly recommended that intermediate
      proxies insert themselves into the NEGOTIATE request process
      (acting like a back-to-back UA) in order to ensure that all
      requirements of the proxy are satisfied regardless of the
      meta-session settings. This would require proxies to be
      cognizant of the NEGOTIATE method and its payload.

6.2 Key Transport By Shim

      The key, as stated before, may be sent as part of a shim to the
      SIP protocol. This is offered in order to help minimize the
      overhead to the message itself, particularly for environments
      where every byte counts, and heavy compression is desirable.
      This format also allows the entire message to have the meta-
      session parameters applied to it, which can be useful in cases
      where encryption is desired and all of the headers of the SIP
      message must be included.

      Additionally, keys must be prepended by a start byte. This is so
      a key is not confused with a normal start character for any given
      sip message. As a result, the top 6 bits of the first byte are
      zeroed out so that no valid ASCII character may result, and the
      shim can be detected by way of an illegal character.

6.2.1 Key32 Shim Format

      The following shows the format of the Key32 shim (in which the
      32-bit key is prepended by a shim start byte). Note that this
      format is what is actually placed in all messages post-negotiation



Parameswar, Stucker                                             [Page 9]


Internet Draft      The SIP Negotiate Method                 August 2001


      i.e. 32-bit key with start byte.

      Byte 0: (MSB->LSB) [0000 00XY]

      X = Version bit: Should always be set to zero (0)
      Y = Shim Format: 0 = Key32, 1 = Key8.

      Byte 1..4 (key)

      Example:
            0:0000 0000
            1:1010 1011
            2:0100 0101
            3:1100 0110
            4:1101 0010

            Would be the 5 byte Shim32 representation of the key:

            ab45c6d2

6.2.2 Key8 Format

      The following shows the format of the Key8 shim (in which the
      8-bit key is prepended by a shim start byte). Note that this
      format is what is actually placed in all messages post-negotiation
      i.e. 38-bit key with start byte.


      Byte 0: (MSB->LSB) [0000 00XY]

      X = Version bit: Should always be set to zero (0)
      Y = Shim Format: 0 = Key32, 1 = Key8.

      Byte 1 (key)

      Example:
            0:0000 0001
            1:1010 1011

            Would be the 2 byte Shim8 representation of the key:

            ab


7.0 NEGOTIATE operation
     This section deals with the specifics of how the negotiation
     mechanism works.

     NEGOTIATE is suitable for use between any two SIP entities i.e they
     may be used between User Agents, SIP Proxies, BBUAs in any



Parameswar, Stucker                                            [Page 10]


Internet Draft      The SIP Negotiate Method                 August 2001


     combination. Examples include UA to Proxy, Proxy to Proxy, UA to
     UA, UA to BBUA etc.

     There are no restrictions on when a NEGOTIATE method is sent,
     however the authors recommend that if it is used in the middle of
     an existing session that the resultant key and parameters NOT be
     used in the context of the existing session. They may be used from
     the next session onwards.

7.1 Message Body Inclusion
     The NEGOTIATE method requires a Message body to carry meaningful
     meta-session information. The answer is carried in the 200OK as a
     similar message body. With this in mind the authors have make the
     following recommendations:

        (1) The NEGOTIATE/200 OK payload is in XML.
        (2) Multiple NEGOTIATE payloads are permissible in a single
            NEGOTIATE, they are enclosed using Multipart MIME.
        (3) Body contents are not changed/manipulated by intermediate
            proxies.


7.2 Negotiation Duration

     It is recommended that the Expires header be used to impose a limit
     on the duration of a negotiation. The use of a Key after the expiry
     of the imposed time limit will result in a 4xx response (488
     recommended). On expiry of the negotiation time limit, the expired
     KEY is removed from the list of KEYs maintained.


7.3 Terminating a Negotiation

     Either side may terminate a negotiation at any time. The
     termination is achieved by sending a NEGOTIATE with the "Expires"
     header set to "0." A successful termination will result in a 200 OK
     from the other side. In case of Negotiation termination both the
     request and response do not contain a message body. When a
     negotiation is terminated that KEY is removed from the list of
     KEYs maintained.

7.3 Refreshing of Negotiations

     A negotiation may be refreshed at any time by the use of the
     re-NEGOTIATE mechanism. As with the re-INVITE, it is RECOMMENDED
     that re-NEGOTIATE be used only if the negotiated parameters need
     to be changed or prior to expiry. The final expiration time is
     placed in the Expires header in the response. Note that the
     receiver of a NEGOTIATE may increase or decrease the expiry time
     - as in rfc243bis-03 section 7.4, this avoids the situation where



Parameswar, Stucker                                            [Page 11]


Internet Draft      The SIP Negotiate Method                 August 2001


     the offering party chooses a small expiry time causing frequent
     refreshes. In general the behavior of NEGOTIATE shall follow that
     of REGISTER in the rfc2543-bis03 section 7.

        OPEN ISSUE: Should a mechanism like Min-SE as detailed in
                    draft-ietf-sip-session-timer-05 be considered? Thus
                    the initiator of the NEGOTIATE at least has some
                    control over the lower bound of the expiry.

     If no refresh for a negotiation - as identified by the KEY is
     received before its expiration time, that KEY is removed from the
     list of KEYs maintained.

     An interesting point is whether re-NEGOTIATE is performed using
     the already negotiated parameters or in clear text, for example
     re-NEGOTIATE compressed with the negotiated compression algorithm.
     It is our recommendation that a re-NEGOTIATE be treated as a
     brand new NEGOTIATION (especially since it may be used to change
     existing parameters) and be done in clear text.


8.0 Behavior of SIP User Agents

    Depending on the applications requiring the negotiation of a
    meta-session parameters and the implementation details of the UAC,
    the type transport used could be either Shim or Header (or both).
    However, a UAC MUST support the Key header transport format if it
    is received.

    The particular format of the key should be placed into the message
    prior to sending. If a key is received that is not understood by
    the recipient (maybe it never negotiated that key), an appropriate
    400 class response should be returned to the request so that the
    sender of the key can determine that the key is no longer valid
    for use.

    Additionally, because the NEGOTIATE has an expiry timer associated
    with it, a UA MUST continue to allow the key to be used if a
    transaction began while the key was still good, however, new
    transactions MAY not be allowed to use the key during this period.

8.1 Behavior of SIP Proxy and Redirect Servers

8.1.1 Proxy Server

     Unless stated otherwise, the protocol rules for the NEGOTIATE
     request at a proxy are identical to those for a BYE request as
     specified in [1].





Parameswar, Stucker                                            [Page 12]


Internet Draft      The SIP Negotiate Method                 August 2001


8.1.1.1 Stateless Proxy Server

     The case where a stateless proxy server is involved can cause
     problems. In particular, the statelessness of the proxy precludes
     it from creating meta-session parameters since it has no notion of
     transaction, much less session. This means that meta-session
     parameters that cause the SIP message headers themselves to become
     unroutable by a stateless proxy should be used with care. The only
     way around this problem is to explicitly state all of the
     meta-session parameters by way of some header that is always
     readable by the stateless proxy. For example, in cases where
     algorithms such as dynamic compression are employed, this would
     involve sending the entire dictionary along with each message,
     thereby defeating the whole purpose of the compression. For other
     meta-session parameters, this may not pose a similar problem.
     However, since this draft seeks to simply provide a method of
     negotiation, and does not seek to recommend the particulars of
     what is negotiated; it is left up to the implementor to decide
     what is appropriate for their particular needs.

     It is recommended, that where a stateless proxy is known to
     likely exist, that the key be transported via the header mechanism
     in order to better ensure that the stateless proxy is able to
     correctly route the SIP message (assumes that routing information
     is left readable by the stateless proxy).

8.1.1.2 Transparency of the Negotiation

     An interesting case exists where a proxy wishes to view
     information in subsequent session transactions, but may not support
     the NEGOTIATE method, or it's content.

     For example, the proxy should forward the NEGOTIATE, even
     though it does not understand it, according to RFC 2543. As a
     result of the NEGOTIATE, the two UA's decide to compress their SDP
     content. Later, an INVITE hits the same proxy, only this time the
     SDP is unreadable due to the meta-session parameters setup as part
     of the NEGOTIATE. In this case, it may not be able to do it's job
     (billing, for instance) because the NEGOTIATE was transparent,
     but the effects of the negotiation are not. In this case, the proxy
     should not act any differently than it normally would if an INVITE
     came in with malformed SDP.

     If a proxy cannot transparently process SIP transactions that are
     affected by meta-session parameters, they should not simply pass
     along a NEGOTIATE, and instead assert itself in order to ensure
     that SIP messages passing through it can be processed without
     interruption.





Parameswar, Stucker                                            [Page 13]


Internet Draft      The SIP Negotiate Method                 August 2001


     One method of doing this would be to act as a back to back user
     agent in respect to the NEGOTIATE and it's meta-session parameters.
     Another would be to intercept, and reject a NEGOTIATE that contains
     parameters that are not acceptable to the proxy. A proxy, however,
     MUST never alter the contents of the NEGOTIATE without causing a
     new Key header to be generated.

8.1.2 Forking Proxy Server

     In the case where a forking proxy server is involved in the
     signaling path, such as sending a NEGOTIATE to a user's public
     address, which is resolved into a contact list with several
     entries, there exists the possibility for confusion on how
     to apply the NEGOTIATE across the various contacts.

     In particular, depending on the application that is using the
     NEGOTIATE to set it's meta-session parameters, the application
     may not be able to cope with multiple endpoints using the same
     key.

     An example of this would be using dynamic compression
     where each entity keeping a dictionary to use for compression
     is not aware of the dictionaries that are being update on
     peer branches. Because of this, the originator of the NEGOTIATE
     would wind up having to deal with two separate dynamic dictionaries
     that are guaranteed to never be synchronized, causing compression
     to intermittently fail.

     Another example where no problem exists with forking a NEGOTIATE
     would be where a static algorithm is being NEGOTIATED, and
     application of that algorithm is entirely optional (thus not every
     branch of the NEGOTIATE need accept the negotiation parameters).
     This could easily be handled. An example of this would be the use
     of a static, well-known, compression algorithm.

     Because the problems with forking vary according to the application
     that is employing the NEGOTIATE mechanism, it is recommended that
     the UAC that initiates the NEGOTIATE request be aware of it's
     specifics needs in this regard. If multiple responses are received,
     indicating that a proxy forked somewhere, and the UAC's application
     cannot handle this, the UAC SHOULD send another NEGOTIATE to the
     contacts that it wishes to cancel the unintended negotiation with
     the same key value used in the original NEGOTIATE, and an expiry
     value of zero.

     UAC's SHOULD NOT send a CANCEL in order to cause a negotiation
     to be terminated, however UAS's MUST be prepared to receive a
     CANCEL for a NEGOTIATE, and handle it as if it were a NEGOTIATE
     with an expiry value of zero.




Parameswar, Stucker                                            [Page 14]


Internet Draft      The SIP Negotiate Method                 August 2001

8.1.3 Redirection Server

     Unless stated otherwise, the protocol rules for the NEGOTIATE
     request at a proxy are identical to those for a BYE request as
     specified in [1].

9. Guidelines for extensions making use of NEGOTIATE

     It is strongly recommended that prior to designing XML payloads
     to use NEGOTIATE, the implementors ensure that a similar
     function cannot be performed using existing SIP mechanisms.

     The use of NEGOTIATE may be for uni-directional or bi-directional
     meta-session information. For example using SCRIBE compression from
     UAC to UAS only, and UAS chooses to use ROGER towards the UAC.
     The XML payload SHOULD allow for negotiation of directionality.

10. Security Considerations

     The worst damage that a mischievous intermediate could do would be
     to intercept, and handle a NEGOTIATE as if it were the intended
     recipient in order to gain access to information that it might
     otherwise not have (encryption key, etc.). For this reason,
     implementors should take care in how, and what they choose to
     send in a NEGOTIATE or its responses.

     Sending an 8-bit encryption key in a NEGOTIATE to be used to
     encrypt sensitive information over the SIP signaling path for
     the next 10 years, for instance, would be a poor implementation.

     In general, the security precautions used to guard against
     attacks against the sessions that the NEGOTIATE's meta-session
     parameters will apply to SHOULD be applied to the actual
     NEGOTIATE itself.

     Other types of attacks must also be taken into consideration,
     such as an intermediate tampering with the key value (causing
     sessions to be potentially compromised), or with the contents
     of the NEGOTIATE itself (causing confusion between the endpoints
     as to the value of the meta-session parameters). These, however
     are no worse than an intermediary scrambling any given piece
     of any SIP message, and are therefore, not unique outside of
     the amount of time such an attack may cause problems.

        OPEN ISSUE: Should a negotiation be authenticated first? That is
                    should the reply be a 407 with challenge and
                    negotiation proceeds post authentication? This
                    is interesting because the NEGOTIATE could be used
                    to negotiate authentication mechanisms themselves.





Parameswar, Stucker                                            [Page 15]


Internet Draft      The SIP Negotiate Method                 August 2001


10.1 Message integrity and authenticity / Man-in-the-middle Attacks

     One of the intended uses for the negotiation mechanism is to set
     up authentication and message integrity algorithms. Thus the
     NEGOTIATE method itself is not subject to these protections - this
     makes the recipient vulnerable to the Man-in-the-middle attacks.
     Views are solicited to mitigate this security consideration.

10.2 Denial of service attacks

     The recipient of an offer is allowed to increase or decrease the
     Expires value of a NEGOTIATE. This provides a measure of
     protection against DOS attacks. The Min-SE header issue (see 7.3)
     is of relevance here and the authors look for comments in this
     area.

11.0 IANA Considerations

     An option-tag "negotiate" is defined by this document. According to
     [1] must register any new option with the IANA. The authors intend
     to do this once the document has a measure of acceptance.


12 Example message flows
     This section outlines some example flows to illustrate the use of
     the new NEGOTIATE method and Key header.

12.1 Hop-by-Hop Negotiation

      UAC                     Proxy                       UAS
      ---                     -----                       ---
      |      F1 NEGOTIATE       |                          |
      | ----------------------->|                          |
      |      F2 200 OK          |                          |
      |<------------------------|                          |
      |                         |       F3 NEGOTIATE       |
      |                         |------------------------->|
      |                         |       F4 200 OK          |
      |                         |<-------------------------|
      |      F5 INVITE          |                          |
      |------------------------>|                          |
      |                         |       F6 INVITE          |
      |                         |------------------------->|


     In the scenario above the UAC wants to negotiate with an
     intervening Proxy server, which is typically stateful or a BBUA.
     The above also has applicability in wireless networks where the
     mobile negotiates several meta-session parameters with the Proxy
     Call State/Session Control  Function (P-CSCF). It must be noted



Parameswar, Stucker                                            [Page 16]


Internet Draft      The SIP Negotiate Method                 August 2001


     that the XML documents carried in the messages below are just an
     illustration, and the authors expect XML documents to be defined
     that will suit the negotiation process.

     In the messages the UAC offers ROGER and SCRIBE as possible
     compression mechanisms. The Proxy responds with a 200 OK and picks
     SCRIBE. The 200 OK returns the Key sent by the UAC, thus confirming
     that the next set of messages may be compressed. Also note that the
     negotiation from the Proxy to the UAS is not shown for brevity.

     F1 NEGOTIATE UAC->Proxy

        NEGOTIATE sip:proxy.visited.example.com SIP/2.0
        Via: SIP/2.0/UDP bobmobile.example.com:5060
        From: Bob <sip:bob@mobile.example.com>;tag=88a7s
        To: Proxy <sip:proxy.visited.example.com>
        Key: Header=ab13984bdef
        Expires: Fri, 01 Jan 2010 16:00:00 EST
        Call-ID: 3248543@bobmobile.example.com
        CSeq: 1 NEGOTIATE
        Content-Type: application/xml
        Content-Length: 120

        <?xml version="1.0"?>
        <negotiate meta-session-info="compression">
          <tuple entity="sip:bob@mobile.example.com" />
          <tuple qualifier="ROGER" qualifier="SCRIBE" />
        </negotiate>

     F2 200 OK Proxy->UAC
        SIP/2.0 200 OK
        Via: SIP/2.0/UDP proxy.visited.example.com:5060
        From: Bob <sip:bob@mobile.example.com>;tag=88a7s
        To: Proxy <sip:proxy.visited.example.com>;tag=8321234356
        Key: Header=ab13984bdef
        Expires: Fri, 01 Jan 2010 16:00:00 EST
        Call-ID: 3248543@bobmobile.example.com
        CSeq: 1 NEGOTIATE
        Contact: <sip:proxy@110.111.112.113>
        Content-Type: application/xml
        Content-Length: 95

        <?xml version="1.0"?>
        <negotiate meta-session-info="compression">
          <tuple entity="sip:bob@mobile.example.com" />
          <tuple qualifier="SCRIBE" />
        </negotiate>

     F3 and F4 are similar to F1 and F2 respectively and thus not
     reproduced. All content after Key in the INVITE (F5) is treated



Parameswar, Stucker                                            [Page 17]


Internet Draft      The SIP Negotiate Method                 August 2001


     as compressed and thus not readable.

     F5 INVITE UAC->Proxy
        INVITE sip:joe.example.com SIP/2.0
        Key: Header=ab13984bdef
        a14adbe84585abe878693956cde5995affc
        994adbeccff9494fa91344ffcdefac9474b
        ......
        ......

     F6 is not shown.

12.2 End-to-End Negotiation and termination of negotiation

              UA1                   Proxy          UA2
            -------                 -------      -----------
               |      F1 NEGOTIATE     |            |
               | ----------------------|----------->|
               |      F2 200 OK        |            |
               |<----------------------|------------|
               |                       |            |
               |   <multiple sessions> |            |
               |                       |            |
               |                       |            |
               |      F3 NEGOTIATE     |            |
               |<----------------------|------------|
               |      F4 200 OK        |            |
               |-----------------------|----------->|

     This example shows an end to end negotiation, with F1 and
     F2 same as above. The example further goes on to show how
     the UA2 can terminate the negotiation by sending the NOTIFY
     with an Expires value of zero. Note that in this case the
     NOTIFY MUST carry the Key and is not carrying the XML payload.

    F1 and F2 similar to above except that Proxy simply routes the
    methods between UA1 and UA2.

     F3 NEGOTIATE UA2->UA1

        NEGOTIATE sip:proxy.visited.example.com SIP/2.0
        Via: SIP/2.0/UDP bobmobile.example.com:5060
        From: Proxy <sip:proxy.visited.example.com>;tag=9345ab
        To: Bob <sip:bob@mobile.example.com>
        Key: Header; ab13984bdef
        Expires: 0
        Call-ID: 978585@proxy.visited.example.com
        CSeq: 1 NEGOTIATE
        Content-Length: 0




Parameswar, Stucker                                            [Page 18]

Internet Draft      The SIP Negotiate Method                 August 2001


    F4 200 OK Proxy->UAC
        SIP/2.0 200 OK
        Via: SIP/2.0/UDP proxy.visited.example.com:5060
        From: Proxy <sip:proxy.visited.example.com>;tag=9345ab
        To: Bob <sip:bob@mobile.example.com>;tag=83ac6786
        Key: Header; ab13984bdef
        Expires: 0
        Call-ID: 978585@proxy.visited.example.com
        CSeq: 1 NEGOTIATE
        Contact: <sip:proxy@110.111.112.113>
        Content-Length: 0


13. References

   [1] Handley, M., Schulzrinne, H., Schooler, E. and J. Rosenberg,
       "SIP: Session Initiation Protocol", RFC 2543, March 1999.

   [2] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg,
       "SIP: session initiation protocol" (RFC2543bis-03), Internet
       Draft, Internet Engineering Task Force, May 2001.
       Work in progress

   [3] S.Donovan,J.Rosenberg, "The SIP Session Timer",
       draft-ietf-sip-session-timer-05. Work in Progress


   [4] B. Hoeneisen, M. Isomaki, K. Kiss, "The SIP Proxy-Supported
       header field", Internet Draft, Internet Engineering Task Force,
       July 2001.
       Work in progress



14. Author's Address

     Sriram Parameswar
     Nortel Networks
     2375 B Glenville Avenue
     Richardson, Texas 75083
     USA

     Email: sriramp@nortelnetworks.com

     Brian Stucker
     Nortel Networks
     2380 Performance Drive
     Richardson, Texas 75083
     USA

     Email: bstucker@nortelnetworks.com