#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;
-
- /* 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;
-
- /* Internal data for client library. Application cannot access this
- data at all. */
- SilcClientInternal internal;
-};
-
+typedef struct SilcClientConnectionInternalStruct
+ *SilcClientConnectionInternal;
+
#endif