Backup router related fixes.
[silc.git] / apps / silcd / server_internal.h
index d35c5d8a09f3e60530ec30121c5d39d9c9eb3aae..56a4a52ae20e83a0207349c5fb29e06923d06807 100644 (file)
@@ -2,9 +2,9 @@
 
   server_internal.h
 
-  Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
+  Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2001 Pekka Riikonen
+  Copyright (C) 1997 - 2002 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
@@ -56,7 +56,7 @@ typedef struct {
   SilcUInt32 packets_received;   /* Received packets */
 } SilcServerStatistics;
 
-/* 
+/*
    SILC Server Object.
 
 */
@@ -69,10 +69,12 @@ struct SilcServerStruct {
   SilcUInt32 id_string_len;
   SilcIdType id_type;
 
+  SilcUInt32 starttime;
   bool standalone;                  /* TRUE if server is standalone, and
                                        does not have connection to network. */
   bool listenning;                  /* TRUE if server is listenning for
                                        incoming connections. */
+  bool background;
   SilcServerEntry id_entry;         /* Server's own ID entry */
   SilcServerEntry router;           /* Pointer to the primary router */
   unsigned long router_connect;             /* Time when router was connected */
@@ -80,8 +82,8 @@ struct SilcServerStruct {
   bool backup_router;               /* TRUE if this is backup router */
   bool backup_primary;              /* TRUE if we've switched our primary
                                        router to a backup router. */
-  SilcServerConnection router_conn; /* non-NULL when connecting to the
-                                      primary router, and NULL otherwise. */
+  SilcServerConnection router_conn;  /* non-NULL when connecting to the
+                                       primary router, and NULL otherwise. */
 
   /* Current command identifier, 0 not used */
   SilcUInt16 cmd_ident;
@@ -92,6 +94,7 @@ struct SilcServerStruct {
   /* ID lists. */
   SilcIDList local_list;
   SilcIDList global_list;
+  SilcHashTable watcher_list;
 
   /* Table of connected sockets */
   SilcSocketConnection *sockets;
@@ -111,6 +114,8 @@ struct SilcServerStruct {
 
   /* Configuration object */
   SilcServerConfig config;
+  SilcServerConfigRef config_ref;
+  char *config_file;
 
   /* Random pool */
   SilcRng rng;
@@ -175,15 +180,36 @@ do {                                              \
   }                                            \
 } while(0)
 
+#define SILC_UMODE_STATS_UPDATE(oper, mod)     \
+do {                                           \
+    if (client->mode & (mod)) {                        \
+      if (!(mode & (mod))) {                   \
+       if (client->connection)                 \
+         server->stat.my_ ## oper ## _ops--;   \
+        if (server->server_type == SILC_ROUTER)        \
+         server->stat. oper ## _ops--;         \
+      }                                                \
+    } else {                                   \
+      if (mode & (mod)) {                      \
+       if (client->connection)                 \
+         server->stat.my_ ## oper ## _ops++;   \
+        if (server->server_type == SILC_ROUTER)        \
+         server->stat. oper ## _ops++;         \
+      }                                                \
+    }                                          \
+} while(0)
+
 #define SILC_GET_SKE_FLAGS(x, p)                       \
   if ((x)) {                                           \
     if ((x)->param && (x)->param->key_exchange_pfs)    \
       (p)->flags |= SILC_SKE_SP_FLAG_PFS;              \
-    if (!(x)->publickey                              \
+    if (!(x)->publickeys)                              \
       (p)->flags |= SILC_SKE_SP_FLAG_MUTUAL;           \
   }
 
 /* Prototypes */
 SILC_TASK_CALLBACK_GLOBAL(silc_server_rekey_final);
+void silc_server_watcher_list_destroy(void *key, void *context,
+                                     void *user_context);
 
 #endif