Author: Pekka Riikonen <priikone@silcnet.org>
- 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
#include "client_channel.h"
#include "client_notify.h"
#include "client_keyagr.h"
+#include "client_ftp.h"
+#include "client_listener.h"
/****************************** Definitions *********************************/
SilcSKE ske;
SilcSKEVerifyCbCompletion completion;
void *completion_context;
-} *VerifyKeyContext;
-
-/* 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;
-
-/* 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;
-};
+} *SilcVerifyKeyContext;
/* Command and command reply context used to hold registered commands
in the SILC client. */
/* 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 */
SilcAtomic16 conns; /* Number of connections in client */
+ SilcUInt16 next_session_id; /* Next FTP session ID */
/* Events */
unsigned int stop : 1; /* Stop client */
/* 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 */
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 verbose : 1; /* Notify application */
unsigned int registering : 1; /* Set when registering to network */
unsigned int rekey_responder : 1; /* Set when rekeying as responder */
- unsigned int callback_called : 1; /* Set when connect callback called */
-
- SilcClientAway *away;
- SilcClientConnAuthRequest connauth;
- SilcDList ftp_sessions;
- SilcUInt32 next_session_id;
- SilcClientFtpSession active_session;
- SilcHashTable attrs;
- SilcHashTable privmsg_wait; /* Waited private messages */
+ unsigned int auth_request : 1; /* Set when requesting auth method */
};
SILC_FSM_STATE(silc_client_connection_st_run);
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_command_free(SilcClientCommandContext cmd);
void silc_client_fsm_destructor(SilcFSM fsm, void *fsm_context,
void *destructor_context);
-
-void silc_client_ftp(SilcClient client, SilcClientConnection conn,
- SilcPacket packet);
-void silc_client_connection_auth_request(SilcClient client,
- SilcClientConnection conn,
- SilcPacket packet);
-
-#endif
+void silc_client_command_free(SilcClientCommandContext cmd);
+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 */