*/
+/****h* silcclient/Client Library Interface
+ *
+ * DESCRIPTION
+ *
+ * This header file includes the SilcClientEntry, SilcChannelEntry and
+ * SilcServer entry structures and various routines to search, resolve and
+ * handle these structures.
+ *
+ * All entries (SilcClientEntry, SilcChannelEntry and SilcServerEntry) are
+ * reference counted. If application wishes to save an entry pointer it must
+ * always first acquire a reference. The reference must be released once the
+ * entry is not needed anymore. If application wants to read any data from
+ * the entry structure it must first lock the entry. This protects access to
+ * the entries in multithreaded environment. If threads are not used, locking
+ * the entries is not needed. They however still must be referenced even
+ * when threads are not used.
+ *
+ ***/
+
#ifndef SILCCLIENT_ENTRY_H
#define SILCCLIENT_ENTRY_H
* 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 */
*/
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 */
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;
* 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
*
* 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
* 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
*
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
*
* 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,
* 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