X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fidlist.h;h=c120ff296c6659f349d442e84fc2ca3352df6466;hp=f7d693370b0d4a8c87c02719c3d9045bfc65304b;hb=017dec75a98209fbef49eb496c2269b0c49e736d;hpb=3ef234937ec402fb77006783624375ef61ffa65d diff --git a/lib/silcclient/idlist.h b/lib/silcclient/idlist.h index f7d69337..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,19 +25,21 @@ (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 { +typedef struct { char *nickname; /* nickname */ - char *username; /* username[@host] */ + char *username; /* username */ + char *hostname; /* hostname */ char *server; /* SILC server name */ char *realname; /* Realname (userinfo) */ - unsigned int num; + 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. */ - unsigned int key_len; + uint32 key_len; int generated; /* TRUE if library generated the key */ SilcClientKeyAgreement ke; /* Current key agreement context or NULL */ } *SilcClientEntry; @@ -45,38 +47,75 @@ typedef struct SilcClientEntryStruct { /* Client and its mode on a channel */ typedef struct SilcChannelUserStruct { SilcClientEntry client; - unsigned int mode; + 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; /* Joined clients */ SilcList clients; /* Channel keys */ - SilcCipher channel_key; - unsigned char *key; - unsigned int key_len; - unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; - SilcHmac hmac; + 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; -/* Prototypes (some functions are defined in the silcapi.h) */ +/* 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, - int query); + 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