X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient.h;fp=lib%2Fsilcclient%2Fclient.h;h=0fc86888d79db4e36a85196b5f37c1e58ce6401f;hb=75a2d69f7d56b8298e80f9a4546f22ddf138be39;hp=6b9965bee0b4deabb41cdf0c683466be927428d6;hpb=a922fcd3dda4924c6aa4f1ad0d3a38ae0064c635;p=silc.git diff --git a/lib/silcclient/client.h b/lib/silcclient/client.h index 6b9965be..0fc86888 100644 --- a/lib/silcclient/client.h +++ b/lib/silcclient/client.h @@ -21,159 +21,22 @@ #define CLIENT_H /* Forward declarations */ +typedef struct SilcClientStruct *SilcClient; +typedef struct SilcClientConnectionStruct *SilcClientConnection; +typedef struct SilcClientPingStruct SilcClientPing; +typedef struct SilcClientAwayStruct SilcClientAway; +typedef struct SilcClientKeyAgreementStruct *SilcClientKeyAgreement; +typedef struct SilcClientFtpSessionStruct *SilcClientFtpSession; +typedef struct SilcClientEntryStruct *SilcClientEntry; +typedef struct SilcChannelEntryStruct *SilcChannelEntry; +typedef struct SilcServerEntryStruct *SilcServerEntry; +typedef struct SilcClientCommandStruct *SilcClientCommand; +typedef struct SilcClientCommandContextStruct *SilcClientCommandContext; +typedef struct SilcClientCommandReplyContextStruct + *SilcClientCommandReplyContext; +typedef struct SilcChannelUserStruct *SilcChannelUser; typedef struct SilcClientInternalStruct *SilcClientInternal; - -/* Generic rekey context for connections */ -typedef struct { - /* Current sending encryption key, provided for re-key. The `pfs' - is TRUE if the Perfect Forward Secrecy is performed in re-key. */ - unsigned char *send_enc_key; - SilcUInt32 enc_key_len; - int ske_group; - bool pfs; - SilcUInt32 timeout; - void *context; -} *SilcClientRekey; - -/* Context to hold the connection authentication request callbacks that - will be called when the server has replied back to our request about - current authentication method in the session. */ -typedef struct { - SilcConnectionAuthRequest callback; - void *context; - SilcTask timeout; -} *SilcClientConnAuthRequest; - -/* Connection structure used in client to associate all the important - connection specific data to this structure. */ -struct SilcClientConnectionStruct { - /* - * Local data - */ - char *nickname; - - /* Local client ID for this connection */ - SilcClientID *local_id; - - /* Decoded local ID so that the above defined ID would not have - to be decoded for every packet. */ - unsigned char *local_id_data; - SilcUInt32 local_id_data_len; - - /* Own client entry. */ - SilcClientEntry local_entry; - - /* - * Remote data - */ - char *remote_host; - int remote_port; - int remote_type; - char *remote_info; - - /* Remote server ID for this connection */ - SilcServerID *remote_id; - - /* Decoded remote ID so that the above defined ID would not have - to be decoded for every packet. */ - unsigned char *remote_id_data; - SilcUInt32 remote_id_data_len; - - /* - * Common data - */ - /* Keys and stuff negotiated in the SKE protocol */ - SilcCipher send_key; - SilcCipher receive_key; - SilcHmac hmac_send; - SilcHmac hmac_receive; - SilcHash hash; - SilcUInt32 psn_send; - SilcUInt32 psn_receive; - - /* Client ID and Channel ID cache. Messages transmitted in SILC network - are done using different unique ID's. These are the cache for - thoses ID's used in the communication. */ - SilcIDCache client_cache; - SilcIDCache channel_cache; - SilcIDCache server_cache; - - /* Current channel on window. All channels are saved (allocated) into - the cache entries. */ - SilcChannelEntry current_channel; - - /* Socket connection object for this connection (window). This - object will have a back-pointer to this window object for fast - referencing (sock->user_data). */ - SilcSocketConnection sock; - - /* Pending command queue for this connection */ - SilcDList pending_commands; - - /* Current command identifier, 0 not used */ - SilcUInt16 cmd_ident; - - /* Requested pings. */ - SilcClientPing *ping; - SilcUInt32 ping_count; - - /* Set away message */ - SilcClientAway *away; - - /* Re-key context */ - SilcClientRekey rekey; - - /* Authentication request context. */ - SilcClientConnAuthRequest connauth; - - /* File transmission sessions */ - SilcDList ftp_sessions; - SilcUInt32 next_session_id; - SilcClientFtpSession active_session; - - /* Requested Attributes */ - SilcHashTable attrs; - - /* Pointer back to the SilcClient. This object is passed to the application - and the actual client object is accesible through this pointer. */ - SilcClient client; - - /* Connection parameters */ - SilcClientConnectionParams params; - - /* User data context. Library does not touch this. */ - void *context; -}; - -/* Main client structure. */ -struct SilcClientStruct { - char *username; /* Username, must be set by application */ - char *nickname; /* Nickname, may be set by application */ - char *hostname; /* hostname, must be set by application */ - char *realname; /* Real name, must be set be application */ - - SilcPublicKey public_key; /* Public key of user, set by application */ - SilcPrivateKey private_key; /* Private key of user, set by application */ - SilcPKCS pkcs; /* PKCS allocated by application */ - - SilcSchedule schedule; /* Scheduler, automatically allocated by - the client library. */ - - /* Random Number Generator. Application should use this as its primary - random number generator. */ - SilcRng rng; - - /* Application specific user data pointer. Client library does not - touch this. This the context sent as argument to silc_client_alloc. */ - void *application; - - /* Generic hash context for application usage */ - SilcHash md5hash; - SilcHash sha1hash; - - /* Internal data for client library. Application cannot access this - data at all. */ - SilcClientInternal internal; -}; - +typedef struct SilcClientConnectionInternalStruct + *SilcClientConnectionInternal; + #endif