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
SilcClientID *id; /* The Client ID */
unsigned char *fingerprint; /* Fingerprint of client's public key */
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 */
+ 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. */
- SilcUInt32 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 */
char *channel_name;
SilcChannelID *id;
SilcUInt32 mode;
+ SilcUInt16 resolve_cmd_ident;
/* All clients that has joined this channel */
SilcHashTable user_list;
/* Channel keys */
SilcCipher channel_key; /* The channel key */
unsigned char *key; /* Raw key data */
- SilcUInt32 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 */
char *server_name;
char *server_info;
SilcServerID *server_id;
+ SilcUInt16 resolve_cmd_ident;
};
/* Prototypes. These are used only by the library. Application should not
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,