X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/c48eb01dbed808464cc3f702cc910f3962351825..1d39b466d4ddd974674c9397589d45935c746ed0:/src/ircd.c diff --git a/src/ircd.c b/src/ircd.c index 6ad6f61..5e108e0 100644 --- a/src/ircd.c +++ b/src/ircd.c @@ -24,10 +24,10 @@ * $Id: ircd.c 3380 2007-04-03 22:25:11Z jilles $ */ +#include "ratbox_lib.h" #include "stdinc.h" #include "setup.h" #include "config.h" - #include "ircd.h" #include "channel.h" #include "class.h" @@ -46,7 +46,7 @@ #include "restart.h" #include "s_auth.h" #include "s_conf.h" -#include "s_log.h" +#include "logger.h" #include "s_serv.h" /* try_connections */ #include "s_user.h" #include "s_stats.h" @@ -66,8 +66,6 @@ #include "patchlevel.h" #include "serno.h" -#include "ratbox_lib.h" - /* * Try and find the correct name to use with getrlimit() for setting the max. * number of files allowed to be open by this process. @@ -78,7 +76,20 @@ extern int ServerRunning; extern struct LocalUser meLocalUser; extern char **myargv; -int maxconnections; /* XXX */ +int maxconnections; + +/* /quote set variables */ +struct SetOptions GlobalSetOptions; + +/* configuration set from ircd.conf */ +struct config_file_entry ConfigFileEntry; +/* server info set from ircd.conf */ +struct server_info ServerInfo; +/* admin info set from ircd.conf */ +struct admin_info AdminInfo; + +struct Counter Count; +struct ServerStatistics ServerStats; /* * print_startup - print startup information @@ -142,19 +153,22 @@ ircd_die_cb(const char *str) static void init_sys(void) { -#if defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H) - struct rlimit limit; - - if(!getrlimit(RLIMIT_NOFILE, &limit)) - { - limit.rlim_cur = limit.rlim_max; /* make soft limit the max */ - if(setrlimit(RLIMIT_NOFILE, &limit) == -1) - { - fprintf(stderr, "error setting max fd's to %ld\n", (long) limit.rlim_cur); - exit(EXIT_FAILURE); - } - } -#endif /* RLIMIT_NOFILE */ +#if defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H) + struct rlimit limit; + + if(!getrlimit(RLIMIT_NOFILE, &limit)) + { + maxconnections = limit.rlim_cur; + if(maxconnections <= MAX_BUFFER) + { + fprintf(stderr, "ERROR: Shell FD limits are too low.\n"); + fprintf(stderr, "ERROR: ircd-ratbox reserves %d FDs, shell limits must be above this\n", MAX_BUFFER); + exit(EXIT_FAILURE); + } + return; + } +#endif /* RLIMIT_FD_MAX */ + maxconnections = MAXCONNECTIONS; } static int @@ -225,32 +239,6 @@ struct lgetopt myopts[] = { {NULL, NULL, STRING, NULL}, }; -void -set_time(void) -{ - struct timeval newtime; - newtime.tv_sec = 0; - newtime.tv_usec = 0; -#ifdef HAVE_GETTIMEOFDAY - if(gettimeofday(&newtime, NULL) == -1) - { - ilog(L_MAIN, "Clock Failure (%d)", errno); - sendto_realops_snomask(SNO_GENERAL, L_ALL, - "Clock Failure (%d), TS can be corrupted", errno); - - restart("Clock Failure"); - } -#else - newtime.tv_sec = time(NULL); - -#endif - if(newtime.tv_sec < rb_current_time()) - rb_set_back_events(rb_current_time() - newtime.tv_sec); - - SystemTime.tv_sec = newtime.tv_sec; - SystemTime.tv_usec = newtime.tv_usec; -} - static void check_rehash(void *unused) { @@ -279,26 +267,6 @@ check_rehash(void *unused) } } -void -charybdis_io_loop(void) -{ - time_t delay; - - while (ServerRunning) - { - /* Run pending events, then get the number of seconds to the next - * event - */ - - delay = rb_event_next(); - if(delay <= rb_current_time()) - rb_event_run(); - - - rb_select(250); - } -} - /* * initalialize_global_set_options * @@ -312,7 +280,11 @@ initialize_global_set_options(void) memset(&GlobalSetOptions, 0, sizeof(GlobalSetOptions)); /* memset( &ConfigFileEntry, 0, sizeof(ConfigFileEntry)); */ - GlobalSetOptions.maxclients = ServerInfo.max_clients; + GlobalSetOptions.maxclients = ServerInfo.default_max_clients; + + if(GlobalSetOptions.maxclients > (maxconnections - MAX_BUFFER)) + GlobalSetOptions.maxclients = maxconnections - MAX_BUFFER; + GlobalSetOptions.autoconn = 1; GlobalSetOptions.spam_time = MIN_JOIN_LEAVE_TIME; @@ -470,10 +442,6 @@ main(int argc, char *argv[]) return -1; } - /* - * save server boot time right away, so getrusage works correctly - */ - set_time(); /* * Setup corefile size immediately after boot -kre */ @@ -496,9 +464,10 @@ main(int argc, char *argv[]) rb_dlinkAddTail(&me, &me.node, &global_client_list); - memset((void *) &Count, 0, sizeof(Count)); - memset((void *) &ServerInfo, 0, sizeof(ServerInfo)); - memset((void *) &AdminInfo, 0, sizeof(AdminInfo)); + memset(&Count, 0, sizeof(Count)); + memset(&ServerInfo, 0, sizeof(ServerInfo)); + memset(&AdminInfo, 0, sizeof(AdminInfo)); + memset(&ServerStats, 0, sizeof(struct ServerStatistics)); /* Initialise the channel capability usage counts... */ init_chcap_usage_counts(); @@ -559,6 +528,7 @@ main(int argc, char *argv[]) /* Init the event subsystem */ init_sys(); rb_lib_init(ircd_log_cb, ircd_restart_cb, ircd_die_cb, !server_state_foreground, maxconnections, DNODE_HEAP_SIZE, FD_HEAP_SIZE); + rb_linebuf_init(LINEBUF_HEAP_SIZE); init_main_logfile(); newconf_init(); @@ -574,7 +544,6 @@ main(int argc, char *argv[]) init_channels(); initclass(); initwhowas(); - init_stats(); init_reject(); init_cache(); init_monitor(); @@ -673,7 +642,7 @@ main(int argc, char *argv[]) print_startup(getpid()); - charybdis_io_loop(); + rb_lib_loop(250); return 0; }