X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_internal.h;h=54582e20e3af80fb0b1143397209fb85c8dc5f63;hp=3dbcd6729439b7193f6bf30bcfeea313d327e759;hb=90e14dc985628e0b0f86e604d511039d302dc956;hpb=598a79d875c80b1f6cbee2ae78198cbff46ab7dc diff --git a/lib/silcclient/client_internal.h b/lib/silcclient/client_internal.h index 3dbcd672..54582e20 100644 --- a/lib/silcclient/client_internal.h +++ b/lib/silcclient/client_internal.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2006 Pekka Riikonen + Copyright (C) 1997 - 2007 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 @@ -28,6 +28,9 @@ #include "client_prvmsg.h" #include "client_channel.h" #include "client_notify.h" +#include "client_keyagr.h" +#include "client_ftp.h" +#include "client_listener.h" /****************************** Definitions *********************************/ @@ -41,47 +44,12 @@ /********************************** Types ***********************************/ -/* 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. */ +/* Public key verification context */ typedef struct { - SilcConnectionAuthRequest callback; - void *context; - SilcTask timeout; -} *SilcClientConnAuthRequest; - -/* 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; - SilcBool pfs; - SilcUInt32 timeout; - void *context; -} *SilcClientRekey; - -/* Internal context for connection process. This is needed as we - doing asynchronous connecting. */ -typedef struct { - SilcClient client; - SilcClientConnection conn; - SilcTask task; - int sock; - char *host; - int port; - void *context; -} SilcClientInternalConnectContext; - -/* Structure to hold away messages set by user. This is mainly created - for future extensions where away messages could be set according filters - such as nickname and hostname. For now only one away message can - be set in one connection. */ -struct SilcClientAwayStruct { - char *away; - struct SilcClientAwayStruct *next; -}; + SilcSKE ske; + SilcSKEVerifyCbCompletion completion; + void *completion_context; +} *SilcVerifyKeyContext; /* Command and command reply context used to hold registered commands in the SILC client. */ @@ -130,26 +98,31 @@ typedef struct SilcClientCommandContextStruct { /* Internal context for the client->internal pointer in the SilcClient. */ struct SilcClientInternalStruct { SilcFSMStruct fsm; /* Client's FSM */ - SilcFSMSemaStruct wait_event; /* Event signaller */ + SilcFSMEventStruct wait_event; /* Event signaller */ SilcClientOperations *ops; /* Client operations */ SilcClientParams *params; /* Client parameters */ SilcPacketEngine packet_engine; /* Packet engine */ SilcMutex lock; /* Client lock */ SilcList commands; /* Registered commands */ + SilcDList ftp_sessions; /* FTP sessions */ char *silc_client_version; /* Version set by application */ + SilcClientRunning running; /* Running/Stopped callback */ + void *running_context; /* Context for runnign callback */ + SilcAtomic32 conns; /* Number of connections in client */ + SilcUInt16 next_session_id; /* Next FTP session ID */ /* Events */ - unsigned int run_callback : 1; /* Call running callback */ + unsigned int stop : 1; /* Stop client */ + unsigned int run_callback : 1; /* Call running/stopped callback */ + unsigned int connection_closed : 1; /* A connection closed */ }; /* Internal context for conn->internal in SilcClientConnection. */ struct SilcClientConnectionInternalStruct { - SilcIDCacheEntry local_entry; /* Local client cache entry */ SilcClientConnectionParams params; /* Connection parameters */ - SilcFSMStruct fsm; /* Connection FSM */ SilcFSMThreadStruct event_thread; /* FSM thread for events */ - SilcFSMSemaStruct wait_event; /* Event signaller */ + SilcFSMEventStruct wait_event; /* Event signaller */ SilcSchedule schedule; /* Connection's scheduler */ SilcMutex lock; /* Connection lock */ SilcSKE ske; /* Key exchange protocol */ @@ -161,31 +134,34 @@ struct SilcClientConnectionInternalStruct { SilcBuffer local_idp; /* Local ID Payload */ SilcBuffer remote_idp; /* Remote ID Payload */ SilcAsyncOperation op; /* Protocols async operation */ + SilcAsyncOperation cop; /* Async operation for application */ + SilcHashTable attrs; /* Configured user attributes */ + SilcStream user_stream; /* Low level stream in connecting */ + char *disconnect_message; /* Disconnection message */ + char *away_message; /* Away message */ SilcIDCache client_cache; /* Client entry cache */ SilcIDCache channel_cache; /* Channel entry cache */ SilcIDCache server_cache; /* Server entry cache */ + SilcUInt32 remote_version; /* Remote SILC protocol version */ SilcAtomic16 cmd_ident; /* Current command identifier */ SilcUInt8 retry_count; /* Packet retry counter */ SilcUInt8 retry_timer; /* Packet retry timer */ + SilcClientConnectionStatus status; /* Connection callback status */ + SilcStatus error; /* Connection callback error */ /* Events */ unsigned int connect : 1; /* Connect remote host */ - unsigned int disconnected : 1; /* Disconnected by remote host */ + unsigned int disconnected : 1; /* Disconnect remote connection */ unsigned int key_exchange : 1; /* Start key exchange */ + unsigned int rekeying : 1; /* Start rekey */ /* Flags */ unsigned int verbose : 1; /* Notify application */ unsigned int registering : 1; /* Set when registering to network */ - - SilcClientAway *away; - SilcClientConnAuthRequest connauth; - SilcDList ftp_sessions; - SilcUInt32 next_session_id; - SilcClientFtpSession active_session; - SilcHashTable attrs; - SilcHashTable privmsg_wait; /* Waited private messages */ + unsigned int rekey_responder : 1; /* Set when rekeying as responder */ + unsigned int auth_request : 1; /* Set when requesting auth method */ }; SILC_FSM_STATE(silc_client_connection_st_run); @@ -193,32 +169,24 @@ SILC_FSM_STATE(silc_client_connection_st_packet); SILC_FSM_STATE(silc_client_connection_st_close); SILC_FSM_STATE(silc_client_error); SILC_FSM_STATE(silc_client_disconnect); +SILC_FSM_STATE(silc_client_st_stop); void silc_client_del_connection(SilcClient client, SilcClientConnection conn); -SilcBool silc_client_del_client(SilcClient client, SilcClientConnection conn, - SilcClientEntry client_entry); -SilcBool silc_client_del_channel(SilcClient client, SilcClientConnection conn, - SilcChannelEntry channel); -SilcBool silc_client_del_server(SilcClient client, SilcClientConnection conn, - SilcServerEntry server); -SilcUInt16 silc_client_command_send_argv(SilcClient client, - SilcClientConnection conn, - SilcCommand command, - SilcClientCommandReply reply, - void *reply_context, - SilcUInt32 argc, - unsigned char **argv, - SilcUInt32 *argv_lens, - SilcUInt32 *argv_types); +void silc_client_fsm_destructor(SilcFSM fsm, void *fsm_context, + void *destructor_context); void silc_client_command_free(SilcClientCommandContext cmd); - -void silc_client_ftp(SilcClient client, SilcClientConnection conn, - SilcPacket packet); -void silc_client_key_agreement(SilcClient client, - SilcClientConnection conn, - SilcPacket packet); -void silc_client_connection_auth_request(SilcClient client, - SilcClientConnection conn, - SilcPacket packet); - -#endif +SilcClientConnection +silc_client_add_connection(SilcClient client, + SilcConnectionType conn_type, + SilcBool connect, + SilcClientConnectionParams *params, + SilcPublicKey public_key, + SilcPrivateKey private_key, + char *remote_host, int port, + SilcClientConnectCallback callback, + void *context); +SilcBuffer silc_client_attributes_process(SilcClient client, + SilcClientConnection conn, + SilcDList attrs); + +#endif /* CLIENT_INTERNAL_H */