Merged silc_1_1_branch to trunk.
[silc.git] / lib / silcclient / silcclient_entry.h
index 6ebe4129e35c93bf209560833da26c7597eacec8..4b57f859bcde386d125d05cc3be20e44160df1ad 100644 (file)
@@ -78,7 +78,7 @@
  * SOURCE
  */
 struct SilcClientEntryStruct {
-  char nickname[128 + 1];           /* Nickname */
+  char nickname[256 + 1];           /* Nickname */
   char username[128 + 1];           /* Username */
   char hostname[256 + 1];           /* Hostname */
   char server  [256 + 1];           /* SILC server name */
@@ -124,6 +124,7 @@ struct SilcClientEntryStruct {
  */
 struct SilcChannelEntryStruct {
   char *channel_name;               /* Channel name */
+  char server[256 + 1];                     /* SILC server name */
   char *topic;                      /* Current topic, may be NULL */
   SilcPublicKey founder_key;        /* Founder key, may be NULL */
   SilcDList channel_pubkeys;        /* Channel public keys, may be NULL */
@@ -133,6 +134,8 @@ struct SilcChannelEntryStruct {
   SilcHashTable user_list;          /* Joined users.  Key to hash table is
                                        SilcClientEntry, context is
                                        SilcChannelUser. */
+  const char *cipher;               /* Current channel cipher algorithm*/
+  const char *hmac;                 /* Current channel HMAC algorithm */
 
   void *context;                    /* Application specific context */
   SilcChannelEntryInternal internal;
@@ -325,8 +328,13 @@ void silc_client_list_free(SilcClient client, SilcClientConnection conn,
  *    completion callback will be called when the client entries has been
  *    found.  After the server returns the client information it is cached
  *    and can be accesses locally at a later time.  The resolving is done
- *    with IDENTIFY command.  The `server' may be NULL.  Returns 0 on
- *    error and the command identifier used with the command otherwise.
+ *    with IDENTIFY command.  The `server' may be NULL.  The server
+ *    associated with the nickname may be in the `nickname' (nick@server).
+ *    The `nickname' may also be a formatted nickname in which case the
+ *    formatting is ignored and the base nickname is used.  If the nickname
+ *    is formatted it must be formatted as defined in SilcClientParams.
+ *    Returns 0 on error and the command identifier used with the command
+ *    otherwise.
  *
  * NOTES
  *
@@ -368,8 +376,13 @@ SilcUInt16 silc_client_get_clients(SilcClient client,
  *    completion callback will be called when the client entries has been
  *    found.  After the server returns the client information it is cached
  *    and can be accesses locally at a later time.  The resolving is done
- *    with WHOIS command.  The `server' may be NULL.  Returns 0 on error,
- *    and the command identifier used with the command otherwise.
+ *    with WHOIS command.  The `server' may be NULL.  The server
+ *    associated with the nickname may be in the `nickname' (nick@server).
+ *    The `nickname' may also be a formatted nickname in which case the
+ *    formatting is ignored and the base nickname is used.  If the nickname
+ *    is formatted it must be formatted as defined in SilcClientParams.
+ *    Returns 0 on error and the command identifier used with the command
+ *    otherwise.
  *
  *    If the `attributes' is non-NULL then the buffer includes Requested
  *    Attributes which can be used to fetch very detailed information
@@ -400,19 +413,20 @@ SilcUInt16 silc_client_get_clients_whois(SilcClient client,
  *    SilcDList silc_client_get_clients_local(SilcClient client,
  *                                            SilcClientConnection conn,
  *                                            const char *nickname,
- *                                            const char *format);
+ *                                            SilcBool return_all);
  *
  * DESCRIPTION
  *
  *    Same as silc_client_get_clients function but does not resolve anything
- *    from the server.  This checks local cache and returns all matching
- *    clients from the local cache.  If none was found this returns NULL.
- *    The `nickname' is the real nickname of the client, and the `format'
- *    is the formatted nickname to find exact match from multiple found
- *    entries.  The format must be same as given in the SilcClientParams
- *    structure to the client library.  If the `format' is NULL all found
- *    clients by `nickname' are returned.  The caller must free the
- *    returned list by silc_client_list_free function.
+ *    from the server.  This checks local cache and returns matching clients
+ *    from the local cache.  If none was found this returns NULL.  The
+ *    `nickname' is the nickname to find and it may be a formatted nickname
+ *    or a base nickname.  If the `return_all' is TRUE this call will return
+ *    all clients matching the `nickname' base.  If it is FALSE this will
+ *    return the exact match if `nickname' is a formatted nickname or the
+ *    first matching nickname if it is not formatted.  The formatted nickname
+ *    must of the format specified in SilcClientParams.  The caller must free
+ *    the returned list by calling silc_client_list_free function.
  *
  * NOTES
  *
@@ -427,47 +441,7 @@ SilcUInt16 silc_client_get_clients_whois(SilcClient client,
 SilcDList silc_client_get_clients_local(SilcClient client,
                                        SilcClientConnection conn,
                                        const char *nickname,
-                                       const char *format);
-
-/****f* silcclient/SilcClientAPI/silc_client_get_clients_by_channel
- *
- * SYNOPSIS
- *
- *    void silc_client_get_clients_by_channel(SilcClient client,
- *                                            SilcClientConnection conn,
- *                                            SilcChannelEntry channel,
- *                                            SilcGetClientCallback completion,
- *                                            void *context);
- *
- * DESCRIPTION
- *
- *    Gets client entries by the channel indicated by `channel'. Thus,
- *    it resovles the users currently on that channel. If all users are
- *    already resolved this returns the users from the channel. If the
- *    users are resolved only partially this resolves the complete user
- *    information. If no users are resolved on this channel at all, this
- *    calls USERS command to resolve all users on the channel. The `completion'
- *    will be called after the entries are available. When server returns
- *    the client information it will be cached and can be accessed locally
- *    at a later time.
- *
- *    This function can be used for example in SILC_COMMAND_JOIN command
- *    reply handling in application to resolve users on that channel.  It
- *    also can be used after calling silc_client_get_channel_resolve to
- *    resolve users on that channel.
- *
- * NOTES
- *
- *    The resolving is done with WHOIS command.  For this reason this
- *    command may take a long time because it resolves detailed user
- *    information.
- *
- ***/
-void silc_client_get_clients_by_channel(SilcClient client,
-                                       SilcClientConnection conn,
-                                       SilcChannelEntry channel,
-                                       SilcGetClientCallback completion,
-                                       void *context);
+                                       SilcBool return_all);
 
 /****f* silcclient/SilcClientAPI/silc_client_get_client_by_id
  *
@@ -705,7 +679,7 @@ SilcChannelEntry silc_client_get_channel(SilcClient client,
  *    Resolves entry for channel by the channel name from the server.
  *    The resolving is done with IDENTIFY command. Note that users on
  *    the channel are not resolved at the same time. Use for example
- *    silc_client_get_clients_by_channel to resolve all users on a channel.
+ *    USERS command to resolve all users on a channel.
  *
  ***/
 void silc_client_get_channel_resolve(SilcClient client,
@@ -761,8 +735,7 @@ SilcChannelEntry silc_client_get_channel_by_id(SilcClient client,
  *    a pending command to it, if needed.  Returns 0 on error.
  *
  *    Note that users on the channel are not resolved at the same time.
- *    Use for example silc_client_get_clients_by_channel to resolve all
- *    users on a channel.
+ *    Use for example USERS command to resolve all users on a channel.
  *
  ***/
 SilcUInt16