<?xml version='1.0' encoding='UTF-8'?> <?xml-stylesheet type='text/xsl' href='xep.xsl'?> <xep> <header> <title>Clique - link-local chat rooms</title> <abstract>A protocol for serverless link-local multi-user chat over reliable multicast.</abstract> <legal>Copyright (c) 2007 Collabora Limited. This document may be distributed under the same terms as the Telepathy specification.</legal> <number>proto-clique</number> <status>ProtoXEP</status> <type>Extension</type> <sig>Standards</sig> <approver>Telepathy project</approver> <dependencies> <spec>XMPP Core</spec> <spec>XEP-0174</spec> </dependencies> <supersedes/> <supersededby/> <shortname>NOT YET ASSIGNED</shortname> <author> <firstname>Simon</firstname> <surname>McVittie</surname> <email>simon.mcvittie@collabora.co.uk</email> <jid>simon.mcvittie@collabora.co.uk</jid> </author> <revision> <version>0.0.1</version> <date>2007-11-02</date> <initials>smcv</initials> <remark><p>First draft.</p></remark> </revision> </header> <section1 topic='Introduction' anchor='intro'> <p>Clique is an extension of XEP-0174 to support multi-user chat. It consists of the following components:</p> <ul> <li>a binary multicast message-passing protocol sometimes referred to as rMulticast, with retransmission/reliability, fragmentation/reassembly, causal ordering, and reliable membership semantics, in which messages are associated with a stream ID in the range 0 to 65535</li> <li>XMPP-like XML messages sent with stream ID 0</li> <li>optional auxiliary data (e.g. Tubes) sent with stream IDs 1-65535, with semantics signalled by XML messages in stream 0</li> </ul> <p>The chat room behaves a lot like XMPP, and namespaces used in XMPP have their usual semantics. However, instead of a stream of XML as in XMPP, Clique's XMPP-like messages are individually well-formed XML documents.</p> <p>XEP-0174 instance names are used for identification in a chat room.</p> <p>The Clique XML namespace can also be used for certain elements sent over XEP-0174 unicast TCP streams, for instance to send invitations.</p> </section1> <section1 topic='Requirements' anchor='reqs'> <p>STRONGLY RECOMMENDED.</p> </section1> <section1 topic='Glossary' anchor='glossary'> <p>OPTIONAL.</p> </section1> <section1 topic='Use Cases' anchor='usecases'> <p>FIXME: there need to be some examples of the actual Clique protocol here</p> <section2 topic='Advertising a public link-local chatroom via mDNS'> <p>In this example a chatroom called "Witchcraft" uses the multicast group 239.255.71.66, port 13251 (arbitrarily chosen).</p> <p>We recommend that chatrooms use a random high port number in a random multicast group in the range 239.255.71.x.</p> <code> <![CDATA[ ; A dummy A record for the chatroom's multicast group Witchcraft._clique._udp.local. IN A 239.255.71.66 ; A DNS-SD service of type _clique._udp _clique._udp.local. IN PTR Witchcraft._clique._udp.local. Witchcraft._clique._udp.local. IN SRV 13251 ._clique._udp.local. ; For future expansion - implementations SHOULD NOT resolve this, ; unless they implement a future version of this protocol that ; defines some TXT keys for _clique._udp Witchcraft._clique._udp.local. IN TXT "txtvers=0" ]]> </code> </section2> <section2 topic='Inviting a contact to a public or private room'> <p>In this example crone@desktop invites hecate@broom to the chatroom given above.</p> <p>This would work just as well if the chatroom was not advertised in mDNS; this can be used to make "private" chatrooms. Note however that anyone with a network traffic sniffer can see the chatroom itself.</p> <code> <![CDATA[ <!-- Sent via XEP-0174 unicast TCP from crone@desktop to hecate@broom --> <message from='crone@desktop' to='hecate@broom'> <invite xmlns='http://telepathy.freedesktop.org/xmpp/clique'> <roomname>Witchcraft</roomname> <address>239.255.71.66</address> <port>13251</port> <!-- reason is optional --> <reason>We need to plot Macbeth's doom, but the XMPP server is down</reason> </invite> <!-- Displayed by iChat and other non-Clique-compatible clients --> <body>You got a Clique chatroom invitation</body> </message> ]]> </code> </section2> </section1> <section1 topic='Business Rules' anchor='rules'> <p>OPTIONAL.</p> </section1> <section1 topic='Implementation Notes' anchor='impl'> <p>OPTIONAL.</p> </section1> <section1 topic='Internationalization Considerations' anchor='i18n'> <p>OPTIONAL.</p> </section1> <section1 topic='Security Considerations' anchor='security'> <p>REQUIRED.</p> </section1> <section1 topic='IANA Considerations' anchor='iana'> <p>REQUIRED.</p> </section1> <section1 topic='XMPP Registrar Considerations' anchor='registrar'> <p>None.</p> </section1> <section1 topic='XML Schema' anchor='schema'> <code> <![CDATA[ <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://telepathy.freedesktop.org/xmpp/clique' xmlns='http://telepathy.freedesktop.org/xmpp/clique' elementFormDefault='qualified'> <!-- LLMUC invitation. Sent over the IM socket --> <xs:element name='invite'> <xs:complexType> <xs:all> <xs:element name='roomname' type='xs:string'/> <xs:element name='reason' minOccurs='0' type='xs:string'/> <xs:element name='address' type='xs:string'/> <xs:element name='port' type='xs:unsignedShort'/> <!-- In OLPC builds, <properties> with NS_OLPC_ACTIVITY_PROPS goes here --> <xs:any minOccurs='0' maxOccurs='unbounded' namespace='##other'> </xs:all> </xs:complexType> </xs:element> </xs:schema> ]]> </code> </section1> </xep>