diff --git a/inbox/mix.xml b/inbox/mix.xml index c4bf75a8..9302ad7e 100644 --- a/inbox/mix.xml +++ b/inbox/mix.xml @@ -75,17 +75,17 @@
MIX is based upon domains providing a MIX service, such as `mix.shakespeare.example`. Note that although PubSub communication is used, a domain used for MIX is a MIX domain and not a standard &xep0060; domain. (Note that, like in MUC, there is no requirement on the naming of these domains; the label 'mix' and the fact that it is a subdomain of a 'shakespeare.example' service is purely an example).
-Every MIX conversation is an addressable PubSub service (with additional MIX semantics) that will be addressed by an XMPP client using a bare JID, for example coven@mix.shakespeare.example. Other than the special "join" command, all communication with the MIX service follows &xep0060;.
+Every MIX conversation is an addressable PubSub service (with additional MIX semantics) that will be addressed by an XMPP client using a bare JID, for example coven@mix.shakespeare.example. While &xep0060; is used as the basis for the MIX model, some protocol is added or optimised in this document for the MIX use cases. For example, when a message is published to the 'urn:xmpp:mix:nodes:messages' node, a message unlike a &xep0060; payload is distributed to occupants (more akin to the old &xep0045;); this enables standard XMPP semantics of message stanzas to be used.
Message Archive Management is used for all storage of historical data (such as the history of messages sent within the conversation). Each node can be archived separately (e.g., the presence node or the configuration node). MIX clients can retrieve information archived in MAM in order to quickly resync with regard to a conversation, and can do so without necessarily providing presence information.
@@ -95,7 +95,7 @@A user joins a conversation by sending a MIX "join" command. There's no default set of nodes: all nodes must be specified if the user wants that information (but clients should pick the standard MIX ones at least by default for normal usage). It's possible to forward-subscribe to nodes that don't yet exist, in case they're added (e.g. presence added to a MUC). The server injects a new item into the "urn:xmpp:mix:nodes:participants" node automatically.
+A user joins a conversation by sending a MIX "join" command. There's no default set of nodes: all nodes must be specified if the user wants that information (but clients should pick the standard MIX ones at least by default for normal usage). It's possible to forward-subscribe to nodes that don't yet exist, in case they're added (e.g. presence added to a MUC). The server injects a new item into the "urn:xmpp:mix:nodes:participants" node automatically. TODO: include the nickname at this point?
The conversation must process the join atomically. The conversation responds with an IQ-result. This stanza includes the nodes to which the user was subscribed, as well as the permanent participant identifier (PID) of the user.
+The conversation must process the join atomically. The conversation responds with an IQ-result. This stanza includes the nodes to which the user was subscribed, as well as the JID that will be used for the user in this room (real JID for non-anonymous rooms, proxy JID for semi-anonymous rooms). TODO: does this need to always be a proxyJID? List discussion.
The conversation also adds the user to the participants node and sends a notification.
Each <participant> element includes a 'pid' attribute, which is the stable participant identifier for this user in this conversation. If this is a transparent conversation, the element MAY include a 'jid' attribute specifying the bare JID of the user. If the user has registered a service-wide nickname, the element MAY also include a 'nick' attribute.
+Each <participant> element includes a 'jid' attribute, which is the stable participant identifier for this user in this conversation. TODO: proxy/realJID mapping (admins might see real JIDs even in a semianon room)
A user can register with the MIX service (not any particular conversation) by sending a <register/> command to the service.
+A user can register with the MIX service (not any particular conversation) by sending a <register/> command to the service. TODO: This should be available either room or service-based, with discovery.
If the register request does not contain a <nick/> element, then the MIX service assigns one (this SHOULD be a UUID).
+If the register request does not contain a <nick/> element, then the MIX service assigns one (this SHOULD be a UUID). TODO: Discuss - is there any reason for this to be a UUID? Surely anything the server wants to assign is fine (with security consideration about leaking JID information).
Participation in the conversation is decoupled from sending presence through the conversation. A participant comes online by publishing availability to the "urn:xmpp:mix:nodes:presence" node.
+Participation in the conversation is decoupled from sending presence through the conversation. A participant comes online by publishing availability to the "urn:xmpp:mix:nodes:presence" node. TODO: Move back to using presence normally (suggested with rooms in rosters), for correct 'offline' behaviour, etc.
The user's presence information is then published by the service to the "urn:xmpp:mix:nodes:presence" node, with the 'publisher' attribute set to the user's participant identifier.
+The user's presence information is then published by the service to the "urn:xmpp:mix:nodes:presence" node, with the 'publisher' attribute set to the user's participant identifier. TODO: List discussion on the benefits of wrapping vs. normal presence.
To go offline, the user retracts its availability item from the presence node.
+To go offline, the user sends a normal unavailable stanza (usually through their server's usual offline broadcast rules).
The conversation retracts the item and notifies subscribers to the presence node.
+The conversation retracts the item and notifies subscribers to the presence node. TODO: Update depending on discussion about events vs. presence.
A user sends a message by publishing it to messages node.
+A user sends a message by publishing it to messages node. TODO: List discussion about type=groupchat messages vs. xep60 publish.
The message comes from the conversation as a pubsub notification, with the 'publisher' attribute set to the participant identifier of the sender.
Note that leaving the conversation is a permanent action, not just a matter of telling the conversation that the user is not currently available (as in MUC). If the user leaves the conversation, the MIX service is responsible for unsubscribing the user from all nodes in the conversation, and also for telling participants that the user is offline.
+Note that leaving the conversation is a permanent action for a user across all clients, not just a matter of telling the conversation that the user is not currently available (as in MUC), or for a single client. If the user leaves the conversation, the MIX service is responsible for unsubscribing the user from all nodes in the conversation, and also for telling participants that the user is offline.
User sends to conversation requesting invite, receives it, forwards it to contact. Solves issues with both directed and mediated invites. ### TODO: Dave had a point about contact preverification about users' invites. Discuss.
@@ -460,7 +452,7 @@