#ifndef IDLIST_H
#define IDLIST_H
-/* Client entry status */
-typedef enum {
- SILC_CLIENT_STATUS_NONE = 0x0000,
- SILC_CLIENT_STATUS_RESOLVING = 0x0001,
-} SilcEntryStatus;
-
-/* Client entry context. When client receives information about new client
- (it receives its ID, for example, by IDENTIFY request) we create new
- client entry. This entry also includes the private message keys if
- they are used. */
-struct SilcClientEntryStruct {
- char *nickname; /* nickname */
- char *username; /* username */
- char *hostname; /* hostname */
- char *server; /* SILC server name */
- char *realname; /* Realname (userinfo) */
- SilcUInt32 mode; /* User mode in SILC */
- SilcClientID *id; /* The Client ID */
- unsigned char *fingerprint; /* Fingerprint of client's public key */
- SilcUInt32 fingerprint_len; /* Length of the fingerprint */
- SilcCipher send_key; /* Private message key for sending */
- SilcCipher receive_key; /* Private message key for receiving */
- SilcClientKeyAgreement ke; /* Current key agreement context or NULL */
- SilcDList attrs; /* Requested Attributes (maybe NULL) */
- SilcEntryStatus status; /* Status mask */
- SilcHashTable channels; /* All channels client has joined */
- unsigned char *key; /* Set only if appliation provided the
- key material. NULL if the library
- generated the key. */
- SilcUInt32 key_len; /* Key length */
- SilcUInt16 resolve_cmd_ident; /* Command identifier when resolving */
- bool generated; /* TRUE if library generated `key' */
- bool valid; /* FALSE if this entry is not valid */
-};
-
-/* Client and its mode on a channel */
-struct SilcChannelUserStruct {
- SilcClientEntry client;
- SilcUInt32 mode;
- SilcChannelEntry channel;
-};
-
-/* Channel entry context. This is allocate for every channel client has
- joined to. This includes for example the channel specific keys */
-struct SilcChannelEntryStruct {
- char *channel_name;
- SilcChannelID *id;
- SilcUInt32 mode;
- SilcUInt16 resolve_cmd_ident;
-
- /* All clients that has joined this channel */
- SilcHashTable user_list;
-
- /* Channel keys */
- SilcCipher channel_key; /* The channel key */
- unsigned char *key; /* Raw key data */
- SilcUInt32 key_len; /* Raw key data length */
- unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; /* Current IV */
- SilcHmac hmac; /* Current HMAC */
- SilcDList private_keys; /* List of private keys or NULL */
- SilcChannelPrivateKey curr_key; /* Current private key */
-
- /* Old channel key is saved for a short period of time when rekey occurs
- in case if someone is sending messages after the rekey encrypted with
- the old key, we can still decrypt them. */
- SilcCipher old_channel_key;
- SilcHmac old_hmac;
- SilcTask rekey_task;
-};
-
-/* Server entry context. This represents one server. When server information
- is resolved with INFO command the server info is saved in this context.
- Also the connected servers are saved here. */
-struct SilcServerEntryStruct {
- char *server_name;
- char *server_info;
- SilcServerID *server_id;
- SilcUInt16 resolve_cmd_ident;
-};
-
/* Prototypes. These are used only by the library. Application should not
call these directly. */