Added Requested Attributes sending and receiving support to
[silc.git] / lib / silcclient / idlist.h
index 636af24c750cc13c32ce06d7257655b1a00a6938..f6357b49900c5fe58804d4346c9941d8edcef40e 100644 (file)
@@ -24,7 +24,7 @@
 typedef enum {
   SILC_CLIENT_STATUS_NONE       = 0x0000,
   SILC_CLIENT_STATUS_RESOLVING  = 0x0001,
-} SilcClientStatus;
+} SilcEntryStatus;
 
 /* Client entry context. When client receives information about new client
    (it receives its ID, for example, by IDENTIFY request) we create new
@@ -36,45 +36,39 @@ struct SilcClientEntryStruct {
   char *hostname;              /* hostname */
   char *server;                        /* SILC server name */
   char *realname;              /* Realname (userinfo) */
-  uint32 num;
-  uint32 mode;                 /* User mode in SILC */
+  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 */
-  bool valid;                  /* FALSE if this entry is not valid */
+  SilcUInt32 fingerprint_len;  /* Length of the fingerprint */
   SilcCipher send_key;         /* Private message key for sending */
   SilcCipher receive_key;      /* Private message key for receiving */
+  SilcClientKeyAgreement ke;   /* Current key agreement context or NULL */
+  SilcDList attrs;             /* Requested Attributes (maybe NULL) */
+  SilcEntryStatus status;      /* Status mask */
+  SilcHashTable channels;      /* All channels client has joined */
   unsigned char *key;          /* Set only if appliation provided the
                                   key material. NULL if the library 
                                   generated the key. */
-  uint32 key_len;
-  bool generated;              /* TRUE if library generated the key */
-  SilcClientKeyAgreement ke;   /* Current key agreement context or NULL */
-  SilcClientStatus status;     /* Status mask */
-  SilcHashTable channels;      /* All channels client has joined */
+  SilcUInt32 key_len;          /* Key length */
+  SilcUInt16 resolve_cmd_ident;        /* Command identifier when resolving */
+  bool generated;              /* TRUE if library generated `key' */
+  bool valid;                  /* FALSE if this entry is not valid */
 };
 
 /* Client and its mode on a channel */
 struct SilcChannelUserStruct {
   SilcClientEntry client;
-  uint32 mode;
+  SilcUInt32 mode;
   SilcChannelEntry channel;
 };
 
-/* Structure to hold one channel private key. */
-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 */
-};
-
 /* Channel entry context. This is allocate for every channel client has
    joined to. This includes for example the channel specific keys */
 struct SilcChannelEntryStruct {
   char *channel_name;
   SilcChannelID *id;
-  uint32 mode;
+  SilcUInt32 mode;
+  SilcUInt16 resolve_cmd_ident;
 
   /* All clients that has joined this channel */
   SilcHashTable user_list;
@@ -82,7 +76,7 @@ struct SilcChannelEntryStruct {
   /* Channel keys */
   SilcCipher channel_key;                    /* The channel key */
   unsigned char *key;                       /* Raw key data */
-  uint32 key_len;
+  SilcUInt32 key_len;                       /* Raw key data length */
   unsigned char iv[SILC_CIPHER_MAX_IV_SIZE]; /* Current IV */
   SilcHmac hmac;                            /* Current HMAC */
   SilcDList private_keys;                   /* List of private keys or NULL */
@@ -103,6 +97,7 @@ struct SilcServerEntryStruct {
   char *server_name;
   char *server_info;
   SilcServerID *server_id;
+  SilcUInt16 resolve_cmd_ident;
 };
 
 /* Prototypes. These are used only by the library. Application should not
@@ -111,14 +106,14 @@ struct SilcServerEntryStruct {
 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);
@@ -130,8 +125,18 @@ SilcClientEntry silc_idlist_get_client(SilcClient client,
 SilcChannelEntry silc_client_add_channel(SilcClient client,
                                         SilcClientConnection conn,
                                         const char *channel_name,
-                                        uint32 mode, 
+                                        SilcUInt32 mode, 
                                         SilcChannelID *channel_id);
+SilcServerEntry silc_client_add_server(SilcClient client,
+                                      SilcClientConnection conn,
+                                      const char *server_name,
+                                      const char *server_info,
+                                      SilcServerID *server_id);
+void silc_client_update_server(SilcClient client,
+                              SilcClientConnection conn,
+                              SilcServerEntry server_entry,
+                              const char *server_name,
+                              const char *server_info);
 bool silc_client_replace_channel_id(SilcClient client,
                                    SilcClientConnection conn,
                                    SilcChannelEntry channel,