Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
- 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
SilcPKCS pkcs;
SilcPublicKey public_key;
- unsigned short cmd_ident; /* Current command identifier, 0 not used */
long last_receive; /* Time last received data */
long last_sent; /* Time last sent data */
unsigned char registered; /* Boolean whether connection is registered */
not allow any command to be exeucted more than once in about
2 seconds. This is result of normal time().
+ char fast_command
+
+ Counter to check command bursts. By default, up to 5 commands
+ are allowed before limiting the execution. See command flags
+ for more detail.
+
SilcServerEntry router
This is a pointer to the server list. This is the router server whose
cell this client is coming from. This is used to route messages to
this client.
- SilcCipher session_key
-
- The actual session key established by key exchange protcol between
- connecting parties. This is used for both encryption and decryption.
-
- SilcPKCS pkcs
+ SilcList channels
- PKCS of the client. This maybe NULL.
-
- SilcHmac hmac
-
- MAC key used to compute MAC's for packets.
+ List of channels this client has joined.
void *connection
/* Generic data structure. DO NOT add anything before this! */
SilcIDListDataStruct data;
- char *nickname;
+ unsigned char *nickname;
char *username;
char *userinfo;
SilcClientID *id;
int mode;
long last_command;
+ char fast_command;
/* Pointer to the router */
SilcServerEntry router;
Current initial vector. Initial vector is received always along
with the channel packet. By default this is filled with NULL.
+ SilcHmac hmac;
+
+ HMAC of the channel.
+
*/
struct SilcChannelEntryStruct {
char *channel_name;
unsigned char *key;
unsigned int key_len;
unsigned char iv[SILC_CIPHER_MAX_IV_SIZE];
+ SilcHmac hmac;
};
/*
SilcServerID *id, SilcServerEntry router,
void *connection);
SilcServerEntry
-silc_idlist_find_server_by_id(SilcIDList id_list, SilcServerID *id);
+silc_idlist_find_server_by_id(SilcIDList id_list, SilcServerID *id,
+ SilcIDCacheEntry *ret_entry);
+SilcServerEntry
+silc_idlist_find_server_by_name(SilcIDList id_list, char *name,
+ SilcIDCacheEntry *ret_entry);
+SilcServerEntry
+silc_idlist_find_server_by_conn(SilcIDList id_list, char *hostname,
+ int port, SilcIDCacheEntry *ret_entry);
SilcServerEntry
silc_idlist_replace_server_id(SilcIDList id_list, SilcServerID *old_id,
SilcServerID *new_id);
+void silc_idlist_del_server(SilcIDList id_list, SilcServerEntry entry);
SilcClientEntry
-silc_idlist_add_client(SilcIDList id_list, char *nickname, char *username,
- char *userinfo, SilcClientID *id,
+silc_idlist_add_client(SilcIDList id_list, unsigned char *nickname,
+ char *username, char *userinfo, SilcClientID *id,
SilcServerEntry router, void *connection);
-void silc_idlist_del_client(SilcIDList id_list, SilcClientEntry entry);
+int silc_idlist_del_client(SilcIDList id_list, SilcClientEntry entry);
SilcClientEntry *
silc_idlist_get_clients_by_nickname(SilcIDList id_list, char *nickname,
char *server, unsigned int *clients_count);
+SilcClientEntry *
+silc_idlist_get_clients_by_hash(SilcIDList id_list, char *nickname,
+ SilcHash md5hash,
+ unsigned int *clients_count);
SilcClientEntry
silc_idlist_find_client_by_nickname(SilcIDList id_list, char *nickname,
- char *server);
+ char *server,
+ SilcIDCacheEntry *ret_entry);
SilcClientEntry
silc_idlist_find_client_by_hash(SilcIDList id_list, char *nickname,
- SilcHash md5hash);
+ SilcHash md5hash, SilcIDCacheEntry *ret_entry);
SilcClientEntry
-silc_idlist_find_client_by_id(SilcIDList id_list, SilcClientID *id);
+silc_idlist_find_client_by_id(SilcIDList id_list, SilcClientID *id,
+ SilcIDCacheEntry *ret_entry);
SilcClientEntry
silc_idlist_replace_client_id(SilcIDList id_list, SilcClientID *old_id,
SilcClientID *new_id);
+void silc_idlist_client_destructor(SilcIDCache cache,
+ SilcIDCacheEntry entry);
SilcChannelEntry
silc_idlist_add_channel(SilcIDList id_list, char *channel_name, int mode,
SilcChannelID *id, SilcServerEntry router,
- SilcCipher channel_key);
-void silc_idlist_del_channel(SilcIDList id_list, SilcChannelEntry entry);
+ SilcCipher channel_key, SilcHmac hmac);
+int silc_idlist_del_channel(SilcIDList id_list, SilcChannelEntry entry);
+SilcChannelEntry
+silc_idlist_find_channel_by_name(SilcIDList id_list, char *name,
+ SilcIDCacheEntry *ret_entry);
SilcChannelEntry
-silc_idlist_find_channel_by_name(SilcIDList id_list, char *name);
+silc_idlist_find_channel_by_id(SilcIDList id_list, SilcChannelID *id,
+ SilcIDCacheEntry *ret_entry);
SilcChannelEntry
-silc_idlist_find_channel_by_id(SilcIDList id_list, SilcChannelID *id);
+silc_idlist_replace_channel_id(SilcIDList id_list, SilcChannelID *old_id,
+ SilcChannelID *new_id);
#endif