<?xml version="1.0" encoding="iso-8859-1"?>
<!-- comment -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"[]>
<?rfc toc="yes" ?>
<?rfc compact="yes" ?>
<?rfc sortrefs="no" ?>
<rfc ipr="trust200811" category="std" docName="draft-holmberg-sipcore-proxy-feature-04.txt" obsoletes="" updates="" submissionType="IETF" xml:lang="en">
	<front>
		<title abbrev="proxy feature">
			Indication of features supported by proxy
		</title>
		<author initials="C.H." surname="Holmberg" fullname="Christer Holmberg">
			<organization>Ericsson</organization>
			<address>
				<postal>
					<street>Hirsalantie 11</street>
					<code>02420</code>
					<city>Jorvas</city>
					<country>Finland</country>
				</postal>
				<email>christer.holmberg@ericsson.com</email>
			</address>
		</author>
		<author initials="I.S." surname="Sedlacek" fullname="Ivo Sedlacek">
			<organization>Ericsson</organization>
			<address>
				<postal>
					<street>Scheelevägen 19C</street>
					<code>22363</code>
					<city>Lund</city>
					<country>Sweden</country>
				</postal>
				<email>ivo.sedlacek@ericsson.com</email>
			</address>
		</author>
		<author initials="H.K." fullname="Hadriel Kaplan" initials="H." surname="Kaplan">
			<organization>Acme Packet</organization>
			<address>
				<postal>
					<street>71 Third Ave.</street>
					<city>Burlington</city>
					<region>MA</region>
					<code>01803</code>
					<country>USA</country>
				</postal>
				<email>hkaplan@acmepacket.com</email>        
			</address>
		</author>		
		
		<date year="2011" />
		<area>Transport</area>
		<workgroup>SIPCORE Working Group</workgroup>
		<keyword>SIP</keyword>
		<keyword>proxy</keyword>
		<keyword>feature</keyword>
		<keyword>feature-tag</keyword>
		<keyword>capabiltiy</keyword>		
		<abstract>
			<t>
				This document defines a new SIP header field, Feature-Caps, that can
				be used by SIP entities to indicate support of features and capabilities,
				in cases where the Contact header field contains a URI that does not 
				represent the SIP entity that wants to indicate support of its features and 
				capabilities.
			</t>
		</abstract>
	</front>
	<middle>
		<section title="Introduction" toc="default">
			<t>
				The Session Initiation Protocol (SIP) "Caller Preferences" extension,
				defined in RFC 3840 <xref target="RFC3840" pageno="false" format="default"/>, 
				provides a mechanism that allows a SIP message to convey information 
				relating to the originator's features and capabilities, using the Contact 
				header field.
			</t>
			<t>
				This document defines a new SIP header field, Feature-Caps, that can
				be used by SIP entities to indicate support of features and capabilities,
				in cases where the Contact header field contains a URI that does not 
				represent the SIP entity that wants to indicate support of its features and 
				capabilities. Such cases are:
				<t>
					<list style="symbols">
						<t>
							- The SIP entity acts as a SIP proxy.
						</t>
						<t>
							- The SIP entity acts as a SIP registrar.
						</t>
						<t>
							- The SIP entity acts as a B2BUA, where the 
							Contact header field URI represents another SIP entity.
						</t>					
					</list>
				</t>
			</t>							
		</section>
		
		<section title="Conventions" toc="default">
			<t>
				The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", 
				"RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in 
				BCP 14, RFC 2119 <xref target="RFC2119" pageno="false" format="default" />.
			</t>
		</section>

		<section title="Definitions" toc="default">
			<t>
				Downstream SIP entity: SIP entity in the direction towards which a SIP request is sent.
			</t>
			<t>
				Upstream SIP entity: SIP entity in the direction from which a SIP request is received.
			</t>
		</section>
		
		<section title="User Agent (UA) Behavior" anchor="sec-ua" toc="default">
			<section title="General" anchor="sec-ua-gen" toc="default">			
				<t>
					If the URI in a Contact header field of a request or response represents 
					a UA, the UA MUST NOT indicate supported features and capabilities using 
					a Feature-Caps header field within that request or response.
				</t>
				<t>
					When a UA receives a SIP request, or response, that contains one or more 
					Feature-Caps header fields, the Feature Tags in the header field inform 
					the UA is about the features supported by the entities that inserted the 
					header fields. Procedures how features are invoked are outside the scope 
					of this specification, and MUST be described by individual Feature Tag 
					specifications.
				</t>
				<t>
					When the UA receives the SIP request or the response, the feature
					tags in the topmost Feature-Caps header field will represent the
					supported features "closest" to the UA.
				</t>				
			</section>
			<section title="B2BUA Behavior" anchor="sec-ua-b2bua" toc="default">			
				<t>
					The procedures in this section applies to UAs that are part of B2BUAs, but 
					where the URI in the Contact header field does not represent the UA, because 
					the B2BUA is also acting as a proxy and inserts its URI e.g. in a Record-Route 
					header field.
				</t>
				<t>
					When a UA sends a SIP request, if the UA wants to indicate support of features
					towards its downstream SIP entities, it adds a Feature-Caps header field to the 
					request, together with one or more Feature Tags associated with the supported features, 
					before it forwards the request.
				</t>
				<t>
					If the SIP request is triggered by another SIP request that the B2BUA has received, the
					UA MAY forward those Feature-Caps header field by copying them to the outgoing SIP request, 
					similar to a SIP proxy, before it adds its own Feature-Caps header field to the SIP request.				
				</t>
				<t>
					When a UA receives a SIP response, if the UA wants to indicate support of features
					towards its upstream SIP entities, it adds a Feature-Caps header field to the response, 
					together with one or more Feature Tags associated with the supported features, before it 
					forwards the response.
				</t>
				<t>
					If the SIP response is triggered by another SIP response that the B2BUA has received, the
					UA MAY forward those Feature-Caps header field by copying them to the outgoing SIP response, 
					similar to a SIP proxy, before it adds its own Feature-Caps header field to the SIP response.				
				</t>
			</section>
			<section title="Registrar Behavior" anchor="sec-ua-reg" toc="default">			
				<t>
					If a SIP registrar wants to indicate support of features towards its upstream SIP entities,
					it can insert a Feature-Caps header field, together with Feature Tags associated with the
					supported features, in a REGISTER response.
				</t>
			</section>
		</section>
		
		<section title="Proxy behavior" anchor="sec-proxy" toc="default">			
			<t>
				When a proxy receives a SIP request, if the proxy wants to indicate support of features
				towards its downstream SIP entities, it adds a Feature-Caps header field to the request, 
				together with one or more Feature Tags associated with the supported features, before it 
				forwards the request.
			</t>
			<t>
				When a proxy adds a Feature-Caps header field to a SIP request, it MUST place the header 
				field before any existing Feature-Caps header field in the request.
			</t>
			<t>
				When a proxy receives a SIP response, if the proxy wants to indicate support of features
				towards its upstream SIP entities, it adds a Feature-Caps header field to the response, 
				together with one or more Feature Tags associated with the supported features, before it 
				forwards the response.
			</t>
			<t>
				When a proxy adds a Feature-Caps header field to a SIP response, it MUST place the header 
				field before any existing Feature-Caps header field in the response. 
			</t>
		</section>

		<section title="Feature-Caps Header Field Definition" anchor="sec-fc" toc="default">
			<section title="General" anchor="sec-fc-sip-gen" toc="default">
				<t>
					This section describes how the Feature-Caps header field is
					used, and the associated semantics, with different SIP methods and
					response codes.
				</t>
				<t>
					NOTE: Future specification can define usage semantics of
					the Feature-Caps header fields for SIP methods, response codes and
					request types not specified in this specification.
				</t>
			</section>
			<section title="SIP Dialog" anchor="sec-fc-sip-dia" toc="default">				
				<t>
					The Feature-Caps header field can be used within an initial SIP request for a dialog, 
					within a target refresh SIP request, and within any 18x or 2xx response associated 
					with such requests.
				</t>
				<t>
					If a Feature Tag is inserted in a Feature-Caps header field of such request or such 
					response, the feature associated with the Feature Tag MUST be supported for the dialog, 
					until the next time the dialog target is refreshed, or the dialog is terminated.
				</t>
				<t>
					For a given dialog the entity MUST use the same Feature-Caps header field value 
					(if included) in all 18x and 2xx responses for the same transaction.
				</t>
			</section>
			<section title="SIP Registration (REGISTER)" anchor="sec-fc-sip-reg" toc="default">				
				<t>
					The Feature-Caps header field can be used within a SIP REGISTER request, and within 
					the 200 (OK) response of such request.
				</t>
				<t>
					If a Feature Tag is inserted in a Feature-Caps header field of a SIP REGISTER request or
					response, the feature associated with the Feature Tag MUST be supported for
					the registration, and all SIP transactions associated with the registration, until the 
					registration is re-freshed or terminated.
				</t>
			</section>
			<section title="SIP Stand-Alone Transactions" anchor="sec-fc-sip-sa" toc="default">
				<t>
					The Feature-Caps header field can be used within an request for standalone SIP transaction, 
					and within any 18x or 2xx response associated with such request.
				</t>
				<t>
					If a Feature Tag is inserted in a Feature-Caps header field of an
					request or response for a standalone transaction, the feature associated
					with the Feature Tag MUST be supported for the duration of the 
					standalone transaction.
				</t>
			</section>
			<section title="SIP Capability Query (OPTIONS)" anchor="sec-fc-sip-opt" toc="default">TBD</section>			
		</section>
		
		<section title="Syntax" toc="default">
			<section title="General" toc="default">
				<t>
					Each value of a Feature-Caps header field MUST contain a "*" value, followed
					by one or more Feature Tags, associated with the supported features, separated by 
					semicolon (";").
				</t>
				<t>
					NOTE: A "*" value means that no information regarding which proxy, or domain, that 
					support the features associated with the Feature Tags, is provided.
				</t>
				<t>
					NOTE: When used in a Contact header field, a "*" value has an "any URI" meaning. When 
					used in a Feature-Caps header field, it simply means that no URI information is provided.
				</t>
			</section>
			<section title="ABNF" toc="default" anchor="S.ABNF">
				<t>
					The ABNF for the Feature-Caps header fields is:
				</t>
				<figure title="ABNF" anchor="fig-abnf" suppress-title="false" align="left" alt="" width="" height="">
          			<artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height=""><![CDATA[ 
					
        Feature-Caps = ("Feature-Caps" / "fc") HCOLON fc-value
                       *(COMMA fc-value)   
        fc-value     = "*" *(SEMI feature-param)
                       ;;feature-param from RFC 3840
                       
					]]></artwork>
      			</figure>
			</section>
		</section>


		<section title="Feature Tag Usage With Feature-Caps" anchor="sec-fc-use" toc="default">
			<t>
				Feature tags inserted in a Feature-Caps header field indicate that the 
				SIP entity that inserted the header field supports the associated 
				features.
			</t>
			<t>	
				In order to use a Feature Tag in a Feature-Caps header field, 
				the Feature Tag specification MUST specify the semantics of the feature 
				tag when inserted in the Feature-Caps header field. Unless the feature 
				specification defines such semantics, a the Feature Tag MUST NOT be used 
				in a Feature-Caps header field.
			</t>
			<t>
				Within a given Feature-Caps header field, Feature Tags are listed in a non-priority 
				order, and for a given header field any order of listed Feature Tags have the 
				same meaning. For example, "foo;bar" and "bar;foo" have the same meaning 
				(i.e. that the entity that inserted the Feature Tags supports the features 
				associated with the "foo" and "bar" Feature Tags.
			</t>						
		</section>	
	    			
		<section anchor="S.FT" title="Feature Tag Requirements">
			<section anchor="S.FT.Gen" title="General">
				<t>
					This section provides guidance on how to define an Feature Tag, and
					what information needs to exist in an Feature Tag specification.
				</t>
				<t>
					It is bad practice for Feature Tag specifications to repeat procedures 
					defined in this document, unless needed for clarification or emphasis 
					purpose.
				</t>
				<t>
					Feature Tag specifications MUST NOT weaken any behavior designated 
					with "SHOULD" or "MUST" in this specification.  However, Feature Tags 
					specifications MAY strengthen "SHOULD", "MAY", or "RECOMMENDED" 
					requirements to "MUST" strength if features associated with the Feature 
					Tag require it.
				</t>
				<t>
					Feature Tag specifications MUST address the issues defined in the 
					following subsections, or document why an issue is not applicable for 
					the specific Feature Tag.
				</t>
			</section>
			<section anchor="S.FT.Over" title="Overall Description">			
				<t>
					The Feature Tag specification MUST contain an overall description of 
					the Feature Tag: a description of the feature associated with the 
					Feature Tag, and a description what information is carried in associated 
					Feature Tag values (if any).
				</t>
			</section>
            		<section anchor="S.FT.Appl" title="Applicability">			
				<t>
					The Feature Tag specification MUST describe why the support of the
					feature can not be indicated in a SIP Contact header field <xref 
					target="RFC3261"/>, using the mechanism defined in RFC 3840. The reason
					is either that the entity inserting the Feature Tag is acting as
					a SIP proxy, or SIP registrar, or a B2BUA but is not represented by
					the URI in the Contact header field.
				</t>
			</section>
			<section anchor="S.FT.Name" title="Feature Tag Name">			
				<t>
					The Feature Tag specification MUST define an Feature Tag name, 
					which entities use as a header field value to identify the Feature 
					Tag in the Feature-Caps header field. The Feature Tag name MUST 
					conform to the ABNF defined in <xref target="S.ABNF"/>.
				</t>
			</section>
			<section anchor="S.FT.Parm" title="Feature Tag Values">
				<t>
					The Feature Tag specification MAY define Feature Tag values, 
					associated with the Feature Tag. A Feature Tag value MUST 
					conform to the ABNF defined in <xref target="S.ABNF"/>.
				</t>
				<t>
					The Feature Tag specification MUST define the syntax and semantics 
					of the values associated with the Feature Tag. In addition, the 
					specification MUST define whether there are restrictions regarding 
					the usage of specific values.
				</t>
				<t>
					Feature Tags can share value defined for other Feature Tags, 
					but the value is Feature Tag specific, and the value semantics MUST
					be defined for each Feature Tag tag uses the value.					
				</t>			
			</section>
			<section anchor="S.FT.Tag" title="SIP Option Tags">
				<t>
					The Feature Tag specification MAY define SIP option tags, which can 
					be used as describe in RFC 3261. 
				</t>
				<t>
					The registration requirements for option tags are defined in RFC 5727 
					<xref target="RFC5727"/>.
				</t>
			</section>
			<section anchor="S.FT.Rest" title="Feature Tag Usage Restrictions">
				<t>
					If there are restrictions on how entities can insert a Feature 
					Tag, the Feature Tag specification MUST document such restrictions.
				</t>
				<t>			
					There can be restrictions related to whether entities are allowed 
					to insert Feature Tags in registration related messages, standalone 
					transaction messages, or dialog related messages, whether entities 
					are allowed to insert Feature Tags in requests or responses, whether 
					entities also need to support other features in order to insert a 
					Feature Tag, and whether entities are allowed to insert Feature 
					Tags togheter with other Feature Tags.
				</t>
			</section>
			<section anchor="S.FT.Sec" title="Feature Tag Security Considerations">
				<t>
					If the information carried in a Feature Tag requires a certain 
					level of security, the Feature Tag specification MUST describe 
					the mechanisms that entities need to use in order to provide the 
					required security.
				</t>
				<t>
					If the Feature Tag specification does not require any additional
   					security, other than what the underlying SIP protocol provides, this
   					MUST be stated in the Feature Tag specification.
				</t>
			</section>
			<section anchor="S.FT.Proc" title="Implementation Details">			
				<t>
					It is strongly RECOMMENDED that the Feature Tag specification defines
   					the procedure regarding how implementors shall implement and use the
   					Feature Tag, or refer to other locations where implementors can find
   					that information.
				</t>
				<t>
					NOTE: Sometimes an Feature Tag designer might choose to not
      					reveal the details of an Feature Tag.  However, in order to allow
      					multiple implementations to support the Feature Tag, Feature Tag
      					designers are strongly encouraged to provide the implementation
      					details.
				</t>
			</section>
			<section anchor="S.FT.Ex" title="Examples">
				<t>
					It is RECOMMENDED that the Feature Tag specification provide
   					demonstrative message flow diagrams, paired with complete messages
   					and message descriptions.
				</t>
				<t>
					Note that example flows are by definition informative, and do not
   					replace normative text.
				</t>
			</section>
		</section>
		
		<section title="IANA Considerations" toc="default">
			<section title="Registration of the Feature-Caps header field">
				<t>
					This specification registers a new SIP header field, Feature-Caps, according 
					to the process of RFC 3261 <xref target="RFC3261" pageno="false" format="default"/>.
				</t>
				<t>
					The following is the registration for the Feature-Caps header field:
				</t>
				<t>
					RFC Number: RFC XXX
				</t>
				<t>
					Header Field Name: Feature-Caps
				</t>
				<t>
					Compact Form: fc
				</t>
			</section>
    		</section>

    		<section title="Security Considerations" anchor="sec-security" toc="default">
			<t>				
				Feature tags can provide sensitive information about a SIP entity.
				RFC 3840 cautions against providing sensitive information to
				another party. Once this information is given out, any use may be 
				made of it.
			</t>
		</section>
		
		<section title="Acknowledgements" anchor="sec-acks" toc="default">
			<t></t>
		</section>
		
		<section title="Change Log">
			<t>[RFC EDITOR NOTE: Please remove this section when publishing]</t>
			<t>
				Changes from draft-holmberg-sipcore-proxy-feature-03
				<list style="symbols">
					<t>
						Hadriel Kaplan added as co-author.
					</t>
					<t>
						Terminology change: instead of talking of proxies, talk about
						entities which are not represented by the URI in a Contact header
						field 
						(http://www.ietf.org/mail-archive/web/sipcore/current/msg04449.html).
					</t>
					<t>
						Clarification regarding the usage of the header field in 18x/2xx responses
						(http://www.ietf.org/mail-archive/web/sipcore/current/msg04449.html).
					</t>
					<t>
						Specifying that feature support can also be indicated in target
						refresh requests 
						(http://www.ietf.org/mail-archive/web/sipcore/current/msg04454.html).
					</t>
					<t>
						Feature Tag specification registration information added.
					</t>
				</list>
			</t>	
			<t>
				Changes from draft-holmberg-sipcore-proxy-feature-02
				<list style="symbols">
					<t>
						Definition, and usage of, a new header field, instead of
						Path, Record-Route, Route and Service-Route.
					</t>					
				</list>
			</t>	
			<t>
				Changes from draft-holmberg-sipcore-proxy-feature-01
				<list style="symbols">
					<t>Requirement section added</t>					
					<t>Use-cases and examples updated based on work in 3GPP</t>					
				</list>
			</t>	
			<t>
				Changes from draft-holmberg-sipcore-proxy-feature-00
				<list style="symbols">
					<t>Additional use-cases added</t>
					<t>Direction section added</t>
				</list>
			</t>		
		</section>		
	</middle>
	
	<back>
		<references title="Normative References">
			<?rfc include="reference.RFC.2119"?>
			<?rfc include="reference.RFC.3261"?>			
			<?rfc include="reference.RFC.3840"?>			
			<?rfc include="reference.RFC.5727"?>
		</references>
		<references title="Informative References">	  			
			<?rfc include="reference.3GPP.23.237"?>
			<?rfc include="reference.3GPP.24.837"?>
		</references>
	</back>
</rfc>
