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
SilcUInt32 my_servers; /* Locally connected servers */
SilcUInt32 my_routers; /* Locally connected routers */
SilcUInt32 my_channels; /* Locally created channels */
- SilcUInt32 my_chanclients; /* Local clients on local channels */
- SilcUInt32 my_aways; /* Local clients away (XXX) */
+ SilcUInt32 my_chanclients; /* Local clients on local channels */
+ SilcUInt32 my_aways; /* Local clients away (gone) */
+ SilcUInt32 my_detached; /* Local clients detached */
SilcUInt32 my_server_ops; /* Local server operators */
SilcUInt32 my_router_ops; /* Local router operators */
SilcUInt32 cell_clients; /* All clients in cell */
SilcUInt32 cell_servers; /* All servers in cell */
SilcUInt32 cell_channels; /* All channels in cell */
- SilcUInt32 cell_chanclients; /* All clients on cell's channels */
- SilcUInt32 clients; /* All clients */
- SilcUInt32 servers; /* All servers */
- SilcUInt32 routers; /* All routers */
- SilcUInt32 channels; /* All channels */
+ SilcUInt32 cell_chanclients; /* All clients on cell's channels */
+ SilcUInt32 clients; /* All clients */
+ SilcUInt32 servers; /* All servers */
+ SilcUInt32 routers; /* All routers */
+ SilcUInt32 channels; /* All channels */
SilcUInt32 chanclients; /* All clients on channels */
+ SilcUInt32 aways; /* All clients away (gone) */
+ SilcUInt32 detached; /* All clients detached */
SilcUInt32 server_ops; /* All server operators */
SilcUInt32 router_ops; /* All router operators */
SilcUInt32 auth_attempts; /* Authentication attempts */
SilcUInt32 auth_failures; /* Authentication failures */
SilcUInt32 packets_sent; /* Sent packets */
- SilcUInt32 packets_received; /* Received packets */
+ SilcUInt32 packets_received; /* Received packets */
} SilcServerStatistics;
-/*
+/*
SILC Server Object.
*/
struct SilcServerStruct {
char *server_name;
- int server_type;
int sock;
+ SilcServerEntry id_entry;
SilcServerID *id;
unsigned char *id_string;
SilcUInt32 id_string_len;
- SilcIdType id_type;
+ SilcUInt32 starttime;
- bool standalone; /* TRUE if server is standalone, and
+ unsigned int server_type : 2; /* Server type (server.h) */
+ unsigned int standalone : 1; /* Set if server is standalone, and
does not have connection to network. */
- bool listenning; /* TRUE if server is listenning for
+ unsigned int listenning : 1; /* Set if server is listenning for
incoming connections. */
- SilcServerEntry id_entry; /* Server's own ID entry */
+ unsigned int background : 1; /* Set when server is on background */
+ 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. */
+
SilcServerEntry router; /* Pointer to the primary router */
unsigned long router_connect; /* Time when router was connected */
+ SilcServerConnection router_conn; /* non-NULL when connecting to the
+ primary router, and NULL otherwise. */
SilcServerBackup backup; /* Backup routers */
- 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. */
/* Current command identifier, 0 not used */
SilcUInt16 cmd_ident;
/* ID lists. */
SilcIDList local_list;
SilcIDList global_list;
+ SilcHashTable watcher_list;
/* Table of connected sockets */
SilcSocketConnection *sockets;
/* Configuration object */
SilcServerConfig config;
+ SilcServerConfigRef config_ref;
+ char *config_file;
/* Random pool */
SilcRng rng;
/* Pending command queue */
SilcDList pending_commands;
+ /* Purge context for disconnected clients */
+ SilcIDListPurge purge_i;
+ SilcIDListPurge purge_g;
+
#ifdef SILC_SIM
/* SIM (SILC Module) list */
SilcDList sim;
server->stat.my_ ## type ## _ops--; \
if (server->server_type == SILC_ROUTER) \
server->stat. type ## _ops--; \
+ (c)->mode &= ~(mod); \
} \
} 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