Author: Pekka Riikonen <priikone@silcnet.org>
- 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
STAT_OUTPUT(" Authentication failures : %d", silcd->stat.auth_failures);
STAT_OUTPUT(" Packets sent : %d", silcd->stat.packets_sent);
STAT_OUTPUT(" Packets received : %d", silcd->stat.packets_received);
+ STAT_OUTPUT(" Connections : %d", silcd->stat.conn_num);
#undef STAT_OUTPUT
#ifdef SILC_DEBUG
+ /* Dump internal flags */
+ fprintf(fdd, "\nDumping internal flags\n");
+ fprintf(fdd, " server_type : %d\n", silcd->server_type);
+ fprintf(fdd, " standalone : %d\n", silcd->standalone);
+ fprintf(fdd, " listenning : %d\n", silcd->listenning);
+ fprintf(fdd, " background : %d\n", silcd->background);
+ fprintf(fdd, " backup_router : %d\n", silcd->backup_router);
+ fprintf(fdd, " backup_primary : %d\n", silcd->backup_primary);
+ fprintf(fdd, " backup_noswitch : %d\n", silcd->backup_noswitch);
+ fprintf(fdd, " backup_closed : %d\n", silcd->backup_closed);
+ fprintf(fdd, " wait_backup : %d\n", silcd->wait_backup);
+ if (silcd->router)
+ fprintf(fdd, " primary router : %s\n",
+ silcd->router->server_name ? silcd->router->server_name : "");
+
+ /* Dump socket connections */
+ {
+ int i;
+ SilcSocketConnection s;
+
+ fprintf(fdd, "\nDumping socket connections\n");
+ for (i = 0; i < silcd->config->param.connections_max; i++) {
+ s = silcd->sockets[i];
+ if (!s)
+ continue;
+ fprintf(fdd, " %d: host %s ip %s port %d type %d flags 0x%x\n",
+ s->sock, s->hostname ? s->hostname : "N/A",
+ s->ip ? s->ip : "N/A", s->port, s->type,
+ (unsigned int)s->flags);
+ }
+ }
+
/* Dump lists */
{
SilcIDCacheList list = NULL;
int c;
fprintf(fdd, "\nDumping databases\n");
-
+
if (silc_idcache_get_all(silcd->local_list->servers, &list)) {
if (silc_idcache_list_first(list, &id_cache)) {
fprintf(fdd, "\nServers in local-list:\n");
c = 1;
while (id_cache) {
client_entry = (SilcClientEntry)id_cache->context;
- fprintf(fdd, " %d: name %s id %s status 0x%x\n", c,
+ server_entry = client_entry->router;
+ fprintf(fdd, " %d: name %s id %s status 0x%x from %s\n", c,
client_entry->nickname ? client_entry->nickname :
(unsigned char *)"N/A", client_entry->id ?
silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
- client_entry->data.status);
+ client_entry->data.status, server_entry ?
+ server_entry->server_name ? server_entry->server_name :
+ "N/A" : "local");
if (!silc_idcache_list_next(list, &id_cache))
break;
c++;
c = 1;
while (id_cache) {
client_entry = (SilcClientEntry)id_cache->context;
- fprintf(fdd, " %d: name %s id %s status 0x%x\n", c,
+ server_entry = client_entry->router;
+ fprintf(fdd, " %d: name %s id %s status 0x%x from %s\n", c,
client_entry->nickname ? client_entry->nickname :
(unsigned char *)"N/A", client_entry->id ?
silc_id_render(client_entry->id, SILC_ID_CLIENT) : "N/A",
- client_entry->data.status);
+ client_entry->data.status, server_entry ?
+ server_entry->server_name ? server_entry->server_name :
+ "N/A" : "local");
if (!silc_idcache_list_next(list, &id_cache))
break;
c++;
fclose(fdd);
}
+#ifdef SILC_DEBUG
+
typedef struct {
int level;
const char *string;
break;
}
}
+#endif /* SILC_DEBUG */
/* This function should not be called directly but through the appropriate
wrapper macro defined in server.h */
printf("SILCd Secure Internet Live Conferencing daemon, "
"version %s (base: SILC Toolkit %s)\n",
silc_dist_version, silc_version);
- printf("(c) 1997 - 2002 Pekka Riikonen "
+ printf("(c) 1997 - 2005 Pekka Riikonen "
"<priikone@silcnet.org>\n");
exit(0);
break;
if (ret == FALSE)
goto fail;
- /* Register default crypto stuff since we are going to need them
+ /* Register default crypto stuff since we are going to need them
in the configuration file parsing phase */
silc_cipher_register_default();
silc_pkcs_register_default();
if (silc_server_init(silcd) == FALSE)
goto fail;
- /* Ignore SIGPIPE */
+ /* Ignore some signals */
sa.sa_handler = SIG_IGN;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
- sigaction(SIGPIPE, &sa, NULL);
+#if defined(SIGPIPE)
+ sigaction(SIGPIPE, &sa, NULL); /* Ignore broken pipes */
+#endif /* SIGPIPE*/
+#if defined(SIGXFSZ)
+ sigaction(SIGXFSZ, &sa, NULL); /* Ignore file limit exceeds */
+#endif /* SIGXFSZ */
+#if defined(SIGXCPU)
+ sigaction(SIGXCPU, &sa, NULL); /* Ignore CPU time limit exceeds */
+#endif /* SIGXCPU */
+
+ /* Handle specificly some other signals. */
sa.sa_handler = signal_handler;
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGTERM, &sa, NULL);