1
0
mirror of https://github.com/moparisthebest/xeps synced 2024-11-12 12:25:02 -05:00

1.0 DRAFT

git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@364 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2007-01-17 19:51:24 +00:00
parent 60d578d7ee
commit 911d79130b

View File

@ -10,7 +10,7 @@
<abstract>This document specifies a feature negotiation profile for initiating a one-to-one XMPP chat session.</abstract> <abstract>This document specifies a feature negotiation profile for initiating a one-to-one XMPP chat session.</abstract>
&LEGALNOTICE; &LEGALNOTICE;
<number>0155</number> <number>0155</number>
<status>Proposed</status> <status>Draft</status>
<type>Standards Track</type> <type>Standards Track</type>
<sig>Standards</sig> <sig>Standards</sig>
<approver>Council</approver> <approver>Council</approver>
@ -22,9 +22,15 @@
</dependencies> </dependencies>
<supersedes/> <supersedes/>
<supersededby/> <supersededby/>
<shortname>TO BE ASSIGNED</shortname> <shortname>chatneg</shortname>
&ianpaterson; &ianpaterson;
&stpeter; &stpeter;
<revision>
<version>1.0</version>
<date>2007-01-17</date>
<initials>psa</initials>
<remark><p>Per a vote of the XMPP Council, advanced specification to Draft.</p></remark>
</revision>
<revision> <revision>
<version>0.14</version> <version>0.14</version>
<date>2006-12-21</date> <date>2006-12-21</date>
@ -177,7 +183,7 @@ PENDING o---------------+
</section1> </section1>
<section1 topic='Negotiating a New Chat Session' anchor='new'> <section1 topic='Negotiating a New Chat Session' anchor='new'>
<section2 topic='Initiating a Chat Session' anchor='new-initiate'> <section2 topic='Initiating a Chat Session' anchor='new-initiate'>
<p>In order to initiate a negotiated chat session, the initiating party ("user") sends a &MESSAGE; <note>The &MESSAGE; stanza is used because the user does not necessarily know which of the contact's resources is most available (or indeed if the contact is online).</note> stanza to the receiving party ("contact") containing a &lt;feature/&gt; child qualified by the 'http://jabber.org/protocol/feature-neg' namespace. The &MESSAGE; stanza MUST NOT contain a &BODY; child element (as specified in &rfc3921;). The &MESSAGE; stanza type SHOULD be "normal" (either explicitly or by non-inclusion of the 'type' attribute). The stanza MUST contain a &THREAD; element for tracking purposes (where the newly-generated ThreadID is unique to the proposed session). The data form MUST contain a hidden FORM_TYPE field whose value is "http://www.xmpp.org/extensions/xep-0155.html#ns" and MUST contain a boolean field named "accept". &BOOLEANNOTE; The inclusion of "logging", "disclosure" and "security" fields is also RECOMMENDED. Note: The options within any 'list-single' fields SHOULD appear in order of preference.</p> <p>In order to initiate a negotiated chat session, the initiating party ("user") sends a &MESSAGE; <note>The &MESSAGE; stanza is used because the user does not necessarily know which of the contact's resources is most available (or indeed if the contact is online).</note> stanza to the receiving party ("contact") containing a &lt;feature/&gt; child qualified by the 'http://jabber.org/protocol/feature-neg' namespace. The &MESSAGE; stanza MUST NOT contain a &BODY; child element (as specified in &rfc3921;). The &MESSAGE; stanza type SHOULD be "normal" (either explicitly or by non-inclusion of the 'type' attribute). The stanza MUST contain a &THREAD; element for tracking purposes (where the newly-generated ThreadID is unique to the proposed session). The data form MUST contain a hidden FORM_TYPE field whose value is "urn:xmpp:chatneg" and MUST contain a boolean field named "accept". &BOOLEANNOTE; The inclusion of "logging", "disclosure" and "security" fields is also RECOMMENDED. Note: The options within any 'list-single' fields SHOULD appear in order of preference.</p>
<p>Note: Chat sessions may be conducted between entities who are never online at the same time. However, if the user is interested only in an <em>immediate</em> chat session then the user SHOULD instruct the contact's server not to store the message for later delivery (see &xep0160;) using the &xep0079; protocol.</p> <p>Note: Chat sessions may be conducted between entities who are never online at the same time. However, if the user is interested only in an <em>immediate</em> chat session then the user SHOULD instruct the contact's server not to store the message for later delivery (see &xep0160;) using the &xep0079; protocol.</p>
<p>In the following example of a negotiation request, Romeo requests a chat with Juliet and also queries her regarding whether she is able to disallow all message logging (see &xep0136;) <note>A client MUST NOT set the 'logging' field to 'mustnot' unless it has confirmed that its server will allow it to switch off Automated Archiving (see <cite>Message Archiving</cite>).</note>, whether she wants to temporarily share presence for this session (see the <link url='#impl-presence'>Sharing Presence</link> section of this document), and whether she wants to support the &xep0071; and &xep0085; extensions during this chat session. He asks Juliet's client if it is prepared to make a (legally binding) guarantee that it does not intentionally implement any feature (not even a disabled feature) that might disclose the content of the chat, any associated (decryption) keys, or his identity to any third-party (see <cite>Encrypted Session Negotiation</cite>). He also requires that they are both connected securely to their servers, and asks which language she prefers amongst those he can write. (Note: These fields are examples only; a full set of chat session negotiation parameters will be registered as described in the <link url='#registrar'>XMPP Registrar Considerations</link> section of this document.)</p> <p>In the following example of a negotiation request, Romeo requests a chat with Juliet and also queries her regarding whether she is able to disallow all message logging (see &xep0136;) <note>A client MUST NOT set the 'logging' field to 'mustnot' unless it has confirmed that its server will allow it to switch off Automated Archiving (see <cite>Message Archiving</cite>).</note>, whether she wants to temporarily share presence for this session (see the <link url='#impl-presence'>Sharing Presence</link> section of this document), and whether she wants to support the &xep0071; and &xep0085; extensions during this chat session. He asks Juliet's client if it is prepared to make a (legally binding) guarantee that it does not intentionally implement any feature (not even a disabled feature) that might disclose the content of the chat, any associated (decryption) keys, or his identity to any third-party (see <cite>Encrypted Session Negotiation</cite>). He also requires that they are both connected securely to their servers, and asks which language she prefers amongst those he can write. (Note: These fields are examples only; a full set of chat session negotiation parameters will be registered as described in the <link url='#registrar'>XMPP Registrar Considerations</link> section of this document.)</p>
<example caption="User requests chat session"><![CDATA[ <example caption="User requests chat session"><![CDATA[
@ -189,7 +195,7 @@ PENDING o---------------+
<x xmlns='jabber:x:data' type='form'> <x xmlns='jabber:x:data' type='form'>
<title>Open chat with Romeo?</title> <title>Open chat with Romeo?</title>
<field var='FORM_TYPE' type='hidden'> <field var='FORM_TYPE' type='hidden'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field label='Accept this chat?' type='boolean' var='accept'> <field label='Accept this chat?' type='boolean' var='accept'>
<value>true</value> <value>true</value>
@ -277,7 +283,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'> <x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='accept'><value>true</value></field> <field var='accept'><value>true</value></field>
<field var='logging'><value>mustnot</value></field> <field var='logging'><value>mustnot</value></field>
@ -307,7 +313,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'> <x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='accept'><value>0</value></field> <field var='accept'><value>0</value></field>
</x> </x>
@ -315,7 +321,7 @@ PENDING o---------------+
<body>Sorry, can't chat now! How about tonight?</body> <body>Sorry, can't chat now! How about tonight?</body>
</message> </message>
]]></example> ]]></example>
<p>If the contact's client does not support feature negotiation or does not support the "http://www.xmpp.org/extensions/xep-0155.html#ns" FORM_TYPE, it SHOULD return a &unavailable; error:</p> <p>If the contact's client does not support feature negotiation or does not support the "urn:xmpp:chatneg" FORM_TYPE, it SHOULD return a &unavailable; error:</p>
<example caption="Contact returns service unavailable error"><![CDATA[ <example caption="Contact returns service unavailable error"><![CDATA[
<message type='error' <message type='error'
from='juliet@capulet.com/balcony' from='juliet@capulet.com/balcony'
@ -324,7 +330,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'> <x xmlns='jabber:x:data' type='form'>
<field var='FORM_TYPE' type='hidden'> <field var='FORM_TYPE' type='hidden'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
... ...
</x> </x>
@ -343,7 +349,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'> <x xmlns='jabber:x:data' type='form'>
<field var='FORM_TYPE' type='hidden'> <field var='FORM_TYPE' type='hidden'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
... ...
</x> </x>
@ -365,7 +371,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'> <x xmlns='jabber:x:data' type='form'>
<field var='FORM_TYPE' type='hidden'> <field var='FORM_TYPE' type='hidden'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
... ...
</x> </x>
@ -389,7 +395,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='result'> <x xmlns='jabber:x:data' type='result'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='accept'><value>true</value></field> <field var='accept'><value>true</value></field>
</x> </x>
@ -406,7 +412,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='result'> <x xmlns='jabber:x:data' type='result'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='accept'><value>0</value></field> <field var='accept'><value>0</value></field>
</x> </x>
@ -425,7 +431,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'> <x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='continue'><value>PDA</value></field> <field var='continue'><value>PDA</value></field>
</x> </x>
@ -442,7 +448,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='result'> <x xmlns='jabber:x:data' type='result'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='continue'><value>PDA</value></field> <field var='continue'><value>PDA</value></field>
</x> </x>
@ -461,7 +467,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'> <x xmlns='jabber:x:data' type='form'>
<field var='FORM_TYPE' type='hidden'> <field var='FORM_TYPE' type='hidden'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field label='Renegotiate?' type='boolean' var='renegotiate'> <field label='Renegotiate?' type='boolean' var='renegotiate'>
<value>1</value> <value>1</value>
@ -488,7 +494,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'> <x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='renegotiate'><value>1</value></field> <field var='renegotiate'><value>1</value></field>
<field var='logging'><value>may</value></field> <field var='logging'><value>may</value></field>
@ -508,7 +514,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'> <x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='renegotiate'><value>0</value></field> <field var='renegotiate'><value>0</value></field>
<field var='logging'><value>may</value></field> <field var='logging'><value>may</value></field>
@ -528,7 +534,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='submit'> <x xmlns='jabber:x:data' type='submit'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='terminate'><value>1</value></field> <field var='terminate'><value>1</value></field>
</x> </x>
@ -545,7 +551,7 @@ PENDING o---------------+
<feature xmlns='http://jabber.org/protocol/feature-neg'> <feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='result'> <x xmlns='jabber:x:data' type='result'>
<field var='FORM_TYPE'> <field var='FORM_TYPE'>
<value>http://www.xmpp.org/extensions/xep-0155.html#ns</value> <value>urn:xmpp:chatneg</value>
</field> </field>
<field var='terminate'><value>1</value></field> <field var='terminate'><value>1</value></field>
</x> </x>
@ -599,23 +605,23 @@ PENDING o---------------+
</section1> </section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'> <section1 topic='XMPP Registrar Considerations' anchor='registrar'>
<section2 topic='Protocol Namespaces' anchor='ns'> <section2 topic='Protocol Namespaces' anchor='ns'>
<p>Until this specification advances to a status of Draft, its associated namespace (as used in the negotiation FORM_TYPE) shall be "http://www.xmpp.org/extensions/xep-0155.html#ns"; upon advancement of this specification, the XMPP Registrar shall issue a permanent namespace in accordance with the process defined in Section 4 of &xep0053;.</p> <p>The &REGISTRAR; includes 'urn:xmpp:chatneg' in its registry of protocol namespaces (see &NAMESPACES;).</p>
</section2> </section2>
<section2 topic='Service Discovery Features' anchor='registrar-features'> <section2 topic='Service Discovery Features' anchor='registrar-features'>
<p>The &REGISTRAR; shall include 'http://www.xmpp.org/extensions/xep-0155.html#ns' in its registry of Service Discovery features.</p> <p>The XMPP Registrar includes 'urn:xmpp:chatneg' in its registry of Service Discovery features (see &DISCOFEATURES;).</p>
<code caption='Registry Submission'><![CDATA[ <code caption='Registry Submission'><![CDATA[
<var> <var>
<name>http://www.xmpp.org/extensions/xep-0155.html#ns</name> <name>urn:xmpp:chatneg</name>
<desc>Support for Chat Session Negotiation and its FORM_TYPE</desc> <desc>Support for Chat Session Negotiation and its FORM_TYPE</desc>
<doc>XEP-0155</doc> <doc>XEP-0155</doc>
</var> </var>
]]></code> ]]></code>
</section2> </section2>
<section2 topic='Field Standardization' anchor='registrar-formtype'> <section2 topic='Field Standardization' anchor='registrar-formtype'>
<p>&xep0068; defines a process for standardizing the fields used within Data Forms qualified by a particular namespace. The following fields shall be registered for use in Chat Session Negotiation:</p> <p>&xep0068; defines a process for standardizing the fields used within Data Forms qualified by a particular namespace. The following fields are registered for use in Chat Session Negotiation (see &FORMTYPES;):</p>
<code caption='Registry Submission'><![CDATA[ <code caption='Registry Submission'><![CDATA[
<form_type> <form_type>
<name>http://www.xmpp.org/extensions/xep-0155.html#ns</name> <name>urn:xmpp:chatneg</name>
<doc>XEP-0155</doc> <doc>XEP-0155</doc>
<desc> <desc>
Forms enabling negotation of a one-to-one Forms enabling negotation of a one-to-one
@ -715,7 +721,7 @@ PENDING o---------------+
</section2> </section2>
</section1> </section1>
<section1 topic='XML Schema' anchor='schema'> <section1 topic='XML Schema' anchor='schema'>
<p>This proposal re-uses the format defined in XEP-0020 and therefore does not require a separate schema.</p> <p>This proposal re-uses the format defined in XEP-0020 and therefore does not require a dedicated schema.</p>
</section1> </section1>
<section1 topic='Acknowledgements' anchor='ack'> <section1 topic='Acknowledgements' anchor='ack'>
<p>Thanks to Thomas Charron and Jean-Louis Seguineau for their feedback.</p> <p>Thanks to Thomas Charron and Jean-Louis Seguineau for their feedback.</p>