Call the connection callback in disconnection always as the last
[silc.git] / lib / silcclient / client_internal.h
index d3437edfc061c6cfd638c59688c2c8d7bd709ac3..91243d8f0564da73ad522eedad4bfbbcf41647a4 100644 (file)
@@ -4,7 +4,7 @@
 
   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
@@ -49,39 +49,6 @@ typedef struct {
   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
@@ -138,16 +105,18 @@ 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 */
   SilcAtomic16 conns;                   /* Number of connections in client */
+  SilcUInt16 next_session_id;           /* Next FTP session ID */
 
   /* Events */
   unsigned int stop              : 1;   /* Stop client */
@@ -157,12 +126,10 @@ struct SilcClientInternalStruct {
 
 /* 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 */
@@ -175,6 +142,8 @@ struct SilcClientConnectionInternalStruct {
   SilcBuffer remote_idp;                /* Remote ID Payload */
   SilcAsyncOperation op;                /* Protocols async operation */
   SilcAsyncOperation cop;               /* Async operation for application */
+  SilcHashTable attrs;                  /* Configured user attributes */
+  char *disconnect_message;             /* Disconnection message */
 
   SilcIDCache client_cache;             /* Client entry cache */
   SilcIDCache channel_cache;            /* Channel entry cache */
@@ -183,10 +152,12 @@ struct SilcClientConnectionInternalStruct {
   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 */
 
@@ -194,15 +165,10 @@ struct SilcClientConnectionInternalStruct {
   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 */
-  unsigned int aborted            : 1;  /* Set when aborted by application */
+  unsigned int auth_request       : 1;   /* Set when requesting auth method */
 
   SilcClientAway *away;
-  SilcClientConnAuthRequest connauth;
-  SilcDList ftp_sessions;
-  SilcUInt32 next_session_id;
   SilcClientFtpSession active_session;
-  SilcHashTable attrs;
   SilcHashTable privmsg_wait;           /* Waited private messages */
 };