Internet Engineering Task Force SIP WG Internet Draft J.Rosenberg,H.Schulzrinne draft-ietf-sip-serverfeatures-01.txt dynamicsoft,Columbia U. February 28, 2000 Expires: August, 2000 The SIP Supported Header 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 to cite them other than as work in progress. The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Abstract The Session Initiation Protocol (SIP) defines mechanims that allow a client to mandate that a server support specific extensions in order to process a request. However, there is currently no way for a server to determine what features are supported in a client, in order to use those features to process the request. This capability is needed for numerous extensions currently under development, such as provisional response reliability and the session progress message. We also note that there is currently no way for a client to query a server about the features it supports. This document defines a SIP extension that allows clients to indicate, in a request, the set of features supported. We also define a mechanism that allows clients, through an OPTIONS request, to determine the features supported by a server. 1 Introduction J.Rosenberg,H.Schulzrinne [Page 1] Internet Draft supported February 28, 2000 The Session Initiation Protocol (SIP) [1] defines mechanims that allow a client to mandate that a server support specific extensions in order to process a request. This is accomplished through the Require and Proxy-Require headers. These headers include option tags. A UAS or proxy, respectively, must understand the option tags in order to process a request. However, SIP provides no support for the reverse case. In this case, a server wants to use a feature to process a request, but must determine if the client supports it. In this scenario, the client does not ask for the given feature, but the server wants to use the feature in the response. As the response cannot be processed without understanding this feature, the server needs a way to determine which features are supported by the client. The server also needs a way to signal to the client which features have been applied in the response. Very much related to this, there is currently no way for a client to query a server to determine which features it supports. OPTIONS allows a client to query a server about capabilities, such as support for various methods and media types. However, the set of supported features is not among the information returned in an OPTIONS response. This document defines an extension to SIP that enables the ability for clients and servers to indicate support for features. This is done through a new header, called Supported. Supported, like the Unsupported header, contains a list of option tags supported by the entity sending the message. This extension also allows the Require header to appear in responses. It is used to indicate what options must be understood by the UAC in order to process the response. It is expected that this extension will be folded into the next revision of the SIP specification. 2 Header Syntax 2.1 Supported Header This extension defines a new general header, Supported. The syntax for this header is: Supported = ( "Supported" | k ) ":" 0#option-tag The BNF for option-tag is given in RFC 2543 [1]. The Supported J.Rosenberg,H.Schulzrinne [Page 2] Internet Draft supported February 28, 2000 general-header field enumerates all the capabilities of the client or server. This header field SHOULD be included in all requests (except ACK) generated by clients conforming to this specification, if those clients support any extensions. It MUST be included in the response to OPTIONS requests, even if the UAS generating the response doesn't support any extensions beyond this one. Note that the BNF for the header explicitly allows for zero option tags to be present. This will occur when a server responds to an OPTIONS request, but it supports no extensions beyond this one itself. This is needed to enable backwards compatibility. If the response to OPTIONS contains no Supported header at all, it means the server may support some extensions, but does not understand the Supported header. The following defines the entry for the Supported in Table 4 of RFC 2543. Table 4 lists the places where the Supported may appear: where enc. e-e ACK BYE CAN INV OPT REG ___________________________________________________ Supported g c e - o o o o o A compact form for the Supported header is defined. This is the letter k, for "know". 2.2 Require This extension also allows for the Require header to appear in responses. It is used to indicate what options must be understood by the UAC in order to process the response. This implies that the row of Table 4 in RFC 2543 defining usage of the Require header should read: Require g e o o o o o o 3 Usage in Requests All requests, excepting ACK, generated by UACs conformant to this specification SHOULD include the Supported header. This header MUST list all those features supported by the UAC which the UAC is willing to apply to the transaction. J.Rosenberg,H.Schulzrinne [Page 3] Internet Draft supported February 28, 2000 Any server (UAS, proxy, redirect or registrar) that wishes to apply some extension to the response, MUST only do so if support for that feature is indicated in the Supported header. If the feature is essential, and the server cannot send its desired response without it, the server MAY send a 421 (Feature Required) response. This response indicates that the proper response cannot be generated without support of a specific feature. The needed feature(s) MUST be included in a Require header in the response. If the feature the server wishes to apply to the response is supported, the server MUST include a Require header in the response listing those features it applied to the response. 4 Usage with OPTIONS User agent servers compliant to this specification MUST include a Supported header in responses to OPTIONS requests. This header MUST be present even if the server supports no features/extensions beyond the one specificed here. This means that the Supported header may be empty in the response. Clients MUST NOT treat absence of the Supported header in an OPTIONS response to mean no extensions are supported. The presence of an empty Supported header implies no extensions are supported. 5 Example Usage This section gives an example call flow using this extension. UAC A sends a request to UAS B. UAS B wishes to apply feature foo to the response. Two cases are shown. In the first, foo is supported by A, and in the second, is not. 5.1 A supports foo The initial INVITE from A looks like (SDP omitted for clarity): A->B: INVITE sip:jtoto@dynamicsoft.com SIP/2.0 Via: SIP/2.0/UDP bigmachine.dynamicsoft.com Supported: foo From: sip:jdrosen@dynamicsoft.com To: sip:jtoto@dynamicsoft.com Call-ID: 70710@bigmachine.dynamicsoft.com CSeq: 1 INVITE Subject: Venture Capital J.Rosenberg,H.Schulzrinne [Page 4] Internet Draft supported February 28, 2000 Since the desired feature is supported, B applies it to the response (in this case, a redirect), and includes a Require header indicating that the feature has been applied. B->A: SIP/2.0 300 Moved Via: SIP/2.0/UDP bigmachine.dynamicsoft.com Require: foo From: sip:jdrosen@dynamicsoft.com To: sip:jtoto@dynamicsoft.com;tag=443322 Call-ID: 70710@bigmachine.dynamicsoft.com CSeq: 1 INVITE Foo: 9998h7asdh9 and A sends an ACK: C->S: ACK sip:jtoto@dynamicsoft.com SIP/2.0 Via: SIP/2.0/UDP bigmachine.dynamicsoft.com From: sip:jdrosen@dynamicsoft.com To: sip:jtoto@dynamicsoft.com;tag=443322 Call-ID: 70710@bigmachine.dynamicsoft.com CSeq: 1 ACK Note that the Supported header is not included in the ACK. 5.2 A doesn't support foo In this case, A doesn't support foo. It supports some other feature, bar. The server wishes to apply foo, and is not willing to proceed without it. So, it rejects the request. A doesn't support com.dynamicsoft.foo, so it resubmits the request with an Unsupported header included: A->B: INVITE sip:jtoto@dynamicsoft.com SIP/2.0 Via: SIP/2.0/UDP bigmachine.dynamicsoft.com Supported: bar From: sip:jdrosen@dynamicsoft.com To: sip:jtoto@dynamicsoft.com J.Rosenberg,H.Schulzrinne [Page 5] Internet Draft supported February 28, 2000 Call-ID: 70710@bigmachine.dynamicsoft.com CSeq: 1 INVITE Subject: Venture Capital B->A: SIP/2.0 421 Feature Required Via: SIP/2.0/UDP bigmachine.dynamicsoft.com Require: foo From: sip:jdrosen@dynamicsoft.com To: sip:jtoto@dynamicsoft.com;tag=98765 Call-ID: 70710@bigmachine.dynamicsoft.com CSeq: 1 INVITE a sends an ACK: A->B: ACK sip:jtoto@dynamicsoft.com SIP/2.0 Via: SIP/2.0/UDP bigmachine.dynamicsoft.com From: sip:jdrosen@dynamicsoft.com To: sip:jtoto@dynamicsoft.com;tag=98765 Call-ID: 70710@bigmachine.dynamicsoft.com CSeq: 1 ACK 6 Security Considerations This extension introduces no new security considerations beyond those discussed in RFC 2543 [1]. 7 Author's Addresses Jonathan Rosenberg dynamicsoft 200 Executive Drive Suite 120 West Orange, NJ 07052 email: jdrosen@dynamicsoft.com Henning Schulzrinne J.Rosenberg,H.Schulzrinne [Page 6] Internet Draft supported February 28, 2000 Columbia University M/S 0401 1214 Amsterdam Ave. New York, NY 10027-7003 email: schulzrinne@cs.columbia.edu 8 Bibliography [1] M. Handley, H. Schulzrinne, E. Schooler, and J. Rosenberg, "SIP: session initiation protocol," Request for Comments (Proposed Standard) 2543, Internet Engineering Task Force, Mar. 1999. J.Rosenberg,H.Schulzrinne [Page 7]