git-svn-id: file:///home/ksmith/gitmigration/svn/xmpp/trunk@455 4b5297f7-1745-476d-ba37-a9c6900126ab
This commit is contained in:
Peter Saint-Andre 2007-01-31 03:42:51 +00:00
parent 1774210e18
commit 2b65c5b21b
1 changed files with 19 additions and 13 deletions

View File

@ -22,6 +22,12 @@
<supersededby>None</supersededby> <supersededby>None</supersededby>
<shortname>invisibility</shortname> <shortname>invisibility</shortname>
&stpeter; &stpeter;
<revision>
<version>0.5</version>
<date>2007-01-30</date>
<initials>psa</initials>
<remark><p>Modified XML namespace name to conform to XEP-0053 processes.</p></remark>
</revision>
<revision> <revision>
<version>0.4</version> <version>0.4</version>
<date>2006-08-09</date> <date>2006-08-09</date>
@ -62,7 +68,7 @@
<section1 topic='Introduction' anchor='intro'> <section1 topic='Introduction' anchor='intro'>
<p>Jabber instant messaging technologies have long supported the ability for IM users to be online but appear invisible. The existing protocols for doing so are:</p> <p>Jabber instant messaging technologies have long supported the ability for IM users to be online but appear invisible. The existing protocols for doing so are:</p>
<ul> <ul>
<li><p>&xep0018; -- this protocol is not compatible with &xmppcore; and &xmppim;, and it does not provide reliable documentation of the protocol in use since many server implementations support presence of type "invisible" but not presence of type "visible".</p></li> <li><p>&xep0018; -- this protocol is not compatible with &xmppcore; and &xmppim;, and the speciifcation does not provide reliable documentation of the protocol in use since many server implementations support presence of type "invisible" but not presence of type "visible".</p></li>
<li><p>&xep0126; -- this protocol is in many ways a mis-use of privacy lists for the temporary purpose of appearing invisible rather than the intended purpose of permanently blocking communications.</p></li> <li><p>&xep0126; -- this protocol is in many ways a mis-use of privacy lists for the temporary purpose of appearing invisible rather than the intended purpose of permanently blocking communications.</p></li>
</ul> </ul>
<p>In order to provide a standards-compliant protocol that can be used in the long term, this document defines an IQ-based protocol that enables an IM user to "go invisible" and "go visible" at will within the context of a given session.</p> <p>In order to provide a standards-compliant protocol that can be used in the long term, this document defines an IQ-based protocol that enables an IM user to "go invisible" and "go visible" at will within the context of a given session.</p>
@ -71,7 +77,7 @@
<p>The requirements for invisible mode are straightforward:</p> <p>The requirements for invisible mode are straightforward:</p>
<ol start='1'> <ol start='1'>
<li>A user should be able to become visible or invisible at any time within an XMPP session.</li> <li>A user should be able to become visible or invisible at any time within an XMPP session.</li>
<li>Invisible mode is active only for the current session; if the user ends that session and starts another session, the invisibility set for the previous session does not carry over to the new session.</li> <li>Invisible mode is active only for the current session; if the user ends that session and starts another session, the invisibility mode set for the previous session does not carry over to the new session.</li>
<li>When in invisible mode, a user should be able to send directed presence to particular contacts.</li> <li>When in invisible mode, a user should be able to send directed presence to particular contacts.</li>
</ol> </ol>
</section1> </section1>
@ -83,12 +89,12 @@
<query xmlns='http://jabber.org/protocol/disco#info'/> <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq> </iq>
]]></example> ]]></example>
<p>If the server supports the protocol defined herein, it MUST return a feature of "http://jabber.org/protocol/invisibility":</p> <p>If the server supports the protocol defined herein, it MUST return a feature of "http://www.xmpp.org/extensions/xep-0186.html#ns":</p>
<example caption='Service discovery response'><![CDATA[ <example caption='Service discovery response'><![CDATA[
<iq from='bilbo@tolkien.lit/shire' to='tolkien.lit' type='get' id='disco1'> <iq from='bilbo@tolkien.lit/shire' to='tolkien.lit' type='get' id='disco1'>
<query xmlns='http://jabber.org/protocol/disco#info'> <query xmlns='http://jabber.org/protocol/disco#info'>
... ...
<feature var='http://jabber.org/protocol/invisibility'/> <feature var='http://www.xmpp.org/extensions/xep-0186.html#ns'/>
... ...
</query> </query>
</iq> </iq>
@ -96,10 +102,10 @@
<p>A client SHOULD complete this service discovery process before sending initial presence to its server.</p> <p>A client SHOULD complete this service discovery process before sending initial presence to its server.</p>
</section2> </section2>
<section2 topic='User Becomes Invisible' anchor='invisible'> <section2 topic='User Becomes Invisible' anchor='invisible'>
<p>In order for a client to go invisible, it shall send an IQ-set with no 'to' address (thus handled by the user's server) containing an &lt;invisible/&gt; element qualified by the 'http://jabber.org/protocol/invisibility' namespace:</p> <p>In order for a client to go invisible, it shall send an IQ-set with no 'to' address (thus handled by the user's server) containing an &lt;invisible/&gt; element qualified by the 'http://www.xmpp.org/extensions/xep-0186.html#ns' namespace:</p>
<example caption='Invisible command'><![CDATA[ <example caption='Invisible command'><![CDATA[
<iq type='set' id='inv1'> <iq type='set' id='inv1'>
<invisible xmlns='http://jabber.org/protocol/invisibility'/> <invisible xmlns='http://www.xmpp.org/extensions/xep-0186.html#ns'/>
</iq> </iq>
]]></example> ]]></example>
<p>If the server can successfully process the invisibility command, it MUST return an IQ-result:</p> <p>If the server can successfully process the invisibility command, it MUST return an IQ-result:</p>
@ -113,17 +119,17 @@
<li><p>MUST NOT broadcast presence notifications as a result of receiving any subsequent undirected presence notifications from the client.</p></li> <li><p>MUST NOT broadcast presence notifications as a result of receiving any subsequent undirected presence notifications from the client.</p></li>
<li><p>MUST deliver directed presence stanzas generated by the client.</p></li> <li><p>MUST deliver directed presence stanzas generated by the client.</p></li>
<li><p>MUST deliver inbound &PRESENCE; stanzas.</p></li> <li><p>MUST deliver inbound &PRESENCE; stanzas.</p></li>
<li><p>SHOULD deliver inbound &MESSAGE; stanzas whose 'to' address is the bare JID of the user (subject to standard XMPP stanza handling rules).</p></li> <li><p>SHOULD deliver inbound &MESSAGE; stanzas whose 'to' address is the bare JID (&BAREJID;) of the user (subject to standard XMPP stanza handling rules).</p></li>
<li><p>MUST deliver inbound &MESSAGE; and &IQ; stanzas whose 'to' address is the resource of the client.</p></li> <li><p>MUST deliver inbound &MESSAGE; and &IQ; stanzas whose 'to' address is the full JID (&FULLJID;) corresponding to the resource of the client.</p></li>
<li><p>MUST deliver outbound &MESSAGE; and &IQ; stanzas generated by the client (for an important note regarding presence leaks, see the <link url='#security'>Security Considerations</link> section of this document).</p></li> <li><p>MUST deliver outbound &MESSAGE; and &IQ; stanzas generated by the client (for an important note regarding presence leaks, see the <link url='#security'>Security Considerations</link> section of this document).</p></li>
</ol> </ol>
<p>If after sending directed presence the client then sends &UNAVAILABLE;, the server MUST deliver that unavailable presence only to the entities to which the client sent directed presence after going invisible.</p> <p>If after sending directed presence the client then sends &UNAVAILABLE;, the server MUST deliver that unavailable presence only to the entities to which the client sent directed presence after going invisible.</p>
</section2> </section2>
<section2 topic='User Becomes Visible' anchor='visible'> <section2 topic='User Becomes Visible' anchor='visible'>
<p>In order for a client to become visible again, it shall send an IQ-set with no 'to' address (thus handled by the user's server) containing a &lt;visible/&gt; element qualified by the 'http://jabber.org/protocol/invisibility' namespace:</p> <p>In order for a client to become visible again, it shall send an IQ-set with no 'to' address (thus handled by the user's server) containing a &lt;visible/&gt; element qualified by the 'http://www.xmpp.org/extensions/xep-0186.html#ns' namespace:</p>
<example caption='Visible command'><![CDATA[ <example caption='Visible command'><![CDATA[
<iq type='set' id='vis1'> <iq type='set' id='vis1'>
<visible xmlns='http://jabber.org/protocol/invisibility'/> <visible xmlns='http://www.xmpp.org/extensions/xep-0186.html#ns'/>
</iq> </iq>
]]></example> ]]></example>
<p>If the server can successfully process the visibility command, it MUST return an IQ-result:</p> <p>If the server can successfully process the visibility command, it MUST return an IQ-result:</p>
@ -141,7 +147,7 @@
</section1> </section1>
<section1 topic='XMPP Registrar Considerations' anchor='registrar'> <section1 topic='XMPP Registrar Considerations' anchor='registrar'>
<section2 topic='Protocol Namespaces' anchor='registrar-ns'> <section2 topic='Protocol Namespaces' anchor='registrar-ns'>
<p>The &REGISTRAR; shall include 'http://jabber.org/protocol/invisibility' in its registry of protocol namespaces (see &NAMESPACES;).</p> <p>The &REGISTRAR; shall include 'http://www.xmpp.org/extensions/xep-0186.html#ns' in its registry of protocol namespaces (see &NAMESPACES;).</p>
</section2> </section2>
</section1> </section1>
<section1 topic='XML Schema' anchor='schema'> <section1 topic='XML Schema' anchor='schema'>
@ -150,8 +156,8 @@
<xs:schema <xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/invisibility' targetNamespace='http://www.xmpp.org/extensions/xep-0186.html#ns'
xmlns='http://jabber.org/protocol/invisibility' xmlns='http://www.xmpp.org/extensions/xep-0186.html#ns'
elementFormDefault='qualified'> elementFormDefault='qualified'>
<xs:element name='invisible' type='empty'/> <xs:element name='invisible' type='empty'/>