<?xml version="1.0"?><!DOCTYPE rfc SYSTEM "rfc2629.dtd"><?rfc toc="yes" ?><?rfc compact="yes" ?><?rfc sortrefs="no" ?><rfc category="std" ipr="full2026" docName="draft-jennings-sip-app-info-01">	<front>		<title abbrev="SIP Application Information">	SIP Support for Application Initiation	</title>		<author initials="C." surname="Jennings" fullname="Cullen Jennings">			<organization>Cisco Systems</organization>			<address>				<postal>					<street>170 West Tasman Drive</street>					<street>MS: SJC-21/3</street>					<city>San Jose</city>					<region>CA</region>					<code>95134</code>					<country>USA</country>				</postal>				<phone>+1 408 527-9132</phone>				<email>fluffy@cisco.com</email>			</address>		</author>					<date month="June" day="29" year="2003"/>		<area>Transport</area>		<workgroup>SIP WG</workgroup>		<keyword>I-D</keyword>		<keyword>Internet-Draft</keyword>		<keyword>Application</keyword>		<abstract>			<t> This document describes SIP extensions to allownetwork elements to request a UA to initiate a scripted application that isassociated with a dialog. It provides a mechanism for the network elements tofind out a UA's ability to fetch and execute scripts.</t>		<t>This work is being discussed on the sip@ietf.org mailing list. </t>		</abstract>	</front>	<middle>		<section title="Conventions">			<t> A "script" refers to some markup, program, or scriptthat the UA can fetch and execute. </t>			<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 <xreftarget="RFC2119">RFC-2119</xref>.</t> </section> <section title="Introduction"><t>The Session Initiation Protocol (SIP) <xref target="RFC3261"></xref>  providesthe ability for users to initiate, manage, and terminatecommunications sessions. Frequently, these sessions will involve a SIPapplication. A SIP application is defined as a program running on aSIP-based element (such as a proxy or user agent) that provides somevalue-added function to a user or system administrator. Examples ofSIP applications include pre-paid calling card calls, conferencing,and presence-based <xref target="RFC2778"></xref> call routing. </t><t>In order for most applications to properly function, they need inputfrom the user to guide their operation. For example, a pre-paidcalling card application requires the user to input their calling cardnumber, their PIN code, and the destination number they wish toreach. The process by which a user provides input to an application isreferred to as "application interaction". </t><t>A set of high level requirements on a system for application interaction aredescribed in <xref target="I-D.culpepper-sipping-app-interact-reqs"></xref>. Tomeet these requirements, a framework has been developed<xreftarget="I-D.rosenberg-sipping-app-interaction-framework"></xref>. In thisframework, applications can instantiate user interface classes on clientdevices, for the purposes of interacting with the user. Each class can represent different components of the the user interface in a single application. These user interfacecomponents are described using markup languages, such as VoiceXML and <xreftarget="I-D.burger-sipping-kpml">KPML</xref>. The framework also defines a setof requirements for SIP extensions that allow for an application to discover thecapabilities of the user device for supporting markup languages, for placinguser interface components on the device, and for terminating the component. Thisdocument proposes a specific SIP extension that fulfills thoserequirements. This extension is the App-Info header. </t>		</section>		<section title="Overview">			<t>The main mechanism of this draft is a new header field, called App-Info, thatprovides the UA with the URL of a script to execute. A network element can addthis header field. The App-Info header field can occur in most SIP messages,including INVITE and MESSSAGE messages, as well as in reliable provisionalresponses. </t>			<t>This draft also defines an option tag for use in the supported header field toallow a UA to indicate support for this mechanism. Options tags are also used toindicate which types of markup are supported. The Caller Preferences mechanismis used to indicate the types of markup that the UA can process. </t>			<t> An example App-Info header field is: </t>			<figure>				<artwork><![CDATA[  App-Info: "Call Timer"             <http://mediasvr.provider.net/calltimer.vxml>;              id=app4323!sub4+svr56.provider.net]]></artwork>			</figure>			<t/>			<t> This indicates that the UA should fetch and executethe script found at http://mediasvr.provider.net/calltimer.vxml. A key part ofthe header field value is an application id that consists of an applicationinstance and an application class separated by a "!". In the example above, theinstance is "app4323" and the class is "sub4+src56.provider.net". Thecombination of these two MUST make a globally unique identifier.  There may bemultiple user interface components running on a UA that are part of the sameapplication instance, and therefore, share the same instance identifier.  Theinstance identifier can be used to correlate the applications.  An applicationmight want to authorize the execution of the markup based only on the class nameso that this authorization can be cached and used the next time a differentinstance of this same application is used. 
If authorization is cached or shared, note the warnings in the Security Consideration section. 
The UA may use the display name forpresentation purposes and for help in managing focus, but it has no othermeaning. The formal syntax for the App-info header field is presented in <xreftarget="ai"/>.</t>			<t> This approach also uses the Supported and Acceptheader fields as well as the schemes mechanism from the <xreftarget="I-D.ietf-sip-callerprefs">caller prefs draft</xref>. For example: </t>			<t>				<figure>					<artwork><![CDATA[  Supported: markup   Accept: multipart/mixed, application/vxml, text/html    Contact: sip:1.2.3.4;schemes="http,cid,file"]]></artwork>				</figure>			</t>			<t>This indicates that the UA can accept markup as defined in this draft. Inparticular the UA can accept VoiceXML and HTML markup and is capable fetchingscripts from using a http, cid, or file scheme. The cid scheme<xreftarget="RFC2111"></xref> fetches the content from an inline body in the samemessage.</t>		</section>		<section title="User Agent Server Behavior">			<t>When a UAC sends a message it MUST include in the Supported header the markupoption tag.  It MUST also put the markups or scripts that it can process in theAccept header field and indicate the schemes it can support in the Contactheader.</t>			<t> When a UA receives a message that contains anApp-Info header field, it must process each header field value and decide whatto do with it. There are three cases: creating a new application, updating anexisting application, and stopping a script that has been previously started.</t>			<t> In the case when the application identifier does notmatch any of the scripts that are currently running, a new application instanceis created. The UA associates the application identifier with the dialog it wasreceived on. The script is fetched. After fetching the script, execution startsin a context associated with the dialog.  </t>			<t> If the application identifier matches the identifierfor a previously fetched script, and the App-Info header field URL value doesnot match the previous header field URL value for this script, then the scriptis fetched and then used to replace the existing script. If the applicationidentifier matches an existing script and the URL in the App-Info header fieldvalue is empty, then the existing script is terminated. If the URL has notchanged, this header field value is ignored. </t>			<t>The UA fetches the script by using the URI found in the URI portion of the App-Info header field value. A UA which supports the App-Info header field MUST support fetching scripts from multipart MIME bodies using the cid scheme and SHOULD support the http<xref target="RFC2616"></xref> scheme.</t>			<t>When a dialog ends, all the applications associated with it SHOULD beimmediately terminated.</t>			<t>A UA may add the App-Info header field to initiate an application on the otherUA in the dialog. The UA SHOULD NOT request services that the other UA has notindicated it supports. </t>			<t> The App-Info header follows the general httpscripting model for reporting errors - that is to say that the UA fetching themarkup and executing it does not report errors to the application server. Partof the problem is that there is no easy way to report errors when fetching somemarkup fails, or when the markup can not be interpreted, or when the markup isterminated. There is no guarantee that the system will get any stimulus from themarkup even if there are no errors. This means the application must be writtenin a way that detects when the application is not getting input and deals withthis situation appropriately. For many web applications this has turned out tobe fairly easy to do. </t>                </section>		<section anchor="proxy" title="Proxy Behavior">			<t>Proxies MAY add header field values to the App-Info header field but they SHOULD		NOT delete or modify any existing header field values that they		did not originally add. App-Info header fields MAY be added to		reliable provisional response. The proxy SHOULD NOT request		services that the UA has not indicated it supports. </t>		</section> <section anchor="ai" title="Formal Syntax">			<t>The following syntax specification uses the augmented Backus-NaurForm (BNF) as described in <xref target="RFC2234">RFC-2234</xref>.</t>			<section title="The App-Info Header">				<t/>				<figure>					<artwork> App-Info    = "App-Info" HCOLON app *(COMMA app) app         = [ display-name ] LAQUOT [absolute-uri] RAQUOT                                          *(SEMI app-param) app-param   = app-id-param / app-name-param / generic-param app-id-param = "id" EQUAL app-id-value app-id-value = app-instance-id "!" app-class-id app-instance-id = app-token app-class-id = app-token app-token    = 1*(alphanum / "-" / "." / "%" / "*" / "_" / "+"                 / "'" / "`" / "~" ) ; this is a token with no "!" app-name-param = "app-name" EQUAL gen-value</artwork>				</figure>				<t>This document adds the following entry to Table 2 of <xref target="RFC3261">RFC-3261</xref>. Note that App-Info is only valid in something that is in a dialog or forms a dialog.</t>				<figure>					<artwork>Header field         where   proxy   ACK  BYE  CAN  INV  OPT  REG------------         -----   -----   ---  ---  ---  ---  ---  ---App-Info                      adr     -    -    -    o    o    -                                      SUB  NOT  REF  INF  UPD  PRA                                     ---  ---  ---  ---  ---  ---                                      o    o    o    o    o    -</artwork>				</figure><t>In addition it would be listed as an optional header for the MESSAGE message sothis document adds the following line to Table 1 in <xreftarget="RFC3428">RFC-3428</xref>. </t> <figure> <artwork> Header Field       where  proxy  MESSAGE__________________________________________App-Info                            o </artwork></figure>			</section>		</section>		<section title="Security Considerations">			<t>This document describes a mechanism that allows non trusted parties to requestthat a UA execute an arbitrary script. This mechanism should only be used toinitiate scripts that are in scripting languages intended for situations inwhich scripts from non trusted parties are expected. HTML is a good example of amarkup language that is considered safe to render content that is not trusted. Ascripting language that allowed scripts that automatically caused the UA to hangup and then dial a toll service phone number would certainly not be appropriatefor this mechanism. The scripting language should not be able to accessinformation on the UA that is not associated with the dialog, such as the user'saddress book. </t><t>The mechanism in this document does not address the secure transport,authorization, and integrity of the markup, but there are multiple mechanisms toensure that the markup came from the correct party and that the markup has notbeen tampered with. If the script is fetched using https, both the identity ofthe party providing the markup and the integrity of the markup can besecured. Alternatively, if the script is transferred using the cid scheme,S/MIME can be used to sign the markup. </t>		<t>Proxies are allowed to insert App-Info headers so the App-Info headers can notbe secured using an end to end mechanism. Using the sips URL in the SIP messagesdoes provide some assurances that, as long as the user trusts all the proxiesthat the call traversed, the user can be sure that no rogue markup has beenrequested.</t><t>When some markup has been requested, the UA should require authorization to run		it. It is possible to authenticate the party that sent the		markup using https or S/MIME signing of cid		markup. Authorization SHOULD be obtained for each different		class of markup but the UA MAY reuse the authorization for two		different instances of the same application class. 
When authorization is cached or used for different instances of the same class, the system MUST ensure that all the markup sharing the authorization came from the same entity. For example, if the system authorizes a class named doSomething that was received from a source which could authenticate (using something line https or smime) as good.example.com, the system should not trust a class called doSomething received from evil.example.com. </t>		
</section> 
<section title="IANA Considerations">			<t>{NOTE to IANA: Please replace XXXX with the rfc number 			          of this specification} </t>			<section title="Registration of App-Info Header">				<t> This document defines a new header field,"App-Info". As recommended by <xref target="RFC3261">RFC-3261</xref> theseheaders fields should be registered by the IANA in the SIP header registry,using the RFC number of this document as its reference.</t> <figure> <artwork>Name of Header: App-InfoShort form:              noneRegistrant:              Cullen Jennings                         fluffy@cisco.comNormative description:   Section 6.1 of RFC XXXX.</artwork>				</figure>			</section>			<section title="Registration of Option Tag">				<t>  This specification registers a new option tag called markup.  Therequired information for this registration, as specified in <xref target="RFC3261">RFC-3261</xref>,is: </t>				<figure>					<artwork>Name: markupDescription: This option tag is for fetching scripts into a UA. When             present in a Supported header field, it indicates that             the UA can supports the mechanism in RFC XXXX.             Registrant:  Cullen Jennings             fluffy@cisco.com</artwork>				</figure>			</section>		</section>				<section title="Acknowledgements">			<t> Eric Burger, Robert Fairlie-Cuninghame, JonathanRosenberg, and I were the members of the Application Stimulus Signaling DesignTeam.  All members of the team contributed significantly to this work. Inaddition, thanks to Bert Culpepper. </t>    		</section>	</middle>	<back>		<references title="Normative References">			<reference anchor='RFC3261'><front><title>SIP: Session Initiation Protocol</title><author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'><organization /></author><author initials='H.' surname='Schulzrinne' fullname='H. Schulzrinne'><organization /></author><author initials='G.' surname='Camarillo' fullname='G. Camarillo'><organization /></author><author initials='A.' surname='Johnston' fullname='A. Johnston'><organization /></author><author initials='J.' surname='Peterson' fullname='J. Peterson'><organization /></author><author initials='R.' surname='Sparks' fullname='R. Sparks'><organization /></author><author initials='M.' surname='Handley' fullname='M. Handley'><organization /></author><author initials='E.' surname='Schooler' fullname='E. Schooler'><organization /></author><date month='June' year='2002' /></front><seriesInfo name='RFC' value='3261' /><format type='TXT' octets='647976' target='ftp://ftp.isi.edu/in-notes/rfc3261.txt' /></reference>			<!-- ?rfc include="reference.RFC.2119" ?-->			<reference anchor="RFC2119">				<front>					<title abbrev="RFC Key Words">Key words for use in RFCs to Indicate Requirement Levels</title>					<author initials="S." surname="Bradner" fullname="Scott Bradner">						<organization/>					</author>					<date month="March" year="1997"/>				</front>				<seriesInfo name="BCP" value="14"/>				<seriesInfo name="RFC" value="2119"/>			</reference>			<!-- ?rfc include="reference.RFC.2234" ?-->			<reference anchor="RFC2234">				<front>					<title abbrev="ABNF for Syntax Specifications">Augmented BNF for Syntax Specifications: ABNF</title>					<author initials="D.H." surname="Crocker" fullname="David H. Crocker">						<organization>Internet Mail Consortium</organization>					</author>					<author initials="P." surname="Overell" fullname="Paul Overell">						<organization>Demon Internet Ltd</organization>					</author>					<date month="November" year="1997"/>				</front>				<seriesInfo name="RFC" value="2234"/>			</reference><reference anchor='RFC2778'><front><title>A Model for Presence and Instant Messaging</title><author initials='M.' surname='Day' fullname='Mark Day'><organization>SightPath, Inc.</organization><address><postal><street>135 Beaver Street</street><city>Waltham</city><region>MA</region><code>02452</code><country>US</country></postal><email>mday@alum.mit.edu</email></address></author><author initials='J.' surname='Rosenberg' fullname='Jonathan Rosenberg'><organization>dynamicsoft</organization><address><postal><street>200 Executive Drive</street><street>Suite 120</street><city>West Orange</city><region>NJ</region><code>07046</code><country>US</country></postal><email>jdrosen@dynamicsoft.com</email></address></author><author initials='H.' surname='Sugano' fullname='Hiroyasu Sugano'><organization>Fujitsu Laboratories Ltd.</organization><address><postal><street>64 Nishiwaki</street><street>Ohkubo-cho</street><city>Akashi</city><region /><code>674-8555</code><country>JP</country></postal><email>suga@flab.fujitsu.co.jp</email></address></author><date month='February' year='2000' /><abstract><t>This document defines an abstract model for a presence and instant messagingsystem. It defines the various entities involved, defines terminology, andoutlines the services provided by the system. The goal is to provide a commonvocabulary for further work on requirements for protocols and markup forpresence and instant messaging.</t></abstract></front><seriesInfo name='RFC' value='2778' /><format type='TXT' octets='35153' target='ftp://ftp.isi.edu/in-notes/rfc2778.txt' /></reference><reference anchor='RFC2822'><front><title>Internet Message Format</title><author initials='P.' surname='Resnick' fullname='P. Resnick'><organization /></author><date month='April' year='2001' /></front><seriesInfo name='RFC' value='2822' /><format type='TXT' octets='110695' target='ftp://ftp.isi.edu/in-notes/rfc2822.txt' /></reference><reference anchor='RFC3428'><front><title>Session Initiation Protocol (SIP) Extension for Instant Messaging</title><author initials='B.' surname='Campbell' fullname='B. Campbell'><organization /></author><author initials='J.' surname='Rosenberg' fullname='J. Rosenberg'><organization /></author><author initials='H.' surname='Schulzrinne' fullname='H. Schulzrinne'><organization /></author><author initials='C.' surname='Huitema' fullname='C. Huitema'><organization /></author><author initials='D.' surname='Gurle' fullname='D. Gurle'><organization /></author><date month='December' year='2002' /></front><seriesInfo name='RFC' value='3428' /><format type='TXT' octets='41475' target='ftp://ftp.isi.edu/in-notes/rfc3428.txt' /></reference><reference anchor="I-D.ietf-sip-callerprefs"><front><title>Caller Preferences and Callee Capabilities for the Session Initiation Protocol (SIP)</title><author initials="J" surname="Rosenberg" fullname="Jonathan Rosenberg">    <organization /></author><author initials="H" surname="Schulzrinne" fullname="Henning Schulzrinne">    <organization /></author><author initials="P" surname="Kyzivat" fullname="Paul Kyzivat">    <organization /></author><date month="March" day="7" year="2003" /></front><seriesInfo name="Internet-Draft" value="draft-ietf-sip-callerprefs-08" /><format type="TXT"        target="http://www.ietf.org/internet-drafts/draft-ietf-sip-callerprefs-08.txt" /></reference><reference anchor='RFC2111'><front><title abbrev='CID and MID URLs'>Content-ID and Message-ID Uniform Resource Locators</title><author initials='E.' surname='Levinson' fullname='Edward Levinson'><organization /><address><postal><street>47 Clive Street</street><street>Metuchen</street><street>NJ  08840-1060</street><country>USA</country></postal><phone>+1 908 549 3716</phone><email>XIson@cnj.digex.net</email></address></author><date month='March' year='1997' /><area>Applications</area><keyword>content-type</keyword><keyword>encapsulate</keyword><keyword>hypertext markup language</keyword><keyword>multipurpose internet mail extensions</keyword><keyword>uniform resource</keyword><abstract><t>   The Uniform Resource Locator (URL) schemes, &quot;cid:&quot; and &quot;mid:&quot; allow   references to messages and the body parts of messages.  For example,   within a single multipart message, one HTML body part might include   embedded references to other parts of the same message.</t></abstract></front><seriesInfo name='RFC' value='2111' /><format type='TXT' octets='9099' target='ftp://ftp.isi.edu/in-notes/rfc2111.txt' /><format type='HTML' octets='23209' target='http://xml.resource.org/public/rfc/html/rfc2111.html' /><format type='XML' octets='11466' target='http://xml.resource.org/public/rfc/xml/rfc2111.xml' /></reference>		</references>    <references title='Informative References'>  <reference anchor="I-D.culpepper-sipping-app-interact-reqs"><front><title>Session Initiation Protocol Based Application Interaction Requirements</title><author initials="B" surname="Culpepper" fullname="Bert Culpepper">    <organization /></author><author initials="R" surname="Fairlie-Cuninghame" fullname="Robert Fairlie-Cuninghame">    <organization /></author><date month="March" day="6" year="2003" /></front><seriesInfo name="Internet-Draft" value="draft-culpepper-sipping-app-interact-reqs-03" /><format type="TXT"        target="http://www.ietf.org/internet-drafts/draft-culpepper-sipping-app-interact-reqs-03.txt" /></reference><reference anchor="I-D.burger-sipping-kpml"><front><title>Keypad Markup Language (KPML)</title><author initials="E" surname="Burger" fullname="Eric Burger">    <organization /></author><date month="June" day="30" year="2003" /></front><seriesInfo name="Internet-Draft" value="draft-burger-sipping-kpml-02" /><format type="TXT"        target="http://www.ietf.org/internet-drafts/draft-burger-sipping-kpml-02.txt" /></reference><reference anchor="I-D.rosenberg-sipping-app-interaction-framework"><front><title>A Framework and Requirements for Application Interaction in SIP</title><author initials="J" surname="Rosenberg" fullname="Jonathan Rosenberg">    <organization /></author><date month="June" day="30" year="2003" /></front><seriesInfo name="Internet-Draft" value="draft-rosenberg-sipping-app-interaction-framework-01" /><format type="TXT"        target="http://www.ietf.org/internet-drafts/draft-rosenberg-sipping-app-interaction-framework-01.txt" /></reference><reference anchor='RFC2616'><front><title abbrev='HTTP/1.1'>Hypertext Transfer Protocol -- HTTP/1.1</title><author initials='R.T.' surname='Fielding' fullname='Roy T. Fielding'><organization>University of California, Irvine, Information and Computer Science</organization><address><postal><street /><city>Irvine</city><region>CA</region><code>92697-3425</code><country>US</country></postal><phone>+1 949 824 1715</phone><email>fielding@ics.uci.edu</email></address></author><author initials='J.' surname='Gettys' fullname='James Gettys'><organization>World Wide Web Consortium, MIT Laboratory for Computer Science</organization><address><postal><street>545 Technology Square</street><city>Cambridge</city><region>MA</region><code>02139</code><country>US</country></postal><facsimile>+1 617 258 8682</facsimile><email>jg@w3.org</email></address></author><author initials='J.C.' surname='Mogul' fullname='Jeffrey C. Mogul'><organization>Compaq Computer Corporation, Western Research Laboratory</organization><address><postal><street>250 University Avenue</street><city>Palo Alto</city><region>CA</region><code>94301</code><country>US</country></postal><email>mogul@wrl.dec.com</email></address></author><author initials='H.F.' surname='Nielsen' fullname='Henrik Frystyk Nielsen'><organization>World Wide Web Consortium, MIT Laboratory for Computer Science</organization><address><postal><street>545 Technology Square</street><city>Cambridge</city><region>MA</region><code>02139</code><country>US</country></postal><facsimile>+1 617 258 8682</facsimile><email>frystyk@w3.org</email></address></author><author initials='L.' surname='Masinter' fullname='Larry Masinter'><organization>Xerox Corporation</organization><address><postal><street>3333 Coyote Hill Road</street><city>Palo Alto</city><region>CA</region><code>94034</code><country>US</country></postal><email>masinter@parc.xerox.com</email></address></author><author initials='P.J.' surname='Leach' fullname='Paul J. Leach'><organization>Microsoft Corporation</organization><address><postal><street>1 Microsoft Way</street><city>Redmond</city><region>WA</region><code>98052</code><country>US</country></postal><email>paulle@microsoft.com</email></address></author><author initials='T.' surname='Berners-Lee' fullname='Tim Berners-Lee'><organization>World Wide Web Consortium, MIT Laboratory for Computer Science</organization><address><postal><street>545 Technology Square</street><city>Cambridge</city><region>MA</region><code>02139</code><country>US</country></postal><phone>+1 617 258 8682</phone><email>timbl@w3.org</email></address></author><date month='June' year='1999' /><abstract><t>The Hypertext Transfer Protocol (HTTP) is an application-level protocol fordistributed, collaborative, hypermedia information systems. It is a generic,stateless, protocol which can be used for many tasks beyond its use forhypertext, such as name servers and distributed object management systems,through extension of its request methods, error codes and headers. A feature ofHTTP is the typing and negotiation of data representation, allowing systems tobe built independently of the data being transferred.</t><t>HTTP has been in use by the World-Wide Web global information initiativesince 1990. This specification defines the protocol referred to as "HTTP/1.1",and is an update to RFC 2068.</t></abstract></front><seriesInfo name='RFC' value='2616' /><format type='TXT' octets='422317' target='ftp://ftp.isi.edu/in-notes/rfc2616.txt' /><format type='PS' octets='5529857' target='ftp://ftp.isi.edu/in-notes/rfc2616.ps' /><format type='PDF' octets='550558' target='ftp://ftp.isi.edu/in-notes/rfc2616.pdf' /></reference>    </references>    	</back></rfc>