Clique

From OLPC
Revision as of 10:49, 6 February 2008 by Morgs (talk | contribs) (Create page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Clique is the protocol (formerly called rMulticast) used by telepathy-salut to implement multi-user chat on Link Local XMPP.

The following is derived and extracted from the clique.xml distributed with telepathy-salut-0.2.2 in docs/.

Introduction

Clique is an extension of XEP-0174 to support multi-user chat. It consists of the following components:

  • 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
  • XMPP-like XML messages sent with stream ID 0
  • optional auxiliary data (e.g. Tubes) sent with stream IDs 1-65535, with semantics signalled by XML messages in stream 0

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.

XEP-0174 instance names are used for identification in a chat room.

The Clique XML namespace can also be used for certain elements sent over XEP-0174 unicast TCP streams, for instance to send invitations.

Use Cases

FIXME: there need to be some examples of the actual Clique protocol here

Advertising a public link-local chatroom via mDNS

In this example a chatroom called "Witchcraft" uses the multicast group 239.255.71.66, port 13251 (arbitrarily chosen).

We recommend that chatrooms use a random high port number in a random multicast group in the range 239.255.71.x.

       ; 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"

Inviting a contact to a public or private room

In this example crone@desktop invites hecate@broom to the chatroom given above.

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.


     <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>We need to plot Macbeth's doom, but the XMPP server is
           down</reason>
       </invite>
       <body>You got a Clique chatroom invitation</body>
     </message>