updates.
[silc.git] / apps / silcd / server_internal.h
index e0c037e8f6a7c2267f18b4900a77f8c49f00c6f4..1de43890672c3e09ca8816ec55be816bf78fdc84 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
 
-  Copyright (C) 1997 - 2000 Pekka Riikonen
+  Copyright (C) 1997 - 2001 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
 
 /* Server statistics structure. This holds various statistics about
    various things. */
-/* XXX TODO */
 typedef struct {
-
+  /* Local stats (server and router) */
+  uint32 my_clients;             /* Locally connected clients */
+  uint32 my_servers;             /* Locally connected servers */
+  uint32 my_routers;             /* Locally connected routers */
+  uint32 my_channels;            /* Locally created channels */
+  uint32 my_chanclients;         /* Local clients on local channels */
+  uint32 my_aways;               /* Local clients away (XXX) */
+  uint32 my_server_ops;                  /* Local server operators */
+  uint32 my_router_ops;                  /* Local router operators */
+
+  /* Global stats (mainly for router) */
+  uint32 cell_clients;           /* All clients in cell */
+  uint32 cell_servers;           /* All servers in cell */
+  uint32 cell_channels;                  /* All channels in cell */
+  uint32 cell_chanclients;       /* All clients on cell's channels */
+  uint32 clients;                /* All clients */
+  uint32 servers;                /* All servers */
+  uint32 routers;                /* All routers */
+  uint32 channels;               /* All channels */
+  uint32 chanclients;            /* All clients on channels */
+  uint32 server_ops;             /* All server operators */
+  uint32 router_ops;             /* All router operators */
+
+  /* General */
+  uint32 conn_attempts;                  /* Connection attempts */
+  uint32 conn_failures;                  /* Connection failure */
+  uint32 auth_attempts;                  /* Authentication attempts */
+  uint32 auth_failures;                  /* Authentication failures */
+  uint32 packets_sent;           /* Sent packets */
+  uint32 packets_received;       /* Received packets */
 } SilcServerStatistics;
 
+typedef struct {
+  SilcSocketConnection sock;
+
+  /* Remote host name and port */
+  char *remote_host;
+  int remote_port;
+  
+  /* Current connection retry info */
+  uint32 retry_count;
+  uint32 retry_timeout;
+
+  /* Back pointer to server */
+  SilcServer server;
+} *SilcServerConnection;
+
 /* 
    SILC Server Object.
 
 */
-typedef struct SilcServerObjectStruct {
+struct SilcServerStruct {
   char *server_name;
   int server_type;
   int sock;
   int standalone;
   int listenning;
   SilcServerID *id;
+  unsigned char *id_string;
+  uint32 id_string_len;
   SilcIdType id_type;
+
+  /* Current command identifier, 0 not used */
+  uint16 cmd_ident;
+
+  /* Server's own ID entry. */
   SilcServerEntry id_entry;
 
+  /* Back pointer to the primary router of this server. */
+  SilcServerEntry router;
+
   /* SILC server task queues */
   SilcTaskQueue io_queue;
   SilcTaskQueue timeout_queue;
@@ -73,19 +126,46 @@ typedef struct SilcServerObjectStruct {
   SilcHmac sha1hmac;
 
   /* Configuration object */
-  SilcConfigServer config;
+  SilcServerConfig config;
 
   /* Random pool */
   SilcRng rng;
 
   /* Server statistics */
-  SilcServerStatistics stats;
+  SilcServerStatistics stat;
+
+  /* Pending command queue */
+  SilcDList pending_commands;
+
+  /* Default parameteres for server */
+  SilcServerParams params;
 
 #ifdef SILC_SIM
   /* SIM (SILC Module) list */
   SilcDList sim;
 #endif
-} SilcServerObject;
+};
+
+/* Server's heartbeat context */
+typedef struct {
+  SilcServer server;
+} *SilcServerHBContext;
+
+/* Failure context. This is allocated when failure packet is received.
+   Failure packets are processed with timeout and data is saved in this
+   structure. */
+typedef struct {
+  SilcServer server;
+  SilcSocketConnection sock;
+  uint32 failure;
+} *SilcServerFailureContext;
+
+/* Session key's re-key context. */
+typedef struct {
+  SilcServer server;
+  SilcSocketConnection sock;
+  uint32 timeout;
+} *SilcServerRekeyContext;
 
 /* Macros */
 
@@ -114,5 +194,6 @@ do {                                                                        \
 } while(0)
 
 /* Prototypes */
+SILC_TASK_CALLBACK_GLOBAL(silc_server_rekey_final);
 
 #endif