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 <port> RTP/AVP 0 8 <no1>
   a=rtpmap:0 pcmu/8000/1
   a=rtpmap:8 pcma/8000/1
   a=rtpmap:<no1> eg711u/8000/1
   m=video <port> 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 <port> RTP/AVP <no1>
   a=rtpmap:<no1> eg711u/8000/1
   m=video <port> 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]