updates.
[silc.git] / lib / silcclient / idlist.h
index 815d039240fb9ade0d72570cc54034ec51acb069..0dc48f8f316e19e90c329bcd8c139dcb86506268 100644 (file)
@@ -2,9 +2,9 @@
 
   idlist.h
 
-  Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
+  Author: Pekka Riikonen <priikone@silcnet.org>
 
-  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
    they are used. */
 typedef struct {
   char *nickname;              /* nickname */
-  char *username;              /* username[@host] */
+  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 */
+  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;
-  int generated;               /* TRUE if library generated the key */
+  bool generated;              /* TRUE if library generated the key */
   SilcClientKeyAgreement ke;   /* Current key agreement context or NULL */
 } *SilcClientEntry;
 
@@ -77,6 +79,13 @@ typedef struct SilcChannelEntryStruct {
   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;
 } *SilcChannelEntry;
 
 /* Server entry context. This represents one server. When server information
@@ -91,17 +100,30 @@ typedef struct {
 /* 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,
-                                      uint32 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