X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_internal.h;h=ebbeadab6be30a6f35f6343e6f70271247206f03;hb=c257b555225193e54d85daf541d29578b3c93882;hp=64141a70ce58902254d8848040aa2ba976b519ee;hpb=f88b3f268a6f1e8f4adb1c2bd742a6ee41612241;p=silc.git diff --git a/apps/silcd/server_internal.h b/apps/silcd/server_internal.h index 64141a70..ebbeadab 100644 --- a/apps/silcd/server_internal.h +++ b/apps/silcd/server_internal.h @@ -4,13 +4,13 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2002 Pekka Riikonen + Copyright (C) 1997 - 2003 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 the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -61,6 +61,7 @@ typedef struct { SilcUInt32 auth_failures; /* Authentication failures */ SilcUInt32 packets_sent; /* Sent SILC packets */ SilcUInt32 packets_received; /* Received SILC packets */ + SilcUInt32 conn_num; /* Number of connections */ } SilcServerStatistics; /* @@ -85,9 +86,15 @@ 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 backup_closed : 1; /* Set if backup closed connection. + Do not allow resuming in this case. */ 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 */ + unsigned int no_reconnect : 1; /* If set, server won't reconnect to + router after disconnection. */ SilcServerEntry router; /* Pointer to the primary router */ unsigned long router_connect; /* Time when router was connected */ @@ -105,6 +112,7 @@ struct SilcServerStruct { SilcIDList local_list; SilcIDList global_list; SilcHashTable watcher_list; + SilcHashTable watcher_list_pk; /* Table of connected sockets */ SilcSocketConnection *sockets; @@ -118,10 +126,6 @@ struct SilcServerStruct { SilcHash md5hash; SilcHash sha1hash; - /* HMAC objects for MAC's. */ - SilcHmac md5hmac; - SilcHmac sha1hmac; - /* Configuration object */ SilcServerConfig config; SilcServerConfigRef config_ref; @@ -144,6 +148,9 @@ struct SilcServerStruct { /* SIM (SILC Module) list */ SilcDList sim; #endif + + /* Hash table for public keys of all clients */ + SilcHashTable pk_hash; }; /* Failure context. This is allocated when failure packet is received. @@ -154,6 +161,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 */ @@ -161,14 +171,14 @@ typedef struct { (!server->standalone && server->router ? server->router->connection : NULL) /* Return TRUE if a packet must be broadcasted (router broadcasts) */ -#define SILC_BROADCAST(server) (server->server_type == SILC_ROUTER) +#define SILC_BROADCAST(server) (server->server_type == SILC_ROUTER) /* Return TRUE if entry is locally connected or local to us */ #define SILC_IS_LOCAL(entry) \ (((SilcIDListData)entry)->status & SILC_IDLIST_STATUS_LOCAL) /* Registers generic task for file descriptor for reading from network and - writing to network. As being generic task the actual task is allocated + writing to network. As being generic task the actual task is allocated only once and after that the same task applies to all registered fd's. */ #define SILC_REGISTER_CONNECTION_FOR_IO(fd) \ do { \ @@ -179,14 +189,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 +240,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);