Changes between Version 6 and Version 7 of Infinote/Protocol

Show
Ignore:
Timestamp:
09/23/08 19:01:15 (5 years ago)
Author:
armin (IP: 87.178.240.102)
Comment:

Some more about groups

Legend:

Unmodified
Added
Removed
Modified
  • Infinote/Protocol

    v6 v7  
    77TODO: List error domains and codes 
    88 
    9 The Infinote protocol is based on XMPP. 
     9The basic Infinote protocol uses XML and can be used over any transport that can deliver XML messages between hosts, such as XMPP. 
    1010 
    1111== Terminology == 
     
    2323   - A client may make a request to a server, waiting for a response. In all such requests the client may set the seq attribute to some integer value. The server will answer the request with the same seq. 
    2424 
    25 TODO: Distinguish between those two meanings of "request". A thought of calling the document-modifying request a "record". 
    26  
    27 This allows especially some perhaps not-so-intuitive scenarios, such as: 
     25TODO: Distinguish between those two meanings of "request". I thought of calling the document-modifying request a "record" (which would however conflict with the record that can be made of a session, and be replayed later). 
     26 
     27Infinote allows especially some perhaps not-so-intuitive scenarios, such as: 
    2828 
    2929 * Client-to-Server-Synchronization: A client synchronizes a session to the server to be stored in its directory. 
     
    3232 * Multiple-User-Subscription: When subscribed, a host can join multiple users into the session. This allows a client to act as a proxy for more clients that only can connect to the proxy but not to the "real" server. 
    3333 
    34 == XMPP == 
    35  
    36  * All messages are sent as XMPP messages, such as: 
    37  
    38 {{{ 
    39 <message from="armin@0x539.de" to="phil@0x539.de"> 
    40  <some-content /> 
    41 </message> 
    42 }}} 
    43  
    4434== Groups == 
    4535 
    46  * All communication is done within so-called groups. A group is identified by its name. Hosts can be member of a group. Messages can be sent by a group member to either another member or to the whole group. Such a group-related message looks like this: 
    47  
    48 {{{ 
    49 <message from="armin@0x539.de" to="phil@0x539.de"> 
    50  <group name="InfDirectory" publisher="armin@0x539.de" scope="ptp"> 
    51   <more-content /> 
    52  </group> 
    53 </message> 
    54 }}} 
    55  
    56 Scope can be either "ptp" (point-to-point) or "group". If scope is "ptp", the message is only for the recipient (here phil@0x539.de). If scope is "group", the message is for the whole group. In this case, phil@0x539.de has to relay the message to all the group members that do not yet have received the message. For example, in a client/server network, the server should relay the message to all other clients (except the one the message comes from). 
    57  
    58 When using the jabber network, nothing has to be done because the original sender (armin@0x539.de) already has "direct" connections to the other group members (actually their JID and a connection to the jabber server). Note that this is not yet fully designed, because all group members need to get to know the others JIDs. Some special <group-join> messages are probably required therefore. Note also that this could also be implemented by jabber groupchat to reduce bandwidth. 
    59  
    60 Each group has a publisher, this is the host that "opens" the group. This way, two groups with the same name opened on different hosts can coexist. Another thing I am not totally sure about is whether it would be a good idea to use IP address and port number for the publisher for direct connections (i.e. when not using the jabber network). However, a host has to be aware of the fact that the same group it opened may be addressed via different publisher strings in different networks. 
     36All communication is performed within so-called groups. A group is identified by its name and publisher (see below). Hosts can be member of a group. Groups are basically used to abstract away connections between all subscribed users of a session. A group guarantees that it is possible for each member to send a message to all others members, but it depends on the ''Communication method'' on how the message is actually delivered. This can be a simple client/server architecture where the server relays all the client's messages, or it can be some form of peer-to-peer or multi-user chat. See more on communication methods below. 
     37 
     38{{{ 
     39<group name="InfDirectory" publisher="armin@0x539.de" scope="ptp"> 
     40 <more-content /> 
     41</group> 
     42}}} 
     43 
     44Scope can be either "ptp" (point-to-point) or "group". If scope is "ptp", then message is only for the recipient. If scope is "group", the message is for the whole group. In this case the receiver needs to relay the message to all the group members that do not yet have received the message (which is depending on and performed by the communication method). 
     45 
     46Each group has a publisher which is the host that opened the group. For each network that the host is part of, the host needs a unique identification string. For example, a host could be part of both a TCP/IP and a Jabber network. Then, the publisher ID could be its JID on the jabber network and its IP and Port number (in a normalized form) on the TCP/IP network. The term network here refers to the fact that members of a network cannot technically communicate with members of another network. So, if a message contains a given publisher string, all potential recipients can identify the corresponding host. 
     47 
     48[wiki:Infinote/Libinfinity Libinfinity], the infinote implementation Gobby uses, corrently simply use host-local UUIDs as publisher strings. However, this might change in future. 
     49 
     50=== Communication Methods === 
     51 
     52TODO 
    6153 
    6254== Directory ==