Integer type name change.
[silc.git] / lib / silcclient / idlist.h
index 26b38e010e3311aa9b76ccc6b4da4b031d4d2bf2..ef48ed54fbdbacf53af102c48af8a412c6b83c5a 100644 (file)
@@ -1,16 +1,15 @@
 /*
 
-  idlist.h
+  idlist.h 
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  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,59 +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 */
-  uint32 fingerprint_len;      /* Length of the fingerprint */
+  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 */
@@ -94,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. */
@@ -111,14 +111,14 @@ 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);
@@ -127,10 +127,15 @@ SilcClientEntry silc_idlist_get_client(SilcClient client,
                                       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);