X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fidlist.h;h=c120ff296c6659f349d442e84fc2ca3352df6466;hp=b71a0fa13d3ceb47615d95ca1b060faadbe72e8c;hb=017dec75a98209fbef49eb496c2269b0c49e736d;hpb=bb1973faaa81ead23b3d5e05b45cddd8a47d51f7 diff --git a/lib/silcclient/idlist.h b/lib/silcclient/idlist.h index b71a0fa1..c120ff29 100644 --- a/lib/silcclient/idlist.h +++ b/lib/silcclient/idlist.h @@ -2,9 +2,9 @@ idlist.h - Author: Pekka Riikonen + Author: Pekka Riikonen - Copyright (C) 1997 - 2000 Pekka Riikonen + Copyright (C) 1997 - 2001 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 @@ -25,62 +25,97 @@ (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 SilcClientEntryStruct { - char *nickname; /* nickname[@server] */ - char *username; /* username[@host] */ - char *server; /* SILC server name */ - unsigned int num; - SilcClientID *id; - - /* Keys, these are defined if private message key has been defined - with the remote client. */ - SilcCipher send_key; - SilcCipher receive_key; -} SilcClientEntryObject; - -typedef SilcClientEntryObject *SilcClientEntry; +typedef struct { + 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 */ + SilcClientID *id; /* The Client ID */ + 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; + int generated; /* TRUE if library generated the key */ + SilcClientKeyAgreement ke; /* Current key agreement context or NULL */ +} *SilcClientEntry; /* Client and its mode on a channel */ -typedef struct { +typedef struct SilcChannelUserStruct { SilcClientEntry client; - unsigned int mode; -} SilcChannelUsers; + uint32 mode; + struct SilcChannelUserStruct *next; +} *SilcChannelUser; + +/* Structure to hold one channel private key. */ +typedef struct { + 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; /* Channel entry context. This is allocate for every channel client has joined to. This includes for example the channel specific keys */ -/* XXX channel_key is the server generated key. Later this context must - include the channel private key. */ typedef struct SilcChannelEntryStruct { char *channel_name; SilcChannelID *id; - unsigned int mode; + uint32 mode; int on_channel; - SilcChannelUsers *clients; - unsigned int clients_count; + /* Joined clients */ + SilcList clients; /* Channel keys */ - SilcCipher channel_key; - unsigned char *key; - unsigned int key_len; - unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; -} SilcChannelEntryObject; - -typedef SilcChannelEntryObject *SilcChannelEntry; - -/* Prototypes */ - + SilcCipher channel_key; /* The channel key */ + unsigned char *key; /* Raw key data */ + uint32 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 */ + SilcChannelPrivateKey curr_key; /* Current private key */ +} *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 { + char *server_name; + char *server_info; + SilcServerID *server_id; +} *SilcServerEntry; + +/* Prototypes. These are used only by the library. Application should not + call these directly. */ + +SilcClientEntry +silc_client_add_client(SilcClient client, SilcClientConnection conn, + char *nickname, char *username, + char *userinfo, SilcClientID *id, uint32 mode); +void silc_client_update_client(SilcClient client, + SilcClientConnection conn, + SilcClientEntry client_entry, + const char *nickname, + const char *username, + const char *userinfo, + uint32 mode); +void silc_client_del_client_entry(SilcClient client, + SilcClientEntry client_entry); SilcClientEntry silc_idlist_get_client(SilcClient client, SilcClientConnection conn, - char *nickname, - char *server, - unsigned int num); -SilcClientEntry silc_idlist_get_client_by_id(SilcClient client, - SilcClientConnection conn, - SilcClientID *client_id, - int query); -SilcChannelEntry silc_idlist_get_channel(SilcClient client, - SilcClientConnection conn, - char *channel); + const char *nickname, + const char *format, + bool query); +SilcChannelEntry silc_idlist_get_channel_by_id(SilcClient client, + SilcClientConnection conn, + SilcChannelID *channel_id, + int query); +void silc_client_nickname_format(SilcClient client, + SilcClientConnection conn, + SilcClientEntry client_entry); #endif