#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. */
};
/***/
+/****s* silcclient/SilcClientAPI/SilcClientEntry
+ *
+ * NAME
+ *
+ * typedef struct SilcClientEntryStruct { ... } *SilcClientEntry
+ *
+ * DESCRIPTION
+ *
+ * This structure represents a client or a user in the SILC network.
+ * The local user has this structure also and it can be accessed from
+ * SilcClientConnection structure. All other users in the SILC network
+ * that are accessed using the Client Library routines will have their
+ * own SilcClientEntry structure. For example, when finding users by
+ * their nickname the Client Library returns this structure back to
+ * the application.
+ *
+ * SOURCE
+ */
+struct SilcClientEntryStruct {
+ /* General information */
+ char *nickname; /* nickname */
+ char *username; /* username */
+ char *hostname; /* hostname */
+ char *server; /* SILC server name */
+ char *realname; /* Realname (userinfo) */
+
+ /* Mode, ID and other information */
+ SilcUInt32 mode; /* User mode in SILC */
+ SilcClientID *id; /* The Client ID */
+ SilcDList attrs; /* Requested Attributes (maybe NULL) */
+ unsigned char *fingerprint; /* Fingerprint of client's public key */
+ SilcUInt32 fingerprint_len; /* Length of the fingerprint */
+
+ /* Private message keys */
+ SilcCipher send_key; /* Private message key for sending */
+ SilcCipher receive_key; /* Private message key for receiving */
+ unsigned char *key; /* Set only if appliation provided the
+ key material. NULL if the library
+ generated the key. */
+ SilcUInt32 key_len; /* Key length */
+ SilcClientKeyAgreement ke; /* Current key agreement context or NULL */
+
+ /* SilcClientEntry status information */
+ SilcEntryStatus status; /* Status mask */
+ SilcHashTable channels; /* All channels client has joined */
+ SilcUInt16 resolve_cmd_ident; /* Command identifier when resolving */
+ bool generated; /* TRUE if library generated `key' */
+ bool valid; /* FALSE if this entry is not valid */
+};
+/***/
+
+/****s* silcclient/SilcClientAPI/SilcChannelEntry
+ *
+ * NAME
+ *
+ * typedef struct SilcChannelEntryStruct { ... } *SilcChannelEntry
+ *
+ * DESCRIPTION
+ *
+ * This structure represents a channel in the SILC network. All
+ * channels that the client are aware of or have joined in will be
+ * represented as SilcChannelEntry. The structure includes information
+ * about the channel.
+ *
+ * SOURCE
+ */
+struct SilcChannelEntryStruct {
+ /* General information */
+ char *channel_name; /* Channel name */
+ SilcChannelID *id; /* Channel ID */
+ SilcUInt32 mode; /* Channel mode */
+
+ /* 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 */
+
+ /* Channel private keys */
+ SilcDList private_keys; /* List of private keys or NULL */
+ SilcChannelPrivateKey curr_key; /* Current private key */
+
+ /* SilcChannelEntry status information */
+ SilcCipher old_channel_key;
+ SilcHmac old_hmac;
+ SilcTask rekey_task;
+ SilcUInt16 resolve_cmd_ident; /* Command identifier when
+ resolving this entry */
+};
+/***/
+
+/****s* silcclient/SilcClientAPI/SilcServerEntry
+ *
+ * NAME
+ *
+ * typedef struct SilcServerEntryStruct { ... } *SilcServerEntry
+ *
+ * DESCRIPTION
+ *
+ * This structure represents a server in the SILC network. All servers
+ * that the client is aware of and have for example resolved with
+ * SILC_COMMAND_INFO command have their on SilcServerEntry structure.
+ *
+ * SOURCE
+ */
+struct SilcServerEntryStruct {
+ /* Generate information */
+ char *server_name; /* Server name */
+ char *server_info; /* Server info */
+ SilcServerID *server_id; /* Server ID */
+ SilcUInt16 resolve_cmd_ident; /* Command identifier when
+ resolving this entry */
+};
+/***/
+
/****d* silcclient/SilcClientAPI/SilcKeyAgreementStatus
*
* NAME
*
* NAME
*
- * typedef struct { ... } SilcChannelPrivateKey;
+ * typedef struct SilcChannelPrivateKeyStruct { ... }
+ * *SilcChannelPrivateKey;
*
* DESCRIPTION
*
*
* SOURCE
*/
-typedef struct SilcChannelPrivateKeyStruct {
+struct SilcChannelPrivateKeyStruct {
char *name; /* Application given name */
SilcCipher cipher; /* The cipher and key */
SilcHmac hmac; /* The HMAC and hmac key */
unsigned char *key; /* The key data */
SilcUInt32 key_len; /* The key length */
-} *SilcChannelPrivateKey;
+};
/***/
/****f* silcclient/SilcClientAPI/SilcAskPassphrase