Updates.
[silc.git] / doc / draft-riikonen-silc-spec-01.nroff
index 5410afdbb9b5990bb98ea102b7f1e6bfedeaa173..7428a40e4baf413a31c6e7f39627f3d5b005407c 100644 (file)
@@ -1442,14 +1442,13 @@ new client joins to channel, whether the channel has existed previously
 or not.  This way the new client on the channel is not able to decrypt
 any of the old traffic on the channel.  Client who receives the reply to
 the join command must start using the received Channel ID in the channel
-message communication thereafter.  However, client must not start
-communicating on the channel before it has received the packet
-SILC_PACKET_CHANNEL_KEY.
+message communication thereafter.  Client also receives the key for the
+channel in the command reply.
 
 If client wants to know the other clients currently on the channel
-the client must send SILC_COMMAND_NAMES command to receive a list of
+the client must send SILC_COMMAND_USERS command to receive a list of
 channel users.  Server implementation, however, may send command reply
-packet to SILC_COMMAND_NAMES command after client has joined to the
+packet to SILC_COMMAND_USERS command after client has joined to the
 channel even if the client has not sent the command.  Server should also
 send SILC_NOTIFY_TYPE_JOIN to all clients on the channel about a new
 client on the channel.
@@ -1580,14 +1579,14 @@ Client usually sends the commands in the SILC network.  In this case
 the client simply sends the command packet to server and the server
 processes it and replies with command reply packet.
 
-However, if the server is not able to process the command, it is usually
-sent to the server's router.  This is case for example with commands such
+However, if the server is not able to process the command, it is sent 
+to the server's router.  This is case for example with commands such
 as, SILC_COMMAND_JOIN and SILC_COMMAND_WHOIS commands.  However, there
 are other commands as well.  For example, if client sends the WHOIS
 command requesting specific information about some client the server must
 send the WHOIS command to router so that all clients in SILC network
 are searched.  The router, on the other hand, sends the WHOIS command
-to further to receive the exact information about the requested client.
+further to receive the exact information about the requested client.
 The WHOIS command travels all the way to the server who owns the client
 and it replies with command reply packet.  Finally, the server who
 sent the command receives the command reply and it must be able to
@@ -1722,9 +1721,9 @@ List of all defined commands in SILC follows.
 
    1    SILC_COMMAND_WHOIS
 
-        Max Arguments:  3
-            Arguments:  (1) [<nickname>[@<server>]]  (2) [<Client ID>]
-                        (3) [<count>]
+        Max Arguments:  3328
+            Arguments:  (1) [<nickname>[@<server>]]  (2) [<count>]
+                        (3) [<Client ID>]            (n) [...]
 
         Whois command is used to query various information about specific
         user.  The user maybe requested by their nickname and server name.
@@ -1736,7 +1735,11 @@ List of all defined commands in SILC follows.
 
         It is also possible to search the user by Client ID.  If <Client ID>
         is provided server must use it as the search value instead of
-        the <nickname>.
+        the <nickname>.  One of the arguments must be given.  It is also
+        possible to define multiple Client ID's to search multiple users
+        sending only one WHOIS command.  In this case the Client ID's are
+        appended as normal arguments.  The server replies in this case
+        with only one reply message for all requested users.
 
         To prevent miss-use of this service wildcards in the nickname
         or in the servername are not permitted.  It is not allowed
@@ -1745,9 +1748,11 @@ List of all defined commands in SILC follows.
 
         The WHOIS request must be always forwarded to router by server
         so that all users are searched.  However, the server still must
-        search its locally connected clients.  The server must send
+        search its locally connected clients.  The router must send
         this command to the server who owns the requested client.  That
-        server must reply to the command.
+        server must reply to the command.  Server should not send whois
+       replies to the client until it has received the reply from its
+       router.
 
         Reply messages to the command:
 
@@ -1777,6 +1782,7 @@ List of all defined commands in SILC follows.
             SILC_STATUS_LIST_START
             SILC_STATUS_LIST_END
             SILC_STATUS_ERR_NO_SUCH_NICK
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
             SILC_STATUS_ERR_WILDCARDS
             SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
             SILC_STATUS_ERR_TOO_MANY_PARAMS
@@ -1835,9 +1841,9 @@ List of all defined commands in SILC follows.
 
    3    SILC_COMMAND_IDENTIFY
 
-        Max Arguments:  2
-            Arguments:  (1) [<nickname>[@<server>]]  (2) [<Client ID>]
-                        (3) [<count>]
+        Max Arguments:  3328
+            Arguments:  (1) [<nickname>[@<server>]]  (2) [<count>]
+                        (3) [<Client ID>]            (n) [...]
 
         Identify.  Identify command is almost analogous to WHOIS command,
         except that it does not return as much information.  Only relevant
@@ -1853,7 +1859,11 @@ List of all defined commands in SILC follows.
 
         It is also possible to search the user by Client ID.  If <Client ID>
         is provided server must use it as the search value instead of
-        the <nickname>.
+        the <nickname>.  One of the arguments must be given.  It is also
+        possible to define multiple Client ID's to search multiple users
+        sending only one IDENTIFY command.  In this case the Client ID's are
+        appended as normal arguments.  The server replies in this case
+        with only one reply message for all requested users.
 
         To prevent miss-use of this service wildcards in the nickname
         or in the servername are not permitted.  It is not allowed
@@ -1892,6 +1902,7 @@ List of all defined commands in SILC follows.
             SILC_STATUS_LIST_START
             SILC_STATUS_LIST_END
             SILC_STATUS_ERR_NO_SUCH_NICK
+            SILC_STATUS_ERR_NO_SUCH_CLIENT_ID
             SILC_STATUS_ERR_WILDCARDS
             SILC_STATUS_ERR_NOT_ENOUGH_PARAMS
             SILC_STATUS_ERR_TOO_MANY_PARAMS
@@ -2225,9 +2236,9 @@ List of all defined commands in SILC follows.
 
    14   SILC_COMMAND_JOIN
 
-        Max Arguments:  3
-            Arguments:  (1) <channel>  (2) [<passphrase>] 
-                        (3) [<cipher>]
+        Max Arguments:  4
+            Arguments:  (1) <channel>       (2) <Client ID>
+                        (3) [<passphrase>]  (4) [<cipher>]
 
         Join to channel/create new channel.  This command is used to
         join to a channel.  If the channel does not exist the channel is
@@ -2239,6 +2250,10 @@ List of all defined commands in SILC follows.
         The name of the <channel> must not include any spaces (` '),
         non-printable characters, commas (`,') or any wildcard characters.
 
+        The second argument <Client ID> is the Client ID of the client who
+        is joining to the client.  When client sends this command to the
+        server the <Client ID> must be the client's own ID.
+
         Cipher to be used to secure the traffic on the channel may be
         requested by sending the name of the requested <cipher>.  This
         is used only if the channel does not exist and is created.  If
@@ -2263,11 +2278,12 @@ List of all defined commands in SILC follows.
 
         Reply messages to the command:
 
-        Max Arguments:  6
+        Max Arguments:  9
             Arguments:  (1) <Status Payload>  (2) <channel> 
                         (3) <Channel ID>      (4) <channel mode mask>
-                        (5) [<ban mask>]      (6) [<invite list>]
-                        (6) [<topic>]
+                        (5) <created>         (6) <Channel Key Payload>
+                        (7) [<ban mask>]      (8) [<invite list>]
+                        (9) [<topic>]
 
         This command replies with the channel name requested by the
         client, channel ID of the channel and topic of the channel
@@ -2276,10 +2292,8 @@ List of all defined commands in SILC follows.
         channel is created the mode mask is zero (0).  If ban mask
         and/or invite list is set they are sent as well.
 
-        Client must not start transmitting to the channel even after
-        server has replied to this command.  Client is permitted to 
-        start transmitting on channel after server has sent packet 
-        SILC_PACKET_CHANNEL_KEY to the client.
+        Client receives the channel key in the reply message as well
+        inside <Channel Key Payload>.
 
         Status messages:
 
@@ -2843,7 +2857,7 @@ List of all defined commands in SILC follows.
             SILC_STATUS_ERR_NO_CHANNEL_ID
 
 
-   25   SILC_COMMAND_NAMES
+   25   SILC_COMMAND_USERS
 
         Max Arguments:  1
             Arguments:  (1) <Channel ID>
@@ -2865,19 +2879,17 @@ List of all defined commands in SILC follows.
 
         Max Arguments:  5
             Arguments:  (1) <Status Payload>  (2) <Channel ID>
-                        (3) <name list>       (4) <Client ID list>
+                        (3) <list count>      (4) <Client ID list>
                         (5) <client mode list>
 
-        This command replies with the Channel ID of the requested channel,
-        comma separated list of users on the channel and Client ID list
-        of the users on the list.  The Client ID list has Client ID's
-        of all users in the list.  First Client ID in the list must be
-        the Client ID of the first user in <name list>.  The <Client ID
-        list> is formed by adding Client ID's each after each.  Note that
-        the Client ID list is binary data and the length of each ID must
-        be snooped from the data.  The <client mode list> is formed by
-        adding client's user modes on the channel each after each (4 bytes 
-        each).
+        This command replies with the Channel ID of the requested channel
+        Client ID list of the users on the channel and list of their modes.
+        The Client ID list has Client ID's of all users in the list.  The 
+        <Client ID list> is formed by adding Client ID's one after another.
+        The <client mode list> is formed by adding client's user modes on
+        the channel one after another (4 bytes (32 bits) each).  The <list 
+        count> of length of 4 bytes (32 bits), tells the number of entries
+        in the lists.  Both lists must have equal number of entries.
 
         Status messages:
 
@@ -2980,7 +2992,7 @@ List of all defined command status messages following.
         reply is the last of the list.  There won't be other replies
         belonging to this list after this one.
 
-   3 - 9
+   4 - 9
 
         Currently undefined and has been reserved for the future.