SilcUInt32 detached; /* All clients detached */
SilcUInt32 server_ops; /* All server operators */
SilcUInt32 router_ops; /* All router operators */
+ /* More to add
+ SilcUInt32 secret_channels;
+ SilcUInt32 private_channels;
+ */
/* General */
SilcUInt32 conn_attempts; /* Connection attempts */
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 */
SilcServerEntry router; /* Pointer to the primary router */
unsigned long router_connect; /* Time when router was connected */
SilcHash md5hash;
SilcHash sha1hash;
- /* HMAC objects for MAC's. */
- SilcHmac md5hmac;
- SilcHmac sha1hmac;
-
/* Configuration object */
SilcServerConfig config;
SilcServerConfigRef config_ref;
#endif
};
-/* 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;
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 */
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) \
/* Prototypes */
SILC_TASK_CALLBACK_GLOBAL(silc_server_rekey_final);
+SILC_TASK_CALLBACK_GLOBAL(silc_server_rekey_callback);
void silc_server_watcher_list_destroy(void *key, void *context,
void *user_context);