X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fidlist.h;h=ef48ed54fbdbacf53af102c48af8a412c6b83c5a;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=cd4de48926b603611613715a82f3627a8fac912e;hpb=dec23b2f25ece17efc64295a144cde7b72b7014d;p=silc.git diff --git a/lib/silcclient/idlist.h b/lib/silcclient/idlist.h index cd4de489..ef48ed54 100644 --- a/lib/silcclient/idlist.h +++ b/lib/silcclient/idlist.h @@ -1,16 +1,15 @@ /* - idlist.h + idlist.h Author: Pekka Riikonen - Copyright (C) 1997 - 2001 Pekka Riikonen + Copyright (C) 2001 - 2002 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - + the Free Software Foundation; version 2 of the License. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -21,6 +20,7 @@ #ifndef IDLIST_H #define IDLIST_H +/* Client entry status */ typedef enum { SILC_CLIENT_STATUS_NONE = 0x0000, SILC_CLIENT_STATUS_RESOLVING = 0x0001, @@ -30,57 +30,59 @@ typedef enum { (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. */ -typedef struct { +struct SilcClientEntryStruct { char *nickname; /* nickname */ char *username; /* username */ char *hostname; /* hostname */ char *server; /* SILC server name */ char *realname; /* Realname (userinfo) */ - uint32 num; - uint32 mode; /* User mode in SILC */ + SilcUInt32 num; + 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 */ bool valid; /* FALSE if this entry is not valid */ 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. */ - uint32 key_len; + SilcUInt32 key_len; bool generated; /* TRUE if library generated the key */ SilcClientKeyAgreement ke; /* Current key agreement context or NULL */ SilcClientStatus status; /* Status mask */ -} *SilcClientEntry; + SilcHashTable channels; /* All channels client has joined */ +}; /* Client and its mode on a channel */ -typedef struct SilcChannelUserStruct { +struct SilcChannelUserStruct { SilcClientEntry client; - uint32 mode; - struct SilcChannelUserStruct *next; -} *SilcChannelUser; + SilcUInt32 mode; + SilcChannelEntry channel; +}; /* Structure to hold one channel private key. */ -typedef struct { +struct SilcChannelPrivateKeyStruct { SilcCipher cipher; /* The cipher and key */ SilcHmac hmac; /* The HMAC and hmac key */ unsigned char *key; /* The key data */ - uint32 key_len; /* The key length */ -} *SilcChannelPrivateKey; + SilcUInt32 key_len; /* The key length */ +}; /* Channel entry context. This is allocate for every channel client has joined to. This includes for example the channel specific keys */ -typedef struct SilcChannelEntryStruct { +struct SilcChannelEntryStruct { char *channel_name; SilcChannelID *id; - uint32 mode; - bool on_channel; + SilcUInt32 mode; - /* Joined clients */ - SilcList clients; + /* All clients that has joined this channel */ + SilcHashTable user_list; /* Channel keys */ SilcCipher channel_key; /* The channel key */ unsigned char *key; /* Raw key data */ - uint32 key_len; + SilcUInt32 key_len; unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; /* Current IV */ SilcHmac hmac; /* Current HMAC */ SilcDList private_keys; /* List of private keys or NULL */ @@ -92,16 +94,16 @@ typedef struct SilcChannelEntryStruct { SilcCipher old_channel_key; SilcHmac old_hmac; SilcTask rekey_task; -} *SilcChannelEntry; +}; /* 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. */ -typedef struct { +struct SilcServerEntryStruct { char *server_name; char *server_info; SilcServerID *server_id; -} *SilcServerEntry; +}; /* Prototypes. These are used only by the library. Application should not call these directly. */ @@ -109,25 +111,31 @@ typedef struct { SilcClientEntry silc_client_add_client(SilcClient client, SilcClientConnection conn, char *nickname, char *username, - char *userinfo, SilcClientID *id, uint32 mode); + char *userinfo, SilcClientID *id, SilcUInt32 mode); void silc_client_update_client(SilcClient client, SilcClientConnection conn, SilcClientEntry client_entry, const char *nickname, const char *username, const char *userinfo, - uint32 mode); + SilcUInt32 mode); void silc_client_del_client_entry(SilcClient client, + SilcClientConnection conn, SilcClientEntry client_entry); SilcClientEntry silc_idlist_get_client(SilcClient client, SilcClientConnection conn, const char *nickname, const char *format, bool query); -SilcChannelEntry silc_idlist_get_channel_by_id(SilcClient client, - SilcClientConnection conn, - SilcChannelID *channel_id, - int query); +SilcChannelEntry silc_client_add_channel(SilcClient client, + SilcClientConnection conn, + const char *channel_name, + SilcUInt32 mode, + SilcChannelID *channel_id); +bool silc_client_replace_channel_id(SilcClient client, + SilcClientConnection conn, + SilcChannelEntry channel, + SilcChannelID *new_id); void silc_client_nickname_format(SilcClient client, SilcClientConnection conn, SilcClientEntry client_entry);