From: Pekka Riikonen Date: Thu, 7 Nov 2002 09:33:30 +0000 (+0000) Subject: Moved SilcClientEntry, SilcServerEntry and SilcChannelEntry X-Git-Tag: silc.toolkit.0.9.5~5 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=714b3135b188e7406e4e48384c44239b3254485b Moved SilcClientEntry, SilcServerEntry and SilcChannelEntry to be public. --- diff --git a/CHANGES b/CHANGES index cb226276..ef180903 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,11 @@ Thu Nov 7 10:05:28 CET 2002 Pekka Riikonen Affected files lib/silcclient/silcclient.h, client.c and client_internal.h. + * Moved the SilcClientEntry, SilcChannelEntry and + SilcServerEntry to silcclient.h to be public and documented + them for application. Affected files are + lib/silcclient/silcclient.h and idlist.h. + Wed Nov 6 17:18:13 EET 2002 Pekka Riikonen * Fixed manual page installation patch by Ville Räsänen. diff --git a/lib/silcclient/client.h b/lib/silcclient/client.h index 0fc86888..d49833f6 100644 --- a/lib/silcclient/client.h +++ b/lib/silcclient/client.h @@ -38,5 +38,19 @@ typedef struct SilcChannelUserStruct *SilcChannelUser; typedef struct SilcClientInternalStruct *SilcClientInternal; typedef struct SilcClientConnectionInternalStruct *SilcClientConnectionInternal; +typedef struct SilcChannelPrivateKeyStruct *SilcChannelPrivateKey; +/* Client entry status */ +typedef enum { + SILC_CLIENT_STATUS_NONE = 0x0000, + SILC_CLIENT_STATUS_RESOLVING = 0x0001, +} SilcEntryStatus; + +/* Client and its mode on a channel */ +struct SilcChannelUserStruct { + SilcClientEntry client; + SilcUInt32 mode; + SilcChannelEntry channel; +}; + #endif diff --git a/lib/silcclient/idlist.h b/lib/silcclient/idlist.h index f6357b49..4e9d1c87 100644 --- a/lib/silcclient/idlist.h +++ b/lib/silcclient/idlist.h @@ -20,86 +20,6 @@ #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. */ diff --git a/lib/silcclient/silcclient.h b/lib/silcclient/silcclient.h index e9e84ad4..2783f456 100644 --- a/lib/silcclient/silcclient.h +++ b/lib/silcclient/silcclient.h @@ -179,6 +179,125 @@ struct SilcClientConnectionStruct { }; /***/ +/****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 @@ -262,7 +381,8 @@ typedef struct { * * NAME * - * typedef struct { ... } SilcChannelPrivateKey; + * typedef struct SilcChannelPrivateKeyStruct { ... } + * *SilcChannelPrivateKey; * * DESCRIPTION * @@ -271,13 +391,13 @@ typedef struct { * * 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