Session Initiation Proposal V. Hilt Investigation Working Group Bell Labs/Lucent Technologies Internet-Draft J. Rosenberg Expires: March 29, 2004 dynamicsoft September 29, 2003 Supporting Intermediary Session Policies in SIP draft-hilt-sipping-session-policy-00 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. This Internet-Draft will expire on March 29, 2004. Copyright Notice Copyright (C) The Internet Society (2003). All Rights Reserved. Abstract Proxy servers play a central role as an intermediary in the establishment of sessions in the Session Initiation Protocol (SIP). In that role, they define and impact policies on call routing, rendezvous, and other call features. However, there is no standard means by which network elements can have any influence on session policies, such as the codecs that are to be used. As such, ad-hoc and non-conformant techniques have been deployed to allow for such session policy mechanisms. In this document, we discuss a complete and standards-based mechanism for session policies. Hilt & Rosenberg Expires March 29, 2004 [Page 1] Internet-Draft SIP Session Policies September 2003 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Framework for Dynamic Policies . . . . . . . . . . . . . . . 5 2.1 Request/Response/ACK-based Framework . . . . . . . . . . . . 6 2.1.1 Constructing the INVITE/UPDATE Request . . . . . . . . . . . 6 2.1.2 Proxy Processing of Requests . . . . . . . . . . . . . . . . 6 2.1.3 Processing Requests and Generating Responses . . . . . . . . 8 2.1.4 Proxy Processing of Responses . . . . . . . . . . . . . . . 9 2.1.5 Processing Responses and Generating ACKs . . . . . . . . . . 10 2.1.6 Processing ACKs . . . . . . . . . . . . . . . . . . . . . . 10 2.1.7 Applying Dynamic Policies . . . . . . . . . . . . . . . . . 10 2.2 Response/ACK-based Framework . . . . . . . . . . . . . . . . 11 2.2.1 Creating the INVITE Response . . . . . . . . . . . . . . . . 11 2.2.2 Proxy Processing Responses . . . . . . . . . . . . . . . . . 12 2.2.3 Processing Responses and Generating ACKs . . . . . . . . . . 12 2.2.4 Proxy Processing of ACKs/PRACKs . . . . . . . . . . . . . . 12 2.2.5 Processing ACKs/PRACKs . . . . . . . . . . . . . . . . . . . 12 2.3 "Media-Interface" header usage . . . . . . . . . . . . . . . 12 2.4 "Media-Filter" header usage . . . . . . . . . . . . . . . . 13 2.5 "Reverse-Media-Filter" header usage . . . . . . . . . . . . 14 3. Dynamic Policy Packages . . . . . . . . . . . . . . . . . . 15 3.1 Media Interface Object . . . . . . . . . . . . . . . . . . . 15 3.2 Media Filter Object . . . . . . . . . . . . . . . . . . . . 15 4. Framework for Static Policies . . . . . . . . . . . . . . . 16 4.1 Static Policies using REGISTER . . . . . . . . . . . . . . . 17 4.1.1 Generating the REGISTER Request . . . . . . . . . . . . . . 17 4.1.2 Proxy Processing of Requests . . . . . . . . . . . . . . . . 18 4.1.3 Processing Requests . . . . . . . . . . . . . . . . . . . . 19 4.1.4 Applying Static Policies . . . . . . . . . . . . . . . . . . 19 4.2 Static Policies using the Config Framework and XCAP . . . . 20 4.2.1 Discovering Policy Servers . . . . . . . . . . . . . . . . . 21 4.2.2 Subscribing to Static Policies . . . . . . . . . . . . . . . 21 4.2.3 Creating Notifications and Policy Objects . . . . . . . . . 22 4.2.4 Retrieving and Applying Static Policies . . . . . . . . . . 23 5. Example Policy Package: Network-based Codec Selection . . . 24 5.1 Dynamic Codec Selection . . . . . . . . . . . . . . . . . . 24 5.1.1 Media Interface Object . . . . . . . . . . . . . . . . . . . 24 5.1.2 Media Filter Object . . . . . . . . . . . . . . . . . . . . 25 5.2 Static Codec Selection . . . . . . . . . . . . . . . . . . . 26 6. Security Considerations . . . . . . . . . . . . . . . . . . 27 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . 28 8. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 8.1 Header Fields . . . . . . . . . . . . . . . . . . . . . . . 29 References . . . . . . . . . . . . . . . . . . . . . . . . . 30 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 31 Intellectual Property and Copyright Statements . . . . . . . 32 Hilt & Rosenberg Expires March 29, 2004 [Page 2] Internet-Draft SIP Session Policies September 2003 1. Introduction The Session Initiation Protocol (SIP) [9] was designed to support establishment and maintenance of end-to-end sessions. Proxy servers provide call routing, authentication and authorization, mobility, and other signaling services that are independent of the session. Effectively, proxies provide signaling policy enforcement. However, numerous scenarios have arisen which require the involvement of proxies in some aspect of the session policy. One scenario is in the traversal of a firewall or NAT. The midcom group has defined a framework for control of firewalls and NATs (generically, middleboxes) [10]. In this model, a midcom agent, typically a proxy server, interacts with the middlebox to open and close media pinholes, obtain NAT bindings, and so on. In this role as a midcom agent, the proxy will need to examine and possibly modify the session description in the body of the SIP message. This modification is to achieve a specific policy objective: to force the media to route through an intermediary. In another application, SIP is used in a wireless network. The network provider has limited resources for media traffic. During periods of high activity, the provider would like to restrict codec usage on the network to lower rate codecs. In existing approaches, this is frequently accomplished by having the proxies examine the SDP [1] in the body and remove the higher rate codecs or reject the call and require the UA to start over with a different set of codecs. In yet a third application, SIP is used in a network that has gateways which support a single codec type (say, G.729). When communicating with a partner network that uses gateways with a different codec (say, G.723), the network modifies the SDP to route the session through a converter that changes the G.729 to G.723. The desire to impact aspects of the session inevitably occurs in domains where the administrator of the SIP domain is also the owner and administrator of an IP network over which it is known that the sessions will traverse. This includes enterprises, Internet access providers, and in some cases, backbone providers. Typical session policies established in such domains influence NAT/firewall traversal or control bandwidth usage by selecting low-rate codecs. The desire to impact aspects of sessions may also occur in domains where services are provided that require the inclusion of a media intermediary such as transcoding or call recording. Since SIP is the protocol by which the details of these sessions are negotiated, it is natural for providers to wish to impose their session policies through some kind of SIP means. To date, this has been accomplished through SDP editing, a process where proxies dig Hilt & Rosenberg Expires March 29, 2004 [Page 3] Internet-Draft SIP Session Policies September 2003 into the bodies of SIP messages, and modify them in order to impose their policies. However, this SIP editing technique has many drawbacks. A discussion of these drawbacks can be found in [7]. Our solution is to introduce a framework that allows intermediary elements to request media-level policy operations from user agents. This framework satisfies the requirements listed in [7]. Section 2 introduces a framework for requesting dynamic policies during the establishment or modification of a session. Section 3 discusses the creation of policy packages for this framework. Section 4 introduces two alternative frameworks for static policies. Section 5 gives an example for the use of the dynamic and static framework to select codecs. Section 6 discusses Security and Section 7 IANA considerations. Section 8 describes the syntax of SIP extensions defined in this document. Hilt & Rosenberg Expires March 29, 2004 [Page 4] Internet-Draft SIP Session Policies September 2003 2. Framework for Dynamic Policies This framework for dynamic policies enables proxy servers to request session policies from UAs. A session policy may impact aspects of a session description, it may request a UA to perform steps that are outside of the SIP protocol (e.g. contact a NAT/firewall) or expose information about the session that is being set up or modified to a proxy. The syntax and semantics of a specific session policy is not part of this framework and needs to be defined in a separate session policy package. An example for a policy package for codec selection is given in Section 5. Dynamic session policies may change from call to call. They need to be set up during the establishment or modification of a session. This requires two basic steps: first, UAs need to be able to expose aspects of a session description to proxies and, second, proxies need to be able to request session policies which may be based on the information exposed. In this framework, UAs create Media Interface Objects (MIOs), which describe an aspect of the session being set up or modified. For example, a UA might create an MIO for each of the IP addresses and ports of each media stream, and an MIO for the set of codecs in each stream. Proxies can request policies via Media Filter Objects (MFOs). An MFO describes a set of rules, the UA is requested to execute on a certain media aspect. Each proxy can create MFOs independently. MIOs and MFOs are only useful in conjunction with a session description and must travel in the same SIP message (e.g. in a INVITE request and a 200 OK response). Session policies can be set up separately for media streams in each direction. The general scheme for requesting policies for media streams in a direction is as follows: 1. The receiver of a media stream creates MIOs (describing relevant media stream aspects) and inserts them into the SIP message, that also carries the corresponding session description. 2. Proxies inspect those MIOs insert MFOs (containing the policy) into the SIP message. 3. Once the message receives the sender of the media stream, it analyzes the session description and the MFOs and decides whether it wants to accept or reject the the requested policies. It applies the accepted policies. 4. The accepted policies are conveyed back to the receiver of a media stream. The format of MIOs and MFOs is policy specific and needs to be Hilt & Rosenberg Expires March 29, 2004 [Page 5] Internet-Draft SIP Session Policies September 2003 defined in a policy package (see Section 3). 2.1 Request/Response/ACK-based Framework Proxies can request policies in INVITE and UPDATE [4] transactions, in which the session description offer is carried in the request and an answer is carried in the response. The basic message flow is depicted in Figure 1. +-----+ +-------+ +-----+ | | INVITE/offer | | INVITE/offer | | | | + MIO1 | | + MIO1 + MFO1 | | | |--------------------->| |------------------>| | | | OK/answer | | OK/answer | | | UAC | + MIO2 + MFO2 + MFO1 | proxy | + MIO2 + MFO1 | UAS | | |<---------------------| |<------------------| | | | | | | | | | ACK + MFO2 | | ACK + MFO2 | | | |--------------------->| |------------------>| | +-----+ +-------+ +-----+ Figure 1 2.1.1 Constructing the INVITE/UPDATE Request The UAC composes an INVITE or UPDATE request as usual. In addition to the session description, it creates MIOs for those aspects of the session, it wishes to permit the network to examine. For example, if the UAC wants to allow the network to examine the media codecs, it would insert MIOs representing these codecs. The UAC SHOULD expose as much information as possible in MIOs. Since the MIOs are meant to be inspected by proxies, and since they are provided to enable a SIP feature (proxy insertion of session policy), the MIOs are carried as SIP headers (see Section 2.3). A UAC that supports this framework MUST insert a SIP Supported header with the option tag "policy". 2.1.2 Proxy Processing of Requests As the request traverses proxies, the proxies can insert Media Filter Objects (MFOs). MFOs contain the policies, the proxy wants to Hilt & Rosenberg Expires March 29, 2004 [Page 6] Internet-Draft SIP Session Policies September 2003 request. A proxy can generate MFOs in response to information contained in a specific MIO in the request. These MFOs represent "diffs" that the proxy wants to apply to the MIO. For example, if an MIO contains an IP address and port for receiving an audio stream, a proxy can insert an MFO which changes that address and port to that of a media intermediary. A proxy may inspect MFOs that have been inserted by previous proxies to determine, which policies are already requested. However, MFOs created by a proxy MUST represent the differences to the original MIO and MUST NOT depend on MFOs inserted by previous proxies. A proxy can also generate MFOs independent of the MIOs contained in the request. Such an MFO describes a general policy applicable to the current session. For example, an MFO could contain a list of audio codecs that are allowed in the current session. The proxy does not modify the MIO - that is fundamental. By specifying the requested modifications in MFOs rather than directly modifying MIOs and the session description, we enable an explicit consent and knowledge model. The UAs can know exactly, which policies where requested against the session. The session description contained in an INVITE/UPDATE request describes media streams transmitted from UAS to UAC. Consequently, MFOs inserted into an INVITE/UPDATE request MUST contain policies for media streams transmitted in this direction. A proxy MAY only insert MFOs (or other policy related headers) into the INVITE/UPDATE request, if the UAC has indicated its support for policies by including a Supported header with the value "policy" into the request. If no such Supported header was present and the proxy insists on the use of policies, it MAY return a 421 (Extension Required) response. However, this behavior is NOT RECOMMENDED as it generally breaks interoperability. A proxy MAY insert a Require header with the option tag "policy" if it wants to make sure that the request fails in case the UAS does not support session policies. A proxy MUST insert a policy Require header if it has marked some policies as required in the MFO (see Section 2.4) and wants the request to fail if these policies are not accepted by the UA. However, not all session policies will be mandatory. Policies could be optional, in which case none of the inserted MFOs would contain a required policy and a policy Require header would not be inserted. If an MIO contained in the request is not acceptable to the proxy, it MAY insert an MFO indicating the failure or it MAY reject the request by returning a 488 (Not Acceptable Here) response. This enables a proxy to inform the UAC that the information in the MIO is not Hilt & Rosenberg Expires March 29, 2004 [Page 7] Internet-Draft SIP Session Policies September 2003 acceptable under the current policies or that information required by the current policy was not exposed in an MIO. For example, a proxy, which wants to route a media stream through a firewall, would not accept MIOs containing no information about the transport address. The failure MFO SHOULD explain the reason, why the MIO was not acceptable. Similarly, the 488 response SHOULD include a Warning header field value explaining why the request was rejected. The proxy SHOULD copy the MFOs that caused the problems from the request into the 488 response. This allows the UAC to know exactly why the request has failed and if it can attempt to retry with different MIOs. [TBD: define warning codes and texts.] To achieve backwards compatibility with devices that do not support policies, the proxy MUST NOT return a 488 response to requests that do not include a Supported header with the value "policy". A proxy may only reject requests if the UAC has indicated its support for policies and knows how to correct the problem and re-try the request. Rejecting a request is a quick way for the proxy to inform a policy-enabled UAC about policy related problems. It prevents that the request is forwarded to the UAS, which would reject it because of an included failure MFO. Returning a 488 response MUST NOT be used to enforce a policy. Such an enforcement would not be effective since it can be circumvented by a UAC, for example by creating fake MIOs. Using a failure MFO instead of a 488 response to signal a problem has the advantage that both endpoints become aware of the INVITE/UPDATE request and the reason why it failed. In addition to adding an MFO, a proxy MAY generate an MFO-Reason header. This header contains the domain name of the proxy and explains the reasoning behind the session policy. The end device may present this text string to a human when querying whether the requested policies should be accepted or not. [TBD: define the format to this header.] A proxy that supports forking of requests, MAY generate a different set of MFOs for each target the request is sent to. 2.1.3 Processing Requests and Generating Responses When the INVITE/UPDATE request reaches the UAS, the UAS will know exactly what the UAC indicated in MIOs, and which policies have been requested by intermediate domains. The UAS decides if it wants to accept some or all of these policies. If it decides to reject a policy that is marked as required or if the message contains a failure MFO, the UAS MUST reject the request with a 488 (Not Acceptable Here) response. This response SHOULD include a Warning Hilt & Rosenberg Expires March 29, 2004 [Page 8] Internet-Draft SIP Session Policies September 2003 header field value explaining, why the policies were not acceptable and a copy of the declined MFOs or the failure MFO. If all required (and possibly some optional) policies are acceptable to the UAS, it will eventually generate a response which contains a session description answer. If both user agents support reliable provisional responses [8], it is RECOMMENDED that the UAS returns the answer in a reliable provisional response. Using a reliable provisional response has the advantage that the UAC has the chance to reject policies before the session is established. The UAS then inserts its own set of MIOs for its side of the session into the response. It MUST copy all MFOs it has accepted (required and optional) from the request into the response. The copied MFOs are purely informational, for the benefit of the proxy and the UAC. They inform proxies which policies have been accepted. They also ensure that proxies cannot establish policies without having the UAC become aware of them. The copied MFOs are end-to-end, and not meant for modification by proxies. They MAY be protected by end-to-end security mechanisms. A UAS MAY only apply this extension to INVITE/UPDATE requests, that contain a Supported header with value "policy". If a UAS applies this extension, it MUST insert a Require header with the value "policy" into the response created. A Supported header with the value "policy" MUST be included in every response to an INVITE/UPDATE request. 2.1.4 Proxy Processing of Responses If the response contains a Require header with the value "policy", the proxy knows that the UAC and the UAS support the use of session policies and that it may apply this extension. The proxy can determine which policies have been accepted by the UAS by examining the list of MFOs, the UAS has copied into the response. The proxy can insert MFOs containing policies for media streams transmitted from UAC to UAS into the response to an INVITE request. These MFOs are created and formatted identically to those inserted into the request. If the MIOs contained in the response are not acceptable to a proxy, it may insert a failure MFO. A proxy could also insert MFOs into the response to an UPDATE request. However, these MFOs would not be copied back to the UAS since UACs do not PRACK or ACK UPDATE responses. Thus, the proxy would not be informed which policies have been accepted and the UAS would not become aware of these policies. Such a behavior violates the requirement that both UAs need to know the set of policies requested along the call path and that the proxy needs to be informed Hilt & Rosenberg Expires March 29, 2004 [Page 9] Internet-Draft SIP Session Policies September 2003 about accepted policies. It is therefore NOT RECOMMENDED. [Question: would it make sense to send an additional message from UAC to UAS which carries the MFOs inserted into the response, e.g. a SUBSCRIBE/NOTIFY or INFO?] 2.1.5 Processing Responses and Generating ACKs After receiving a 1xx or 2xx response, the UAC examines if a Requires header with the value "policy" is present and if the response contains MFOs. If so, it can either reject or accept the policies. If it accepts all policies marked required, the UAC MUST copy the MFOs, that were accepted, into the PRACK or ACK. These MFOs are informational to the proxy and the UAS. They may be protected by end-to-end integrity mechanisms. Due to forking of requests in proxies, the UAC may receive multiple responses from different UASs for one request, which may contain different policies. If the response did not contain a policy Requires header, the UAC must ignore all policy related information in the response (e.g. MFOs). If the UAC decides to reject some of the required policies or if the response contained a failure MFO, the UAC should terminate the dialog associated with this response. If the UAS has responded with a 2xx response, the UAC must send an ACK and then terminate the dialog with a BYE. If the UAS has responded with a reliable provisional response, the UAC can terminate the dialog without fully establishing it by generating a CANCEL (after sending a PRACK, of course). The UAC does not copy the MFOs from the request into the PRACK or ACK. Instead, the declined MFOs SHOULD be copied into the BYE or CANCEL requests together with a Reason header [2] explaining why the policies were rejected. [TBD: need to define reason code, phrases etc.] If the UAC receives a 488 response and the reason explains that existing or missing MIOs caused the rejection, the UAC MAY try to correct the problem (e.g. by adding an additional MIO) and re-send the request. 2.1.6 Processing ACKs If the MFOs contained in a PRACK or ACK message are not acceptable to the UAS, it may decline them by terminating the dialog with a CANCEL or BYE. The CANCEL or BYE SHOULD contain a copy of the declined MFOs and a Reason header [2] explaining why these policies were rejected. 2.1.7 Applying Dynamic Policies Hilt & Rosenberg Expires March 29, 2004 [Page 10] Internet-Draft SIP Session Policies September 2003 If both UAs have accepted the policies, they MUST apply them to the media streams they generate. This may involve, for example, sending media to an intermediary indicated in an MFO. Since the user agents know about the full set of intermediaries, they have many options in the event of a failure (detected through an ICMP error, for example). The endpoint can try to send the media to the next intermediary on the path. Or, if the MFO specifies the intermediaries as a FQDN instead of an IP address, the endpoint can attempt to use DNS to find an alternative, and begin routing media through that. 2.2 Response/ACK-based Framework Proxies may also request policies in INVITE transactions, which carry a session description offer in the response and an answer in the following ACK request. The basic message flow is depicted in Figure 2. +-----+ +-------+ +-----+ | | INVITE | | INVITE | | | |------------------>| |------------------>| | | | OK/offer | | OK/offer | | | | + MIO1 + MFO1 | | + MIO1 | | | UAC |<------------------| proxy |<------------------| UAS | | | | | | | | | ACK/answer | | ACK/answer | | | | + MFO1 | | + MFO1 | | | |------------------>| |------------------>| | +-----+ +-------+ +-----+ Figure 2 2.2.1 Creating the INVITE Response The UAS creates the response as usual. It applies this extension to the response, if the request containes a Supported header with the value "policy". The UAS MUST insert a Require header with the value "policy" and SHOULD insert all MIOs it can create for its side of the session description. A Supported header with the value "policy" MUST be included in every response to an INVITE/UPDATE request. It is RECOMMENDED that the UAS generates a reliable provisional response [8] if supported by both UAs. Hilt & Rosenberg Expires March 29, 2004 [Page 11] Internet-Draft SIP Session Policies September 2003 2.2.2 Proxy Processing Responses The proxy MAY add MFOs to responses that contain a Requires header with the value "policy". If an MIO contained in the response is not acceptable for the proxy, it MAY insert a failure MFO. 2.2.3 Processing Responses and Generating ACKs The UAC may or may not accept the policies contained in the response. If it accepts all required policies, it MUST copy the accepted MFOs into the PRACK or ACK. It may protect these MFOs with end-to-end integrity mechanisms. If it declines at least one of the required policies or if the response contained a failure MFO, the UAC does not copy these MFOs into the PRACK or ACK and SHOULD terminate the dialog associated with this response. 2.2.4 Proxy Processing of ACKs/PRACKs The proxy could insert MFOs into the PRACK or ACK. However, these MFOs would not be copied back to the UAC, which would violate the requirement that both UAs and the proxy should know the set of policies used in a session. This behavior is therefore NOT RECOMMENDED. 2.2.5 Processing ACKs/PRACKs If the MFOs contained in a PRACK or ACK message are not acceptable to the UAS, it may decline them by terminating the dialog. 2.3 "Media-Interface" header usage The Media-Interface header value contains Media Interface Objects (MIOs) created by a UA. The structure and semantics of MIOs needs to be defined in a policy package. However, the following general rules apply to Media-Interface header values: The Media-Interface header value MUST consist of the policy package name, under which the MIO was created. The Media-Interface header MAY contain a signature parameter which enables proxies to verify the identity of the UA and the integrity of the MIOs. A UA creates a separate Media-Interface header value for each policy package it supports. A policy package MAY require the creation of multiple Media-Interface headers with different MIOs. The UAC SHOULD create MIOs for all policy packages it supports. MIOs SHOULD contain as much information about the session as possible. Hilt & Rosenberg Expires March 29, 2004 [Page 12] Internet-Draft SIP Session Policies September 2003 In the following example, the UA supports the packages foo and bar. It exponses data1 and data2 for package foo and data3 for package bar in MIOs. Media-Interface: foo;foo_param1=data1;foo_param2=data2, bar;bar_param=data3 2.4 "Media-Filter" header usage Media-Filter headers serve as a container for Media Filter Objects (MFOs). Each MFO is contained in a separate Media-Filter header value. Media-Filter header values implement a stack, which enables each proxy on the way to "push" its MFOs on top of the set of existing MFOs. The Media-Filter headers implement one single stack, which contains the MFOs for all packages. If a proxy wants to insert an MFO, it inserts the respective Media-Filter header value before the topmost Media-Filter header value. A UA, which receives a SIP message containing MFOs, processes them one after another by popping them from the stack. The structure and semantics of MFOs needs to be defined in a policy package. However, the following general rules apply to Media-Filter header values: The Media-Filter header value MUST consist of the policy package name, under which the MFO was created. The following general parameters are defined for Media-Filter headers. They provide basic information about the MFO to UAs even if they don't support the policy package used. o Domain. The domain parameter carries the identity of the domain, which requested the policy. It MUST be present in each MFO. o Consequences (cns). The consequences parameter is be used by the proxy to indicate the consequences of rejecting the policy to the UA. This parameter also enables a UA to determine if the acceptance of a policy is mandatory for establishing the session or not. The consequences parameter contains a consequences code, which has a "required" and an "optional" range. An MFO SHOULD contain a consequences code. An MFO is optional if the consequences parameter is not present. o Signature. A MFO MAY contain a signature, generated by the domain that inserted the MFO. This allows the endpoints to verify the identities of the domains, which have requested session policy, Hilt & Rosenberg Expires March 29, 2004 [Page 13] Internet-Draft SIP Session Policies September 2003 and the integrity of those policies. [TBD: define consequence codes.] A failure MFO is a special MFO, which indicates that the session is not acceptable to the proxy. A failure MFO is an MFO with consequence code 999. Additional package specific parameters MAY be present in a failure MFOs. [TBD: define reason codes and texts for failure MFOs.] In the following example, the proxy in domain example1.com has requested policies for package foo and the proxy in domain example2.com has requested policies for the packages foo and bar. Media-Filter: foo;domain=example2.com;cns=100;foo_param=data1, bar;domain=example2.com;cns=300;bar_param=data1, foo;domain=example1.com;foo_param=data2, 2.5 "Reverse-Media-Filter" header usage The Reverse-Media-Filter header is used to convey the MFOs, a UA has accepted, back to the peer UA. A Reverse-Media-Filter header contains a copy of the accepted MFOs and has the same structure as the Media-Filter header. Hilt & Rosenberg Expires March 29, 2004 [Page 14] Internet-Draft SIP Session Policies September 2003 3. Dynamic Policy Packages This section describes aspects that need to be considered when dynamic policy packages are defined. 3.1 Media Interface Object This section MUST be present in a policy package. It defines the structure of Media Interface Objects used within this package. A policy package MUST describe the semantics of an MIO. It MUST describe how proxies are supposed to interpret the information contained in an MIO. 3.2 Media Filter Object This section MUST be present in a policy package. It defines the structure of Media Filter Objects used within this package. Media Filter Objects (MFOs) may define the differences to an existing MIO. However, it is very important that MFOs don't just define a diff to an MIO, in the Unix sense. This is because it is important that the endpoints understand the semantics of a requested policy, not just the syntactical change that is needed to affect that policy. A MFO may also define a general policy which is independent of an MIO. A policy package MUST describe exactly how a UA is supposed to apply the policy contained in an MFO. In particular, the policy package MUST describe how the information in the MFO is applied to the session description and if additional steps need to be taken when accepting the policy. This process MUST enable a UA to determine the consequences of accepting the policy before actually executing the necessary steps. Hilt & Rosenberg Expires March 29, 2004 [Page 15] Internet-Draft SIP Session Policies September 2003 4. Framework for Static Policies In contrast to dynamic policies, which can be defined on a call-by-call basis, static policies remain stable for a longer period of time, typically in the range of hours or days. In principle, static policies could be set up using the dynamic framework. However, establishing the same policies over and over again in every call is expensive, causing the continuous transmission of the same information during call setup, and possibly adding to call setup latencies. In general, static policies provide a way of conveying information to the UAC that is useful for setting up a call in the current environment. For example, a static policy could list the codecs that are currently allowed in the network or it may specify the MIOs the UAC is supposed to include in an INVITE/UPDATE request. In another example, the UAC has to traverse a NAT and is informed of the TURN [5] relay it should contact in advance of a call via a static policy. Requesting static instead of dynamic policies is most beneficial for network providers, which are involved in many sessions a UA establishes. The following two types of network providers will most likely have an interest in requesting static policies: o The Home Domain Provider is responsible for providing SIP service to a SIP user. Typically, this is the domain present in the URI in the address-of-record of a registration. The home domain provider may maintain user preferences or subscriptions to services, which involve static policies. For example, a user may have subscribed to a networked call recording service. The respective static policy makes sure, that all voice streams are routed through the recording intermediary. o The Access Network Provider is responsible for providing IP service to a SIP agent. This may be the same provider as the home domain provider. However, they may be different in scenarios where a user roams in a foreign network or obtains SIP services and IP connectivity from different providers. Access Network Providers are often interested in static policies, which influence the traffic in their networks such as restricting the use of high bandwidth codecs. This framework for static policies allows network providers to convey static policies to UAs. It does not define the structure or semantics of static policies. Static policies need to be defined in policy packages. An example for a static policy package for codec selection is discussed in Section 5. This document proposes two different frameworks for static policies, Hilt & Rosenberg Expires March 29, 2004 [Page 16] Internet-Draft SIP Session Policies September 2003 which both have their advantages and disadvantages. However, it is expected that one of the frameworks will become obsolete as this draft evolves. 4.1 Static Policies using REGISTER This framework uses the REGISTER message to convey static policies to a UA. REGISTER messages are created at the time a device registers at a network, which is also the time static policies need to be exchanged. This message traverses the access network domain and the home domain, which are the domains typically interested in requesting static policies. An advantage of exchanging policy information in conjunction with a REGISTER message is the low overhead. No extra messages need to be created and clients do not need to implement additional protocols. The drawbacks are the tight coupling between registrations and static policies. Since registrations and policies are conveyed in the same message, proxies and registrars also need to be policy servers. Policies and registrations need to be refreshed in the same interval. The basic call flow in this framework is depicted in Figure 5. +----+ +----------+ +-----------+ | | REGISTER | | REGISTER + SP01 | | | |----------------->| outbound |----------------->| | | UA | | | | registrar | | | OK + SPO1 + SPO2 | proxy | OK + SPO1 + SPO2 | | | |<-----------------| |<-----------------| | +----+ +----------+ +-----------+ Figure 5 4.1.1 Generating the REGISTER Request A UAC which supports this framework MUST insert a Supported header with the option tag "stat_policy". To allow the access network provider to request static policies, the UA SHOULD attempt to discover an outbound proxy, for example by using the methods described in the SIP Framework for User Agent Configuration [3]. If an outbound proxy is available, the UAC SHOULD include it in the route set used for the REGISTER request. Hilt & Rosenberg Expires March 29, 2004 [Page 17] Internet-Draft SIP Session Policies September 2003 4.1.2 Proxy Processing of Requests Proxies may insert Static Policy Objects (SPOs) into a REGISTER request. A proxy MAY only insert SPOs if the REGISTER request contains a Supported header with the option tag "stat_policy". If no such header is present, the proxy MAY try to request the desired policies using the dynamic framework. It MUST NOT reject the request if the "stat_policy" Supported header value is not present. An SPO represents a static policy, the UA is requested to apply to the sessions it establishes. An SPO can apply to all sessions established by the UA. However, it may also affect only a subset of these sessions. The scope of a static policy MUST be defined in a policy package. The policy package may either have global scope or define a scope attribute that is populated by proxies as needed. Possible scopes are: o Sessions for a certain address of record (i.e. sessions created for a certain local user). This is useful if an end device supports multiple identities and, for example, only a subset of them has subscribed to a service requiring policies. o Sessions to a certain remote URI. For example, a policy for NAT traversal might only apply to sessions to or from external addresses. o Outgoing/incoming sessions only. A static policy may apply only to sessions initiated by the local/the remote UA. o A certain media stream. This enables the specification of policies on a stream-by-stream basis. For example, a policy for audio codec selection only applies to audio streams. o Media streams in the incoming or outgoing direction. This enables independent policies for the media streams in each direction. SPOs are represented in a SIP header. The structure of such a header needs to be defined in policy packages. The SPO MUST contain the identity of the domain, which requested the policy. It MAY also contain a signature allowing the UA to verify the identity of that domain and the integrity of the SPO. In addition to an SPO, a proxy MAY generate an SPO-Reason header. This header contains the domain name of the proxy requesting the policy and explains the reasoning behind the session policy. The end device may present this text string to a human when querying whether the requested policies should be accepted or not. Hilt & Rosenberg Expires March 29, 2004 [Page 18] Internet-Draft SIP Session Policies September 2003 [TBD: define the format to this header.] Static policies will usually be changed by the provider from time to time. This requires that the UA is able to refresh its view on static policies. In the REGISTER-based framework, this is done by periodically refreshing policies together with registrations. If a proxy wants to influence the refresh interval, it needs to determine the expiration intervals of all contacts in the REGISTER request as described in Section 10.3 of [9]. It MUST use the shortest of the determined expiration intervals as the expiration interval for inserted SPOs. If this interval is too long, the proxy MAY shorten it by changing the respective values in the REGISTER request (either the "expires" parameter value of the respective Contact header fields or the Expires header field value). If no expiration interval is given in the request, the proxy MAY insert an Expires header field with the desired value. This procedure makes sure that the UA generates the next REGISTER request at least at the time SPOs need to be refreshed. A proxy SHOULD insert SPOs, which scope is a certain address of record, into the REGISTER request for that address. SPOs, that are not tied to a certain address of record, MAY be inserted into every REGISTER request. However, if a device creates multiple REGISTER requests for different addresses of record, a proxy SHOULD insert these generic SPOs only into the REGISTER requests of one address (typically the first encountered by a proxy). This avoids the retransmission of these SPOs in every REGISTER request. A proxy must make sure that these SPOs are inserted into different REGISTER requests in case the address used expires or is removed. 4.1.3 Processing Requests The REGISTER request eventually reaches the registrar, which creates a response. If the request contains a Supported Header with the option tag "stat_policy", the registrar MAY insert SPOs representing its static policies into the response. If the request contained SPOs inserted by proxies on the way, the registrar must copy these SPOs from the request into the response. The registrar must follow the same procedures as a proxy when creating SPOs (see Section 4.1.2). 4.1.4 Applying Static Policies At the time the response reaches the UAC, it contains all static policies that have been requested by proxies and the registrar. The UAC can decide to accept or reject these policies. Since no session is established at this point, the UAC does not need to inform the proxies or registrar about its decision. Hilt & Rosenberg Expires March 29, 2004 [Page 19] Internet-Draft SIP Session Policies September 2003 The UA MUST apply the accepted policies to new sessions it is establishing. For example, if the policy lists the audio codecs allowed in a wireless network, the UA includes only those audio codecs in the session description offers and answers it creates. The UA does not explicitly confirm the acceptance of a static policy in an INVITE or UPDATE message. The proxy might be able to determine the use of static policies by examining the actions of the UA (e.g. contacting a TURN relay) or the information it exposes in an MIO. The proxy may also have mechanisms in place to enforce its static policies. A provider may have static and dynamic policies in place. Since dynamic policies are requested during session setup, they automatically override a static policy. In fact, a provider may use dynamic policies to quickly apply the change of a static policy, without waiting until all UAs have refreshed their static policies. Dynamic policies may also be used for clients that do not support static policies. A UA, which has received an updated set of static policies in a REGISTER response, MAY apply them to existing sessions for example by issuing a re-INVITE request. 4.2 Static Policies using the Config Framework and XCAP Static policies influence the way a UA sets up a session. In this respect, static policies can be regarded as device configuration information and the mechanisms for conveying configuration information to devices can be re-used for requesting static policies. However, an important difference between configuration information and static policies is that configuration information is usually applied in any case whereas a UA can decide whether or not it wants to accept static policies. This document describes the use of the Framework for SIP User Agent Configuration [3] and The Extensible Markup Language Configuration Access Protocol (XCAP) [6] to deliver static policies to a UA. The SIP Framework for User Agent Configuration [3] enables a UA to discover configuration servers and retrieve a URL to configuration data. It also enables a configuration server to notify clients if new or updated configuration information is available. XCAP on the other hand provides the means to compose HTTP URLs, which point to components in configuration documents stored in XML format on a HTTP server. It allows clients to access these components on a fine grained basis. The major advantage of these configuration mechanisms is that they decouple requesting static policies from other tasks such as Hilt & Rosenberg Expires March 29, 2004 [Page 20] Internet-Draft SIP Session Policies September 2003 registering. Static policies may be provided by any entity in the network and not only by those involved in the registration process. Also, static policies may be updated at any time, independent of refreshing registrations. A drawback of this approach is the overhead needed for transmitting extra messages and the implementation overhead for providing the additional protocols in UAs and policy servers. 4.2.1 Discovering Policy Servers The SIP Framework for User Agent Configuration [3] defines a SUBSCRIBE/NOTIFY-based mechanism, which enables UAs to subscribe to static policy information. Before being able to receive notifications about the availability of static policies, the UA must discover the relevant policy servers. The first group of policy servers relevant for a UA are the home policy servers, i.e. servers responsible for the home domains of registered users. The URIs of these servers are derived by taking the host component of each registered address of record and adding "policy" as "userinfo" component to this address. For example, if an address of record is sip:bob@example.com, the UA would use the URI sip:policy@example.com to contact the policy server. Using "policy" as the "userinfo" component enables proxies to route the request to a policy server. The second group of policy servers a UA is supposed to contact are access network policy servers. A UA SHOULD discover the URIs of these policy servers by using the procedures described in [3]. To distinguish policy from other device configuration servers, the UA MUST use the term "policy" wherever [3] requests the use of "sipuaconfig" when generating the URI. Finally, UA may also have manually configured URIs to policy servers. 4.2.2 Subscribing to Static Policies A UA supporting static policies MUST send a SUBSCRIBE request to the discovered policy servers. It generates the SUBSCRIBE request as described in [3]. The To header field of a SUBSCRIBE request MUST be populated with the SIP URI of the policy server. The UA uses the From header field to indicate on behalf of whom it is subscribing to static policies. The UA SHOULD subscribe each registered user to all manually configured servers and all access network servers. To do so, the UA sends a separate SUBSCRIBE request for each registered address of record (which is inserted into the From header field) to every of the above Hilt & Rosenberg Expires March 29, 2004 [Page 21] Internet-Draft SIP Session Policies September 2003 policy servers. This way, all of these servers will learn about the users the UA has registered and may provide different static policies for them. A home policy server will typically not be able to provide static policies for users not registered in its domain. Therefore, a UA SHOULD only send a SUBSCRIBE for the respective address of record to a home policy server. The UA SHOULD subscribe to all manually configured policy servers and to all discovered home policy servers. It SHOULD subscribe to access network servers until the first successful response is received. UAs MUST include the event package name "policy" in the Event header. 4.2.3 Creating Notifications and Policy Objects The policy server generates NOTIFY messages as described in [3]. In particular, it notifies the subscribers of any changes in static policies. The policy server does not insert policy objects into the body of a NOTIFY. Instead, it includes URLs pointing to the policy objects on a server. This saves bandwidth and enables a server to insert all current policies in a NOTIFY instead of tracking the policies that are new to a UA. The UA can then decide which policy objects it wants to retrieve. The structure of a particular policy object needs to be defined in a policy package. The policy objects defined for this framework are based on XCAP [6]. As such, a policy package defines an XCAP application usage specification. This specification defines the XML schema and the semantics of policy documents, which represent the desired static policy objects. Policy servers will frequently maintain multiple static policy documents. For example, they may maintain a document describing general policies and multiple user-specific documents, which describe policies for particular users. A policy server MUST insert URLs to all relevant policy documents into a NOTIFY. For example, a NOTIFY generated for user bob@example.com could contain URLs to the generic policies applicable in domain example.com and the specific policies of user bob@example.com. The NOTIFY MUST contain URLs to all relevant policy documents even if they have not been changed since the transmission of the previous NOTIFY. Each URL MUST have an associated Content-ID entity header, which SHOULD change every time the referred policy document changes. This enables clients to determine if they have the latest version of the policy without having to download and compare the documents. Static policy objects are created by applying the procedures discussed in Section 4.1.2. They MUST be stored in the policy Hilt & Rosenberg Expires March 29, 2004 [Page 22] Internet-Draft SIP Session Policies September 2003 document tree on an XCAP server. The XCAP naming conventions for the construction of URLs MUST be applied. In particular, global policy objects MUST be stored in the "global" document sub-tree whereas user specific policy objects MUST be stored in the "users" sub-tree. A policy server MUST ensure that all URLs, it is inserting into a NOTIFY, refer to policy objects that are actually accessible in the XCAP document tree. This is in particular important if a policy server creates policy objects on the fly. For example, a new policy object might be generated when a new user requests policies for the first time. A policy server MUST NOT delay the transmission of a NOTIFY just because a relevant policy object is not yet available on the XCAP server. Instead, it SHOULD not refer to the new object in the current NOTIFY and create an additional NOTIFY as soon as the policy object becomes available on the XCAP server. The policy server MAY use XCAP to upload policy objects to the XCAP server. 4.2.4 Retrieving and Applying Static Policies After receiving a NOTIFY, the UA MUST determine if any of the URLs are pointing to a policy document, that is new or has changed since it was last downloaded. The UA SHOULD retrieve new or updated policy documents as soon as possible. After having retrieved a policy document, the UA can decide if it wants to accept the policies or not. Since no session is established at this point, the UAC does not need to inform the policy server about its decision. The UA must follow the procedures for applying static policies discussed in Section 4.1.4. The XCAP server MUST only allow read access for UAs to policy documents. Policies are used to request a certain behavior from a UA. The UA can decide if it wants to accept these policies or not but it can not modify them. In this respect, policy documents differ from device configuration data, which typically can be edited by the device. The XCAP server MUST determine if a client has authorization to read a resource. The default behavior is that the client of user X can read the policies under the "global" and the "users/X" document tree. Hilt & Rosenberg Expires March 29, 2004 [Page 23] Internet-Draft SIP Session Policies September 2003 5. Example Policy Package: Network-based Codec Selection 5.1 Dynamic Codec Selection This dynamic policy package enables a proxy to influence the codecs that are used within a session. The UAs are enabled to expose the codecs they support in MIOs. The MFOs created by the proxy contain the list of codecs allowed in the domain. The package is currently defined based on session descriptions in SDP [1] format. However, its is not restricted to SDP and can be used with other session description formats respectively. The name of this package is "codec". This package name is carried in the Media-Interface, the Media-Filter and the Reverse-Media-Filter header as defined in this specification. 5.1.1 Media Interface Object A codec MIO describes the codecs that are supported by the UA creating the MIO. This policy package defines a media type parameter for codec MIOs (in addition to the general parameters for MIOs). The parameter name consists of the media type, for which this MIO provides a policy. If used with a SDP session description, it MUST have the same value as the media name attribute in the media description (m=) of the corresponding SDP announcement. Typical values are "audio", "video", "application" and "data". The value of this parameter consists of a media stream id and one or more codec formats. The media stream id provides an identifier for a media stream. It MUST have a value that is unique within the scope of the session description. The media stream id MUST be present in each codec MIO and it MUST NOT be zero. The codec format describes the codecs allowed for this media type. The format of the value is specific to each media type and has the same structure as the SDP rtpmap parameter. A UA SHOULD list all codecs is has listed for the media stream in the corresponding session description. All elements of the parameter value are concatenated with a "+" symbol. An example for a Media-Interface header containing a codec MIO is Media-Interface: codec;audio=7736ai+pcmu/8000/1+pcma/8000/1+ eg711u/8000/1;video=hha9s8sd0+h261/90000 This header specifies two media streams, an audio and a video stream. The available audio codecs are pcmu, pcma, and eg711u. The only video Hilt & Rosenberg Expires March 29, 2004 [Page 24] Internet-Draft SIP Session Policies September 2003 codec supported is h261. A proxy would create the following SDP announcement template from this MIO: m=audio RTP/AVP 0 8 a=rtpmap:0 pcmu/8000/1 a=rtpmap:8 pcma/8000/1 a=rtpmap: eg711u/8000/1 m=video RTP/AVP 31 a=rtpmap:31 h261/90000 5.1.2 Media Filter Object A codec MFO describes the list of codecs that are allowed under this session policy. In addition to the general header parameters, this policy package defines a media type parameter, which is structured exactly as the media type parameter in codec MIOs. The semantics of this parameter is as follows: The media stream id MUST refer to a media stream contained in an MIO or contain the value zero. If the media stream id refers to a media stream in an MIO, the codec policy applies only to the referred media stream. If the media stream id is zero, the policy apply to all streams of the respective media type. A proxy MAY insert multiple media type parameters with different media stream id's for the same media type, if it wants to define different policies for different streams of the same type. The media format element MUST list all codecs that are allowed under the current policy. It MAY contain codecs that are not listed in a respective MIO. [TBD: Define consequence codes.] An example for a Media-Filter header containing a codec MFO is Media-Filter: codec;domain=example1.com; audio=0+pcmu/8000/1+eg711u/8000/1, codec;domain=example2.com;cns=100; audio=0+eg711u/8000/1;video=0 This header contains two MFOs, one inserted by proxy example1.com and one by example2.com. The policy of domain example1.com is that the set of allowed audio codecs is limited to pcmu and eg711u. Hilt & Rosenberg Expires March 29, 2004 [Page 25] Internet-Draft SIP Session Policies September 2003 Consequences for UAs rejecting this policy are not defined, which also indicates that this policy is optional. Domain example1.com has no policy for video codecs. The policy of domain example2.com is that only audio codec eg711u and no video can be used. Consequence of rejecting this policy is code 100, which indicates that the policy is mandatory. All policies apply to audio and video streams in general and are not bound to a stream listed in the MIO. A UA would create the following SDP filter from these MFOs: m=audio RTP/AVP a=rtpmap: eg711u/8000/1 m=video RTP/AVP A UA, that accepts this policy, removes all audio and video codecs that are not listed in the SDP filter. 5.2 Static Codec Selection [TBD: Give an example for static policies.] Hilt & Rosenberg Expires March 29, 2004 [Page 26] Internet-Draft SIP Session Policies September 2003 6. Security Considerations [TBD.] Hilt & Rosenberg Expires March 29, 2004 [Page 27] Internet-Draft SIP Session Policies September 2003 7. IANA Considerations [TBD.] Hilt & Rosenberg Expires March 29, 2004 [Page 28] Internet-Draft SIP Session Policies September 2003 8. Syntax This section describes the syntax extensions required for session policies. 8.1 Header Fields This table expands on tables 2 and 3 in SIP [9] and on table 1 and table 2 in Reliability of Provisional Responses in SIP [8]. Header field where proxy ACK BYE CAN INV OPT REG PRACK --------------------------------------------------------------- Media-Interface r o - - o - - o Media-Filter a o - - o - - o Reverse-Media-Filter r - - - o - - - Reverse-Media-Filter o - - - - - o Hilt & Rosenberg Expires March 29, 2004 [Page 29] Internet-Draft SIP Session Policies September 2003 References [1] Handley, M. and V. Jacobson, "SDP: Session Description Protocol", RFC 2327, April 1998. [2] Oran, D., Schulzrinne, H. and G. Camarillo, "The Reason Header Field for the Session Initiation Protocol", draft-ietf-sip-reason-01 (work in progress), May 2002. [3] Petrie, D., "A Framework for SIP User Agent Configuration", draft-ietf-sipping-config-framework-00 (work in progress), March 2003. [4] Rosenberg, J., "The Session Initiation Protocol (SIP) UPDATE Method", RFC 3311, October 2002. [5] Rosenberg, J., "Traversal Using Relay NAT (TURN)", draft-rosenberg-midcom-turn-01 (work in progress), March 2003. [6] Rosenberg, J., "The Extensible Markup Language (XML) Configuration Access Protocol (XCAP)", draft-rosenberg-simple-xcap-00 (work in progress), May 2003. [7] Rosenberg, J., "Requirements for Session Policy for the Session Initiation Protocol (SIP)", draft-ietf-sipping-session-policy-req-00 (work in progress), June 2003. [8] Rosenberg, J. and H. Schulzrinne, "Reliability of Provisional Responses in Session Initiation Protocol (SIP)", RFC 3262, June 2002. [9] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M. and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, June 2002. [10] Srisuresh, P., Kuthan, J., Rosenberg, J., Molitor, A. and A. Rayhan, "Middlebox communication architecture and framework", RFC 3303, August 2002. Hilt & Rosenberg Expires March 29, 2004 [Page 30] Internet-Draft SIP Session Policies September 2003 Authors' Addresses Volker Hilt Bell Labs/Lucent Technologies 101 Crawfords Corner Rd Holmdel, NJ 07733 USA EMail: volkerh@bell-labs.com Jonathan Rosenberg dynamicsoft 72 Eagle Rock Avenue East Hanover, NJ 07936 USA EMail: jdrosen@dynamicsoft.com Hilt & Rosenberg Expires March 29, 2004 [Page 31] Internet-Draft SIP Session Policies September 2003 Intellectual Property Statement The IETF takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on the IETF's procedures with respect to rights in standards-track and standards-related documentation can be found in BCP-11. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification can be obtained from the IETF Secretariat. The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to practice this standard. Please address the information to the IETF Executive Director. Full Copyright Statement Copyright (C) The Internet Society (2003). All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assignees. This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION Hilt & Rosenberg Expires March 29, 2004 [Page 32] Internet-Draft SIP Session Policies September 2003 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Acknowledgment Funding for the RFC Editor function is currently provided by the Internet Society. Hilt & Rosenberg Expires March 29, 2004 [Page 33]