Merged from silc_1_0_branch.
[silc.git] / apps / silcd / server_internal.h
index 64141a70ce58902254d8848040aa2ba976b519ee..0f4e14b43c4c35ff945f093ceea53413eb749732 100644 (file)
@@ -85,6 +85,8 @@ struct SilcServerStruct {
   unsigned int backup_router  : 1;   /* Set if this is backup router */
   unsigned int backup_primary : 1;   /* Set if we've switched our primary
                                        router to a backup router. */
+  unsigned int backup_noswitch: 1;   /* Set if we've won't switch to 
+                                       become primary (we are backup) */
   unsigned int wait_backup    : 1;   /* Set if we are waiting for backup
                                        router to connect to us. */
   unsigned int server_shutdown: 1;   /* Set when shutting down */
@@ -118,10 +120,6 @@ struct SilcServerStruct {
   SilcHash md5hash;
   SilcHash sha1hash;
 
-  /* HMAC objects for MAC's. */
-  SilcHmac md5hmac;
-  SilcHmac sha1hmac;
-
   /* Configuration object */
   SilcServerConfig config;
   SilcServerConfigRef config_ref;
@@ -154,6 +152,9 @@ typedef struct {
   SilcUInt32 failure;
 } *SilcServerFailureContext;
 
+/* Rekey must be performed at the lastest when this many packets is sent */
+#define SILC_SERVER_REKEY_THRESHOLD 0xfffffe00
+
 /* Macros */
 
 /* Return pointer to the primary router connection */
@@ -179,14 +180,15 @@ do {                                                      \
                         SILC_TASK_PRI_NORMAL);         \
 } while(0)
 
-#define SILC_SET_CONNECTION_FOR_INPUT(s, fd)                   \
-do {                                                           \
-  silc_schedule_set_listen_fd((s), (fd), SILC_TASK_READ);      \
+#define SILC_SET_CONNECTION_FOR_INPUT(s, fd)                           \
+do {                                                                   \
+  silc_schedule_set_listen_fd((s), (fd), SILC_TASK_READ, FALSE);       \
 } while(0)
      
-#define SILC_SET_CONNECTION_FOR_OUTPUT(s, fd)                                \
-do {                                                                         \
-  silc_schedule_set_listen_fd((s), (fd), (SILC_TASK_READ | SILC_TASK_WRITE)); \
+#define SILC_SET_CONNECTION_FOR_OUTPUT(s, fd)                               \
+do {                                                                        \
+  silc_schedule_set_listen_fd((s), (fd), (SILC_TASK_READ | SILC_TASK_WRITE), \
+                             FALSE);                                        \
 } while(0)
 
 #define SILC_OPER_STATS_UPDATE(c, type, mod)   \
@@ -229,6 +231,8 @@ do {                                                \
 
 /* Prototypes */
 SILC_TASK_CALLBACK_GLOBAL(silc_server_rekey_final);
+SILC_TASK_CALLBACK_GLOBAL(silc_server_rekey_callback);
+SILC_TASK_CALLBACK_GLOBAL(silc_server_connect_to_router);
 void silc_server_watcher_list_destroy(void *key, void *context,
                                      void *user_context);