A protocol for serverless link-local multi-user chat over reliable multicast.
WARNING: This document has not yet been accepted for consideration or approved in any official manner by the XMPP Standards Foundation, and this document must not be referred to as an XMPP Extension Protocol (XEP). If this document is accepted as a XEP by the XMPP Council, it will be published at <http://www.xmpp.org/extensions/> and announced on the <standards@xmpp.org> mailing list.
Series: XEP
Number: proto-clique
Publisher: XMPP Standards Foundation
Status:
ProtoXEP
Type:
Extension
Version: 0.0.1
Last Updated: 2007-11-02
Approving Body: XMPP Council
Dependencies: XMPP Core, XEP-0174
Supersedes: None
Superseded By: None
Short Name: NOT YET ASSIGNED
Email:
simon.mcvittie@collabora.co.uk
JabberID:
simon.mcvittie@collabora.co.uk
Copyright (c) 2007 Collabora Limited. This document may be distributed under the same terms as the Telepathy specification.
The preferred venue for discussion of this document is the Standards discussion list: <http://mail.jabber.org/mailman/listinfo/standards>.
1. Introduction
2. Requirements
3. Glossary
4. Use Cases
4.1. Advertising a public link-local chatroom via mDNS
4.2. Inviting a contact to a public or private room
5. Business Rules
6. Implementation Notes
7. Internationalization Considerations
8. Security Considerations
9. IANA Considerations
10. XMPP Registrar Considerations
11. XML Schema
Notes
Revision History
Clique is an extension of XEP-0174 to support multi-user chat. It consists of the following components:
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.
STRONGLY RECOMMENDED.
OPTIONAL.
FIXME: there need to be some examples of the actual Clique protocol here
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"
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.
<!-- 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>
OPTIONAL.
OPTIONAL.
OPTIONAL.
REQUIRED.
REQUIRED.
None.
<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>
First draft.
(smcv)END