<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="no"?>
<?rfc tocdepth="6"?>
<?rfc compact="yes"?>
<?rfc subcompact="yes"?>
<?rfc symrefs="no"?>
<?rfc sortrefs="yes"?>
<rfc ipr="full3978" category="exp" docName="draft-willis-sip-answeralert-00">
	<front>
		<title abbrev="SIP Answering and Alerting Modes">Requesting Answering
			and Alerting Modes for the Session Initiation Protocol (SIP) 
			</title>		<author fullname="Dean Willis" initials="D.W." surname="Willis" 
			role="editor">
			<organization>Cisco Systems</organization>
			<address>
				<postal>
					<street>3100 Independence Pkwy #311-164</street>
					<city>Plano</city>
					<code>75075</code>
					<region>Texas</region>
					<country>USA</country>
				</postal>
				<phone>unlisted</phone>
				<facsimile>unlisted</facsimile>
				<email> dean.willis@softarmor.com </email>
			</address>
		</author>
		<author fullname="Andrew Allen" initials="A.A." surname="Allen">
			<organization> Research in Motion (RIM) </organization>
			<address>
				<postal>
					<street>122 West John Carpenter Parkway, Suite 430</street>
					<city>Irving</city>
					<code>75039</code>
					<region>Texas</region>
					<country>USA</country>
				</postal>
				<phone>unlisted</phone>
				<facsimile>unlisted</facsimile>
				<email> aallen@rim.com </email>
			</address>
		</author>
		<date month="June" year="2005"/>
		<area>Transport Area</area>
		<workgroup> SIP Working Group </workgroup>
		<abstract>
			<t>This document defines two SIP extension header fields and 
				associated option tags that can be used in INVITE requests to 
				convey the requester's preference for user-interface handling 
				of that request. The first header, "Answer-Mode", expresses a 
				preference as to whether the target node's user interface waits 
				for user input before accepting the request or instead accepts 
				the request without waiting on user input. The second header, 
				"Alert-Mode", expresses a preference as to whether the target 
				node's user interface alerts the user about the request. These 
				behaviors have applicability to applications such as 
				Push-to-Talk and to diagnostics like loop-back. This document 
				also defines use of the SIP extension header field 
				"Answer-Mode", in a response to an INVITE request to inform the 
				requester as to which answer mode was actually applied to this 
				request. There are significant security considerations, 
				especially when the two request options are used together. </t>
		</abstract>
		<note title="Requirements Language">
			<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, 
				&quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;, 
				&quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, 
				&quot;RECOMMENDED&quot;, &quot;MAY&quot;, and 
				&quot;OPTIONAL&quot; in this document are to be interpreted as 
				described in <xref target="RFC2119"/>.</t>
		</note>
	</front>
	<middle>
		<section title="Background">
			<t>There has been discussion of how to deal with "auto-answer" and 
				related issues in the SIP community for several years. 
				Discussion in the SIPPING working group, augmented by input 
				from other organizations such as the Open Mobile Alliance, 
				resulted in a consensus observed in the SIPPING meeting at IETF 
				62 to extend SIP, which is defined in <xref target="RFC3261"/>. 
				Further discussion of the topic on the SIP mailing list after 
				IETF 62 led to a consensus to pursue this work in the SIP 
				working group as a standards-track effort.</t>
			<t>Two different use cases converged to create the consensus for 
				the development of this specification. Other use cases 
				presumably exist, but two is enough to establish the level of 
				reusability required to justify a standards-track extension as 
				opposed to a "P-header" under <xref target="RFC3427"/>.</t>
			<t>The first key use case was the requirement for diagnostic 
				loopback calls. In this sort of scenario, a testing service 
				sends an INVITE to a node being tested. The tested node accepts 
				and a dialog is established. But rather than establishing a 
				two-way media flow, the tested node loops back or "echoes" 
				media received from the testing service back toward the testing 
				service. The testing service can then analyze the media flow 
				for quality and timing characteristics. SDP usage for this sort 
				of flow is described in <xref 
				target="I-D.hedayat-media-loopback"/>. In this sort of 
				application, it may not be needful that the human using the 
				node under test interact with the node in any way for the test 
				to be satisfactorily executed. In some cases, it might be 
				appropriate to alert the user to the ongoing test, and in other 
				cases it might not be.</t>
			<t>The second use case is that of "Push to Talk" applications as 
				described in <xref target="I-D.allen-sipping-poc-p-headers"/> 
				and relates to a service being specified by the Open Mobile 
				Alliance. In this sort of environment, SIP is used to establish 
				`a dialog supporting asynchronous delivery of unidirectional 
				media flow, giving a user experience like that of a traditional 
				two-way radio. It is conventional for the INVITES used to be 
				automatically accepted by the called UA (User Agent), and the 
				media is commonly played out on a loudspeaker.</t>
			<t>These sorts of mechanisms are not required to provide the 
				functionality of an "answering machine" or "voice mail 
				recorder". Such a device knows that it should answer and does 
				not require a SIP extension to support its behavior.</t>
			<t>Much of the discussion of this topic in working group meetings 
				and on the mailing list dealt with disambiguating "answering 
				mode" from "alerting mode". Some early work, such as <xref 
				target="I-D.allen-sipping-poc-p-headers"/>, did not make this 
				distinction. We therefore proceed with the following 
				definitions: <list style="symbols"> <t>Answering Mode includes 
				behaviors in a SIP UA relating to acceptance or rejection of a 
				request that are contingent on interaction between the UA and 
				the user of that UA after the UA has received the request. We 
				are principally concerned with the user interaction involved in 
				accepting the request and initiating an active session. An 
				example of this might be pressing the "yes" button on a mobile 
				phone.</t> <t>Alerting Mode includes behaviors in a SIP UA 
				relating to to informing the user of the UA that a request to 
				initiate a session has been received. An example of this might 
				be activating the ring tone of a mobile phone.</t> </list> </t>
		</section>
		<section title="Requirements">
			<t>Requirements in the following are expressed relative to the node 
				initiating an INVITE request (UAC), the node receiving and 
				potentially responding to that request (UAS), and the users of 
				those nodes (UAC-user and UAS-user). </t>
			<section title="Requirements for Requesting an Answering Mode">
				<t> The requirements relating to requesting a specific 
					answering mode include: <vspace blankLines="1"/></t>
				<list style="hanging">
					<t hangText="Req-1:"> It MUST be possible for UAC to ask 
						that the UAS answer the request without requiring 
						interaction between UAS-user and the user interface 
						(UI) of the UAS. We refer to this as "automatic answer 
						mode". This mode is useful for diagnostic loopback 
						procedures and critical for "two-way radio" or "push to 
						talk" applications.</t>
					<t hangText="Req-2:"> It MUST be possible for UAC to ask 
						that the UAS answer the request only after UAS-user has 
						directed UAS to answer this specific request. We refer 
						to this as "manual answer mode". This mode is useful in 
						"push to talk" applications where the sender requires a 
						reassurance that somebody is listening.</t>
					<t hangText="Req-3:"> It MUST be possible for UAS to apply 
						local policy to each request and determine whether or 
						not to provide the requested answer mode for this 
						request. This policy determination MAY include 
						authentication checks, authorization against "buddy 
						lists" as used in some presence systems, or other 
						mechanisms outside the scope of this specification. 
						This behavior is critical in avoiding major security 
						pitfalls, such as turning the victim's phone into a 
						"bug" or eavesdropping device.</t>
					<t hangText="Req-4:"> It MUST be possible for UAC to 
						indicate in the request that this extension for 
						selecting answering mode is required, such that UAS 
						MUST reject the request if it does not support this 
						extension. This can be used to prevent automated 
						diagnostic loopback requests from annoying nodes not 
						supporting this extension</t>
					<t hangText="Req-5:"> It MUST be possible for UAC to 
						indicate at least two different priority levels for the 
						desired answer mode. We refer to these as "normal" and 
						"override" priorities. In normal usage, we expect that 
						"normal" priority would be used in a user-to-user 
						fashion, whereas "override" priorities would be used 
						for diagnostic procedures or some sorts of emergency 
						session establishment. This behavior allows a device to 
						be set up such that it might not auto-answer routine 
						calls, but could be convinced to auto-answer an 
						emergency or other high-priority call.</t>
					<t hangText="Req-6:"> It MUST be possible for UAS or 
						proxies acting on behalf of UAS to apply policy 
						relative to the indicated priority level. This MAY 
						include having different authentication and or 
						authorization procedures for each priority level. This 
						capability allows functions like time-of-day call 
						screening, so that routine calls that would normally be 
						rejected locally by the device would be blocked by a 
						proxy without access network costs, but high-priority 
						calls that would override routine call screening could 
						be passed to the device.</t>
					<t hangText="Req-7:"> It MUST be possible for UAS to 
						indicate its support for the selection of answer modes 
						in a REGISTER request so that that the routing proxy 
						can selectively route requests requiring the selection 
						of answer mode to UAS. This requirement enables the 
						functions described in the next requirement.</t>
					<t hangText="Req-8:"> It MUST be possible for the UAC to 
						construct the request in such a way that the routing 
						proxy infrastructure, if present, will select only 
						contacts supporting the selection of answer modes. This 
						can efficiently (minimal access network traffic and 
						minimal forking load) prevent devices that do not 
						support this extension from being reached by requests 
						that require this extension. Note that this requirement
						does NOT include selection of a singular UAS from a set
						to which the request might be forked.</t>
					<t hangText="Req-9:"> It MUST be possible for UAC to 
						discover whether UAS supports the selection of answer 
						modes via a SIP OPTIONS request.</t>
					<t hangText="Req-10:"> It MUST be possible for an 
						intermediate proxy acting on behalf of UAC or UAS to 
						apply policy relative to the answer mode indicated in a 
						request. For example, a proxy may require special 
						authentication and authorization for a request that 
						places a high priority on auto-answer capabilities. 
						Application of policy here means altering the requested 
						answer mode and/or inserting or deleting a request for 
						a specific answer mode.</t>
				</list>
			</section>
			<section title="Requirements for Requesting an Alerting Mode">
				<t> The requirements relating to requesting a specific alerting 
					mode include:<vspace blankLines="1"/> </t>
				<list style="hanging">
					<t hangText="Req-11:"> It MUST be possible for UAC to ask 
						that UAS answer the request without alerting UAS-user. 
						This allows for diagnostic loopbacks that do not 
						needlessly interrupt the user of a device.</t>
					<t hangText="Req-12:"> It MUST be possible for UAS to apply 
						local policy to each request and determine whether or 
						not to provide the requested alerting mode for this 
						request. This policy determination MAY include 
						authentication checks, authorization against "buddy 
						lists" as used in some presence systems, or other 
						mechanisms outside the scope of this specification.</t>
					<t hangText="Req-13:"> It MUST be possible for UAC to 
						indicate in the request that this extension for 
						selecting alerting mode is required, such that UAS MUST 
						reject the request if it does not support this 
						extension. This capability augments the ability of 
						automated testing functions to operate non-intrusively 
						when some devices in a network do not support this 
						extension.</t>
					<t hangText="Req-14:"> It MUST be possible for UAC to 
						discover whether UAS supports the selection of alerting 
						modes via a SIP OPTIONS request.</t>
					<t hangText="Req-15:"> It MUST be possible for UAS to 
						indicate its support for the selection of alerting 
						modes in a REGISTER request so that that the routing 
						proxy can selectively route requests requiring the 
						selection of alerting mode to UAS. This supports the 
						functionality described in the following 
						requirement.</t>
					<t hangText="Req-16:"> It MUST be possible for UAC to 
						construct the request in such a way that the routing 
						proxy infrastructure, if present, will select only 
						contacts supporting the selection of alerting modes. 
						This allows the proxy network to efficiently avoid 
						sending the request to nodes that do not support this 
						extension.</t>
					<t hangText="Req-17:"> It MUST be possible for an 
						intermediate proxy acting on behalf of UAC or UAS to 
						apply policy relative to the alerting mode indicated in 
						a request. Application of policy here means altering 
						the requested alerting mode and/or inserting or 
						deleting a request for a specific alerting mode.</t>
				</list>
			</section>
			<section title 
				="Requirements for Indicating the Applied Answer 
      Mode in a Response">
				<t>The requirements relating to indicating which answering mode 
					applied to the request include:<vspace blankLines="1"/></t>
				<list style="hanging">
					<t hangText="Req-18:"> It MUST be possible for UAS when 
						sending a positive response to a request to indicate 
						the answering mode that applied to the request. This 
						allows UAC to inform UAC-user as to whether the request 
						was answered automatically or as a result of user 
						interaction, knowledge that may be important in 
						informing UAC-user's usage of the session.</t>
					<t hangText="Req-19:"> UAS SHOULD accurately represent the 
						answering mode that was applied, but MAY either not 
						include this information or MAY misinform UAC in order 
						to maintain the privacy expectations of UAS-user. 
						Consequently, applications MUST NOT rely on the 
						veracity of this information.</t>
				</list>
			</section>
		</section>
		<section title="Syntax of Header Fields and Tags">
			<section title="Syntax of Header Field and Tags">
				<t>
					<list style="hanging">
						<t 
							hangText="The syntax for the header fields defined in
							this document is:"> <vspace blankLines="0"/>
							 Answer-Mode = "Answer-Mode" HCOLON answer-mode <vspace blankLines="0"/> 
							 answer-mode = "Manual" / "ManualReq" / "Auto" / "AutoReq"<vspace blankLines="0"/> 
							 Alert-Mode = "Alert-Mode" HCOLON alert-mode <vspace blankLines="0"/>
							 alert-mode = "Normal" / "Null" 
							</t>
					</list>
				</t>
				<t>
					<list style="hanging">
						<t hangText="The syntax of the Alert-Mode option tag is:">
							<vspace blankLines="0"/>
							 Alert-Mode = "alertmode" <vspace /> </t>
					</list>
				</t>
				<t>
					<list style="hanging">
						<t hangText="The syntax of the Answer-Mode option tag is:">
							<vspace blankLines="0"/>
							 Answer-Mode = "answermode" </t>
					</list>
				</t>
				<t>
					<list style="hanging">
						<t 
							hangText="The syntax of the feature tag
							indicating support for selection of the answer mode is:">
							<vspace blankLines="0"/>
							Answer-Mode = "answermode"<vspace blankLines="2" 
							/> The syntax for feature tags is defined in <xref 
							target= "RFC2533" /> <vspace blankLines = "1" /> 
							The value range of the Answer-Mode feature tag is 
							binary, with values of "TRUE" or "FALSE". </t>
					</list>
				</t>
			</section>
			<section title="Amendments to Table 2 and 3 of RFC3261">
				<t>The allowable usage of header fields is described in Tables 
					2 and 3 of <xref target='RFC3261'/>. The following 
					additions to this table are needed for the extension header 
					fields defined in this document.</t>
				<figure anchor='figureT2'>
					<preamble>Additions to SIP Table 3:</preamble>
					<artwork><![CDATA[

      Header field          where   proxy ACK BYE CAN INV OPT REG PRA
      _______________________________________________________________
      Answer-Mode          I    adm    -   -   -   -   -   -   -
      Alert-Mode           I      adm    -   -   -   -   -   -   -
      Answer-Mode         200            -   -   -   X   -   -   - 

      

          ]]></artwork>
				</figure>
			</section>
		</section>
		<section 
			title="Usage of the Answer-Mode Header Field, Option, and Media Feature Tags in a Request">
			<t>The Answer-Mode header field is used by a UAC to request 
				specific handling of an INVITE request by the responding UAS 
				related to "automatic answering" functionality. If no 
				Answer-Mode header field is included in the request, answering 
				behavior is at the discretion of the UAS, as it would be in the 
				absence of this specification. The desired handling is 
				indicated by the the value of the Answer-Mode header field, as 
				follows:<vspace blankLines="0"/></t>
			<list style="hanging">
				<t hangText="Manual:"> The UAS is asked to not accept the 
					request (send a 200 OK) until the user of the UAS has 
					interacted with the user interface (UI) of the UAS in such 
					a way as to indicate that the user desires the UAS to 
					accept the request.</t>
				<t hangText="ManualReq:"> The UAS is strongly asked to accept 
					the request manually, as in "Manual". Further, the UAS is 
					asked to override local user preferences relating to 
					automatic answer, and answer manually even if the user 
					preferences are to automatically answer requests having a 
					Answer-Mode header field value of "Manual". The UAS is also 
					asked NOT to answer automatically, and to reject the 
					request if it is unwilling to answer manually. </t>
				<t hangText="Auto:"> The UAS is asked to accept the request 
					automatically, without waiting for the user of the UAS to 
					interact with the UI of the UAS in such a way as to 
					indicate that the user desires the UAS to accept the 
					request.</t>
				<t hangText="AutoReq:"> The UAS is strongly asked to accept the 
					request automatically, as in "Auto". Further, the UAS is 
					asked to override local user preferences relating to 
					automatic answer, and answer automatically even if the user 
					preferences are to not automatically answer requests having 
					a Answer-Mode header field value of "Auto". The UAS is also 
					asked NOT to answer manually, and to reject the request if 
					it is unwilling to answer automatically.</t>
			</list>
			<section title="Procedures at the UAC">
				<section title="All Requests">
					<t> A UAC supporting this specification indicates its 
						support for this extension by including an option tag 
						of "answermode" in the Supported header field of all 
						requests it sends. </t>
				</section>
				<section title="REGISTER Transactions">
					<t>To indicate that it supports the answer-mode negotiation 
						feature, a UA includes a SIP extension feature tag of 
						"answermode" in the Contact: header field of its 
						REGISTER requests. This usage of feature tags is 
						described in <xref target="RFC3840" />.</t>
				</section>
				<section title="INVITE Transactions">
					<t>A UAC supporting this specification includes a 
						Answer-Mode header field and appropriate value in an 
						INVITE where it wishes to influence the answering mode 
						of the responding UAS.</t>
					<t>To request that the UAS answer only after having 
						interacted with its user and receiving an affirmative 
						instruction from that user, the UAC includes a 
						Answer-Mode header field having a value of "Manual". 
						</t>
					<t>To request that the UAS answer manually, and ask that it 
						reject the INVITE request if unable or unwilling to 
						answer manually, the UAC includes a Answer-Mode header 
						field having a value of "ManualReq".</t>
					<t>To request that the UAS answer automatically without 
						waiting for input from the user, the UAC includes a 
						Answer-Mode header field having a value of "Auto".</t>
					<t>To request that the UAS answer automatically, and ask 
						that it reject the INVITE request if unable or 
						unwilling to answer automatically, the UAC includes a 
						Answer-Mode header field having a value of 
						"AutoReq".</t>
					<t>To require that the UAS either support this extension or 
						reject the request, the UAC includes a Required: header 
						field having the value "answermode". Note that this does
						not actually force the UAS to automatically answer, it
						just requires that the UAS understand this negotiation
						mechanism. We do not have a negotiation technique (like 
						"requires") to force specific behavior. Rather, the desired
						behavior is indicated in the SIP extension itself.</t>
					<t>To request that retargeting proxies in the path 
						preferentially select targets that have indicated 
						support for this extension in their registration, a UAC 
						includes an Accept-Contact header field having a 
						parameter of "answermode". This usage of Accept-Contact 
						is described in <xref target="RFC3841" />.</t>
					<t>To request that retargeting proxies in the path do not 
						select targets that have indicated non-support for this 
						extension in their registration, a UAC includes an 
						Accept-Contact header field having a parameter of 
						"answermode" and an option field of "require". This 
						usage of Accept-Contact is described in <xref 
						target="RFC3841" />.</t>
					<t>To request that retargeting proxies in the path 
						exclusively select targets that have indicated support 
						for this extension in their registration, a UAC 
						includes an Accept-Contact header field having a 
						parameter of "answermode" and option fields of 
						"require" and "explicit". This usage of Accept-Contact 
						is described in <xref target="RFC3841" />.</t>
				</section>
			</section>
			<section title="Procedures at Intermediate Proxies">
				<t>The general procedure at all intermediate proxies including 
					the UAC's serving proxy or proxies and the UAS's serving 
					proxy or proxies is to ignore the Answer-Mode header field. 
					However, the serving proxies MAY exercise control over the 
					requested answer mode, either inserting or deleting a 
					Answer-Mode header field or altering the value of an 
					existing header field in accord with local policy. Note 
					that this may result in behavior that is inconsistent with 
					user expectations, such as having a call that was intended 
					to be a diagnostic loopback answered by a human, and 
					consequently must be done very carefully. These serving 
					proxies MAY also reject a request according to local 
					policy, and SHOULD use the rejection codes as specified 
					below for the UAS if they do so.</t>
			</section>
			<section title="Procedures at the UAS">
				<t> For a request having an Answer-Mode value of "Manual", the 
					UAS SHOULD defer accepting the request until the user of 
					the UAS has confirmed willingness to accept the request. 
					This behavior MAY be altered as needed for unattended UAS 
					or other local characteristics or policy. For example, an 
					auto-attendant system that always answers automatically 
					would go ahead and answer, despite the presence of the 
					"Manual" Answer-Mode header field value.</t>
				<t> For a request having an Answer-Mode value of "ManualReq", 
					the UAS SHOULD defer accepting the request until the user 
					of the UAS has confirmed willingness to accept the request. 
					If the UAS is not capable of answering the request in this 
					"Manual" mode or is unwilling to do so, it SHOULD reject 
					the request with a "403 Forbidden" response and MAY include 
					a Reason <xref target="RFC3326"/> header field value of: 
					</t>
				<t>Reason: SIP ;cause=403 ;text="manual answer forbidden"</t>
				<t> For a request having an Answer-Mode value of "Auto", the 
					UAS SHOULD, if the calling party is authenticated and 
					authorized for automatic answering, accept the request 
					without further user input. The UAS MAY, according to local 
					policy or user preferences, treat this request as it would 
					treat a request having a Answer-Mode with a value of 
					"Manual" or having no Answer-Mode header field. If the 
					calling party is not authenticated and authorized for 
					automatic answer, the UAS may either handle the request as 
					per "manual", or reject the request. If the UAS rejects the 
					request, it SHOULD do so with a "403 Forbidden" response, 
					and MAY include a Reason <xref target="RFC3326"/> header 
					field value of: </t>
				<t>Reason: SIP ;cause=403 ;text="automatic answer forbidden"</t>
				<t> For a request having an Answer-Mode value of "AutoReq", the 
					UAS SHOULD apply authentication and authorization checks 
					before accepting such a request. The UAS MUST NOT allow 
					"manual" answer of this request, but MAY reject it. If, for 
					whatever reason, the UAS chooses not to accept the request 
					automatically, the UAS MUST reject the request and SHOULD 
					do so with a "403 Forbidden" response, and MAY include a 
					Reason <xref target="RFC3326"/> header field value of: </t>
				<t>Reason: SIP ;cause=403 ;text="automatic answer forbidden"</t>
			</section>
			<section title="Issues with Automatic Answering and Forking">
				<t>One of the well-known issues with forking is the problem of 
					multiple acceptance. If an INVITE request is forked to 
					several UAS, and more than one of those UAS respond with a 
					200 OK, the conventional approach is to continue the dialog 
					with the first respondent, and tear down the dialog (via 
					BYE) with all other respondents.</t>
				<t>While this problem exists without an auto-answer negotiation 
					capability, it is apparent that widespread adoption of UAS 
					that engage in auto-answer behavior will exacerbate the 
					multiple acceptance problem. Consequently, systems 
					designers need to take this aspect into consideration. In 
					general, auto-answer is probably NOT RECOMMENDED in 
					environments that include forking.</t>
				<t>As an alternative, it might be reasonable to use a variation 
					on manual-answer combined with no alerting and early media. 
					In this approach, the initial message or talk-burst is 
					transmitted as early media to all recipients, where it is 
					displayed or played out. Any response utterance from the 
					user of a UAS following this would serve as an 
					"acceptance", resulting in a 200 OK response being 
					transmitted by their UAS. Consequently, the race-condition for
					acceptance would be limited to the subset of UAs actually
					responding under user control, rather than the full set of
					UAS to which the request was forked.</t>
				<t>Another alternative would be to use dynamic conferencing instead 
					of forking. In this approach, instead of forking the request, a
					conference would be initiated and all UAs invited into that conference.
					The mixer attached to the conference would then mediate traffic flows
					appropriately.</t>
			</section>
		</section>
		<section 
			title="Usage of the Alert-Mode Header Field, Option, and Media Feature Tags In a Request">
			<t>The Alert-Mode header field is used by a UAC to request specific 
				handling of an INVITE request by the responding UAS related to 
				the alerting of the user of the UAS. If no Alert-Mode header 
				field is included in the request, alerting behavior is at the 
				discretion of the UAS, as it would be in the absence of this 
				specification. The desired handling is indicated by the the 
				value of the Alert-Mode header field, as follows:<vspace blankLines="1"/></t>
			<list style="hanging">
				<t hangText="Normal:"> The UAS is asked to treat the request as 
					it normally would in the absence of this specification and 
					exercise whatever alerting mechanism it might have and be 
					configured to use. </t>
				<t hangText="Null:"> The UAS is asked to not alert its user to 
					the request. </t>
			</list>
			<section title="Procedures at the UAC">
				<section title="All Requests">
					<t> A UAC supporting this specification indicates its 
						support for this extension by including an option tag 
						of "answermode" in the Supported header field of all 
						requests it sends. </t>
				</section>
				<section title="REGISTER Transactions">
					<t>To indicate that it supports the alert-mode negotiation 
						feature, a UA includes a SIP extension feature tag of 
						"alertmode" in the Contact: header field of its 
						REGISTER requests. This usage of feature tags is 
						described in <xref target="RFC3840" />.</t>
				</section>
				<section title="INVITE transactions">
				<t>A UAC supporting this specification includes a Alert-Mode 
					header field and appropriate value in an INVITE where it 
					wishes to influence the alerting mode of the responding 
					UAS.</t>
				<t>To request that the UAS not alert its user the UAC includes 
					a Alert-Mode header field having a value of "Null". </t>
				<t>To request that the UAS apply its normal procedures for 
					alerting the user the UAC either includes a Alert-Mode 
					header field having a value of "Normal" or it includes no 
					Alert-Mode header field.</t>
				<t>To require that the UAS either support this extension or 
					reject the request, the UAC includes a Required: header 
					field having a value of "alertmode". </t>
				</section>
			</section>
			<section title="Procedures at Intermediate Proxies">
				<t>The general procedure at all intermediate proxies including 
					the UAC's serving proxy or proxies and the UAS's serving 
					proxy or proxies is to ignore the Alert-Mode header field. 
					However, the serving proxies MAY exercise control over the 
					requested answer mode, either inserting or deleting a 
					Alert-Mode header field or altering the value of an 
					existing header field in accord with local policy. Note 
					that this may result in behavior that is inconsistent with 
					user expectations, such as having a call that was intended 
					to be a silent diagnostic loopback answered by a human, and 
					consequently must be done very carefully. These serving 
					proxies MAY also reject a request according to local 
					policy, and SHOULD use the rejection codes as specified 
					below for the UAS if they do so.</t>
			</section>
			<section title="Procedures at the UAS">
				<t>A UAS supporting this specification considers the value of 
					the Alert-Mode header field in an INVITE request in 
					determining how and/or whether to alert the user of the UAS 
					to the request. The UAS may also consider local policy, the 
					presence of an authenticated identity or other 
					authentication, and other elements of the request in making 
					this determination.</t>
				<t>If the conclusion is to alert the user, the UAS invokes its 
					preferred alerting mechanism. If the conclusion is to not 
					alert the user, the UAS proceeds to process the request. 
					Note that the decision of whether to accept the request is 
					independent of the alerting decision, but one can generally 
					not expect the user to make this decision unless the user 
					has been alerted to the request.</t>
				<t>The general intent of a request having a Alert-Mode header 
					field with a value of "Null" is that the user not be 
					invasively interrupted by the request. Consequently, it 
					might be appropriate to invoke a less-disruptive alerting 
					mechanism (perhaps blinking a small light) as an 
					alternative to not invoking any alerting mechanism.</t>
			</section>
		</section>
		<section title="Usage of the Answer-Mode Header Field in a Response">
			<t>The Answer-Mode header field may be inserted by a UAS into a 
				response in order to indicate how it handled the associated 
				request with respect to automatic answering functionality. The 
				UAC may use this information to inform the user or otherwise 
				adapt the behavior of the user interface. The handling is 
				indicated by the the value of the Answer-Mode header field, as 
				follows:<vspace blankLines="0"/></t>
			<list style="hanging">
				<t hangText="Manual:"> The UAS responded after the user of the 
					UAS interacted with the user interface (UI) of the UAS in 
					such a way as to indicate that the user desires the UAS to 
					accept the request.</t>
				<t hangText="ManualReq:"> The UAS responded manually, as above.
					Further, the request contained a Answer-Mode header 
					field with the value "ManualReq", and the UAS has honored 
					this requirement.</t>
				<t hangText="Auto:"> The UAS responded automatically, without 
					waiting for the user of the UAS to interact with the UI of 
					the UAS in such a way as to indicate that the user desires 
					the UAS to accept the request.</t>
				<t hangText="AutoReq:"> The UAS responded automatically (as 
					above). Further, the request contained a Answer-Mode header 
					field with the value "AutoReq", and the UAS has honored 
					this requirement.</t>
			</list>
			<t>The Answer-Mode header field, when used in a response, is only 
				valid in a 200 OK response to an INVITE request.</t>
			<section title="Procedures at the UAS">
				<t>A UAS supporting this specification inserts a Answer-Mode 
					header field into the 200 OK response to an INVITE request 
					when it wishes to inform the UAC as to whether the request 
					was answered manually or automatically. The full rationale 
					for including or not including this header field in a 
					response is outside of the scope of this specification. 
					However, it is reasonable for a UAS to assume that if the 
					UAC included a Answer-Mode header field in the request that 
					it would probably like to see a Answer-Mode header field in 
					the response. </t>
			</section>
			<section title="Procedures at the UAC">
				<t>A UAC can use the value of the Answer-Mode header field, if 
					present, to adapt the user interface and/or inform the user 
					about the handling of the request. For example, the user of 
					a push-to-talk system might speak differently if she knows 
					that the called party answered "in person" vs. having the 
					call blare out of an unattended speaker phone.</t>
			</section>
		</section>
		<section title="Examples of Usage">
			<t>The following examples show Bob registering a contact that 
				supports negotiation of answer mode and alerting mode. Alice 
				then calls Bob with an an INVITE request, asking for automatic 
				answering with normal alerting and explicitly asking that the 
				request not be routed to contacts that have not indicated 
				support for this extension. Further, Alice requires that the 
				request be rejected if Bob's UA does not support negotiation of 
				alerting and answer modes. Bob responds with a 200 OK 
				indicating that the call was answered automatically.</t>
			<section title="REGISTER Request">
				<t>REGISTER sip:example.com SIP/2.0<vspace blankLines="0"/> 
					From: Bob &lt;sip:bob@example.com&gt;<vspace 
					blankLines="0"/> To: Bob &lt;sip:bob@example.com&gt;<vspace 
					blankLines="0"/> Contact: 
					sip:cell-phone@example.com;<vspace blankLines="0"/>
					+sip.extensions="answermode";<vspace blankLines="0"/>
					methods="INVITE,BYE,OPTIONS,CANCEL,ACK"</t>
			</section>
			<section title="INVITE Request">
				<t>INVITE &lt;sip:bob@example.com SIP/2. 0&gt;<vspace 
					blankLines="0"/> Via: SIP/2.0/TCP 
					client-alice.example.com:5060;branch=z9hG4bK74b43<vspace 
					blankLines="0"/> Max-Forwards: 70<vspace blankLines="0"/> 
					From: Alice 
					&lt;sip:alice@atlanta.example.com&gt;;tag=9fxced76sl<vspace blankLines="0"/> 
					To: Bob &lt;sip:bob@example.com&gt;<vspace blankLines="0"/> 
					Call-ID:3848276298220188511@client-alice.example.com<vspace 
					blankLines="0"/> 
					CSeq: 1 INVITE<vspace blankLines="0"/> 
					Contact: 
					&lt;sip:alice@client.atlanta.example.com;transport=tcp&gt;<vspace 
					blankLines="0"/> 
					Requires: answermode, alertmode<vspace blankLines="0"/> 
					Accept-contact:*;require;explicit;<vspace blankLines="0"/> 
					+sip.extensions="answermode";<vspace blankLines="0"/> 
					+sip.extensions="alertmode";<vspace blankLines="0"/> 
					Answer-Mode: Auto<vspace blankLines="0"/> 
					Alert-Mode: Null<vspace blankLines="0"/> 
					Content-Type: application/sdp<vspace blankLines="0"/> 
					Content-Length: ...</t>
			</section>
			<section title="200 OK response">
				<t>SIP/2.0 200 OK<vspace blankLines="0"/> Via: SIP/2.0/TCP 
					client-alice.example.com:5060;branch=z9hG4bK74bf9<vspace 
					blankLines="0"/> From: Alice 
					&lt;sip:alice@example.com&gt;;tag=9fxced76sl<vspace 
					blankLines="0"/> To: Bob 
					&lt;sip:bob@example.com&gt;;tag=8321234356<vspace 
					blankLines="0"/> Call-ID: 
					3848276298220188511@client-alice.example.com<vspace 
					blankLines="0"/> CSeq: 1 INVITE<vspace blankLines="0"/> 
					Contact: 
					&lt;sip:bob@client.biloxi.example.com;transport=tcp&gt;<vspace 
					blankLines="0"/> Answer-Mode: Auto<vspace blankLines="0"/> 
					Content-Type: application/sdp<vspace blankLines="0"/> 
					Content-Length: ... </t>
			</section>
		</section>
		<section anchor="Security" title="Security Considerations">
			<t>This specification adds the ability for a UAC to request 
				potentially risky user interface behavior relating to the 
				acceptance of an INVITE request by the UAS receiving the 
				request. These behaviors include accepting the request without 
				notification of the user of the UAS, and accepting the request 
				without input to the UAS by the user of the UAS. </t>
			<t>There are several attacks possible here, with the most obvious 
				being the ability to turn a phone into a remote listening 
				device without its user being aware of it. Additional attacks 
				include reverse charge fraud, unsolicited "push to talk" 
				communications (SPPTT), battery-rundown denial-of-service, 
				"forced busy" denial of service, and phishing via session 
				insertion (where an ongoing session is replaced by another 
				without the victim's awareness. </t>
			<t>In the most common use cases, the security aspects are somewhat 
				mitigated by design aspects of the application. For example, in 
				push-to-talk applications, no media is sent from the called UA 
				without user input (the "push" of "push-to-talk"). 
				Consequently, there is no "bugging" attack when the "Null" 
				Alert-Mode option is exercised in conjunction with automatic 
				answering. Furthermore, the incoming initial talk burst, if 
				present, may serve to alert the called user. However, there is 
				still the potential for an "unsolicited message transmission". 
				For example, the initial talk-burst of an auto-answered push-to-talk
				session might include an advertisement for pharmaceuticals, or
				broadcast rude noises in the tradition of the "whoopee cushion."</t>
			<t>Consequently, the UAS generally or its supporting proxy MUST 
				authenticate the sender of such requests, using mechanisms such 
				as SIP Digest Authentication, <xref target="RFC3261" />, the 
				SIP Identity mechanism <xref target="I-D.ietf-sip-identity" />, 
				or the SIP mechanism for Asserted Identity Within Private 
				Networks<xref target="RFC3325" />, in networks for which it is 
				suitable.</t>
			<t>The authenticated identity of the requester MUST then be matched 
				against authorization policy appropriate to the requested 
				application. For example, it might be appropriate to allow a 
				designated systems administrator to start a diagnostic loopback 
				session without alerting the user. It might also be appropriate 
				to allow a known "buddy" to start a push-to-talk session 
				without requiring the user of the UAS to actively accept the 
				call. It is almost certainly NOT appropriate to allow an 
				unauthenticated and unauthorized requester to start a session 
				without alerting and receiving a confirmation of acceptance 
				(manual answer) from the targeted user.</t>
		</section>
		<section anchor="IANA" title="IANA Considerations">
			<section title="Registration of Header Fields">
				<t>This document defines new SIP header fields named 
					"Answer-Mode", "Alert-Mode", and "Answer-Mode".</t>
				<texttable>
					<preamble>The following rows shall be added to the "Header 
						Fields" section of the SIP parameter 
						registry:</preamble>
					<ttcol>Header Name</ttcol>
					<ttcol>Compact Form</ttcol>
					<ttcol>Reference</ttcol>
					<c>Answer-Mode</c>
					<c>
					</c>
					<c>[RFCXXXX]</c>
					<c>Alert-Mode</c>
					<c>
					</c>
					<c>[RFCXXXX]</c>
					<c>Answer-Mode</c>
					<c>
					</c>
					<c>[RFCXXXX]</c>
				</texttable>
				<t>Editor Note: [RFCXXXX] should be replaced with the 
					designation of this document.</t>
			</section>
			<section title="Registration of Header Field Parameters">
				<t>This document defines parameters for the header fields 
					defined in the preceding section. The header field named 
					"Answer-Mode" may take the values "Manual", "Auto", or 
					"AutoReq". The header field named "Alert-Mode" may take the 
					values "Normal" or "Null".</t>
				<texttable>
					<preamble>The following rows shall be added to the "Header 
						Field Parameters and Parameter Values" section of the 
						SIP parameter registry:</preamble>
					<ttcol>Header Field</ttcol>
					<ttcol>Parameter Name</ttcol>
					<ttcol>Predefined Values</ttcol>
					<ttcol>Reference</ttcol>
					<c>Answer-Mode</c>
					<c>Manual</c>
					<c>Yes</c>
					<c>[RFCXXXX]</c>
					<c>Answer-Mode</c>
					<c>Auto</c>
					<c>Yes</c>
					<c>[RFCXXXX]</c>
					<c>Answer-Mode</c>
					<c>AutoReq</c>
					<c>Yes</c>
					<c>[RFCXXXX]</c>
					<c>Alert-Mode</c>
					<c>Normal</c>
					<c>Yes</c>
					<c>[RFCXXXX]</c>
					<c>Alert-Mode</c>
					<c>Null</c>
					<c>Yes</c>
					<c>[RFCXXXX]</c>
				</texttable>
				<t>Editor Note: [RFCXXXX] should be replaced with the 
					designation of this document.</t>
			</section>
			<section title="Registration of Extension Option Tags">
				<t>This document defines new SIP option tags "answermode" and 
					"alertmode".</t>
				<texttable>
					<preamble>The following rows shall be added to the "Option 
						Tags" section of the SIP Parameters registry:</preamble>
					<ttcol>Name</ttcol>
					<ttcol>Description</ttcol>
					<ttcol>Reference</ttcol>
					<c>answermode</c>
					<c>This option tag is used in a Requires header field to 
						indicate that the UAS must support negotiation of 
						answer mode.</c>
					<c>[RFCXXXX]</c>
					<c>alertmode</c>
					<c>This option tag is used in a Requires header field to 
						indicate that the UAS must support negotiation of 
						alerting mode.</c>
					<c>[RFCXXXX]</c>
				</texttable>
				<t>Editor Note: [RFCXXXX] should be replaced with the 
					designation of this document.</t>
			</section>
		</section>
		<section anchor="Acknowledgements" title="Acknowledgements">
			<t>This document draws requirements and a large part of its 
				methodology from the work of the Open Mobile Alliance, and 
				specifically from the internet draft <xref 
				target="I-D.allen-sipping-poc-p-headers" /> by Andrew Allen, 
				Jan Holm, and Tom Hallin.</t>
			<t>The editor would also like to recognize the contributions of 
				David Oran and others who argued on the SIPPING mailing list 
				and at the OMA ad-hoc meeting at IETF 62 that the underlying 
				ideas of the above draft were broadly applicable to the SIP 
				community, and that the concepts of alerting and answering 
				should be clearly delineated.</t>
		</section>
	</middle>
	<back>
		<references title="Normative References">
			<?rfc include="reference.RFC.2119"?>
			<?rfc include="reference.RFC.2234"?>
			<?rfc include="reference.RFC.2506"?>
			<?rfc include="reference.RFC.2533"?>
			<?rfc include="reference.RFC.3261"?>
			<?rfc include="reference.RFC.3325"?>
			<?rfc include="reference.RFC.3326"?>
			<?rfc include="reference.RFC.3427"?>
			<?rfc include="reference.RFC.3840"?>
			<?rfc include="reference.RFC.3841"?>
		</references>
		<references title="Informative References">
			<?rfc include="reference.I-D.allen-sipping-poc-p-headers" ?>
			<?rfc include="reference.I-D.hedayat-media-loopback" ?>
			<?rfc include="reference.I-D.ietf-sip-identity" ?>
		</references>
	</back>
</rfc>