* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*
- * $Id: ircd.c 3249 2007-03-05 18:51:17Z nenolod $
+ * $Id: ircd.c 3380 2007-04-03 22:25:11Z jilles $
*/
#include "stdinc.h"
#include "setup.h"
#include "config.h"
-#include "tools.h"
#include "ircd.h"
#include "channel.h"
#include "class.h"
#include "client.h"
#include "common.h"
-#include "event.h"
#include "hash.h"
#include "irc_string.h"
#include "ircd_signal.h"
#include "res.h"
#include "restart.h"
#include "s_auth.h"
-#include "commio.h"
#include "s_conf.h"
#include "s_log.h"
#include "s_serv.h" /* try_connections */
#include "supported.h"
#include "whowas.h"
#include "modules.h"
-#include "memory.h"
#include "hook.h"
#include "ircd_getopt.h"
-#include "balloc.h"
#include "newconf.h"
-#include "patricia.h"
#include "reject.h"
#include "s_conf.h"
#include "s_newconf.h"
#include "cache.h"
#include "monitor.h"
-#include "libcharybdis.h"
#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.
extern struct LocalUser meLocalUser;
extern char **myargv;
+int maxconnections; /* XXX */
+
/*
* print_startup - print startup information
*/
ilog(L_MAIN, "%s", str);
}
+static void
+ircd_restart_cb(const char *str)
+{
+ restart(str);
+}
+
/*
* Why EXIT_FAILURE here?
* Because if ircd_die_cb() is called it's because of a fatal
static void
init_sys(void)
{
-#if defined(RLIMIT_FD_MAX) && defined(HAVE_SYS_RLIMIT_H)
+#if defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H)
struct rlimit limit;
- if(!getrlimit(RLIMIT_FD_MAX, &limit))
+ if(!getrlimit(RLIMIT_NOFILE, &limit))
{
- if(limit.rlim_max < MAXCONNECTIONS)
- {
- fprintf(stderr, "ircd's bootstrap fd table is too big\n");
- fprintf(stderr, "Hard Limit: %ld bootstrap size: %d\n",
- (long) limit.rlim_max, MAXCONNECTIONS);
- fprintf(stderr, "Fix MAXCONNECTIONS\n");
- exit(-1);
- }
-
limit.rlim_cur = limit.rlim_max; /* make soft limit the max */
- if(setrlimit(RLIMIT_FD_MAX, &limit) == -1)
+ 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_FD_MAX */
+
+ maxconnections = limit.rlim_cur;
+#endif /* RLIMIT_NOFILE */
}
static int
set_time(void)
{
struct timeval newtime;
+
newtime.tv_sec = 0;
newtime.tv_usec = 0;
#ifdef HAVE_GETTIMEOFDAY
newtime.tv_sec = time(NULL);
#endif
- if(newtime.tv_sec < CurrentTime)
- set_back_events(CurrentTime - newtime.tv_sec);
SystemTime.tv_sec = newtime.tv_sec;
SystemTime.tv_usec = newtime.tv_usec;
+
+ rb_set_time();
}
static void
}
}
-void
-charybdis_io_loop(void)
-{
- time_t delay;
-
- while (ServerRunning)
- {
- /* Run pending events, then get the number of seconds to the next
- * event
- */
-
- delay = eventNextTime();
- if(delay <= CurrentTime)
- eventRun();
-
-
- comm_select(250);
- }
-}
-
/*
* initalialize_global_set_options
*
memset(&GlobalSetOptions, 0, sizeof(GlobalSetOptions));
/* memset( &ConfigFileEntry, 0, sizeof(ConfigFileEntry)); */
- GlobalSetOptions.maxclients = MAX_CLIENTS;
+ GlobalSetOptions.maxclients = ServerInfo.max_clients;
GlobalSetOptions.autoconn = 1;
GlobalSetOptions.spam_time = MIN_JOIN_LEAVE_TIME;
{
unsigned int pid = (unsigned int) getpid();
- ircsnprintf(buff, sizeof(buff), "%u\n", pid);
+ rb_snprintf(buff, sizeof(buff), "%u\n", pid);
if((fputs(buff, fb) == -1))
{
ilog(L_MAIN, "Error writing %u to pid file %s (%s)",
#endif
}
+struct ev_entry *check_splitmode_ev = NULL;
+
/*
* main
*
memset(&local_oper_list, 0, sizeof(local_oper_list));
memset(&oper_list, 0, sizeof(oper_list));
- dlinkAddTail(&me, &me.node, &global_client_list);
+ rb_dlinkAddTail(&me, &me.node, &global_client_list);
memset((void *) &Count, 0, sizeof(Count));
memset((void *) &ServerInfo, 0, sizeof(ServerInfo));
}
/* Init the event subsystem */
- libcharybdis_init(ircd_log_cb, restart, ircd_die_cb);
init_sys();
-
- fdlist_init();
- if(!server_state_foreground)
- {
- comm_close_all();
- }
+ 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();
- init_patricia();
newconf_init();
init_s_conf();
init_s_newconf();
me.servptr = &me;
SetMe(&me);
make_server(&me);
- me.serv->up = me.name;
- startup_time = CurrentTime;
+ startup_time = rb_current_time();
add_to_client_hash(me.name, &me);
add_to_id_hash(me.id, &me);
+ me.serv->nameinfo = scache_connect(me.name, me.info, 0);
- dlinkAddAlloc(&me, &global_serv_list);
+ rb_dlinkAddAlloc(&me, &global_serv_list);
construct_umodebuf();
ilog(L_MAIN, "Server Ready");
- eventAddIsh("cleanup_glines", cleanup_glines, NULL, CLEANUP_GLINES_TIME);
+ rb_event_addish("cleanup_glines", cleanup_glines, NULL, CLEANUP_GLINES_TIME);
/* We want try_connections to be called as soon as possible now! -- adrian */
/* No, 'cause after a restart it would cause all sorts of nick collides */
/* um. by waiting even longer, that just means we have even *more*
* nick collisions. what a stupid idea. set an event for the IO loop --fl
*/
- eventAddIsh("try_connections", try_connections, NULL, STARTUP_CONNECTIONS_TIME);
- eventAddOnce("try_connections_startup", try_connections, NULL, 0);
+ rb_event_addish("try_connections", try_connections, NULL, STARTUP_CONNECTIONS_TIME);
+ rb_event_addonce("try_connections_startup", try_connections, NULL, 0);
- eventAddIsh("collect_zipstats", collect_zipstats, NULL, ZIPSTATS_TIME);
+ rb_event_addish("collect_zipstats", collect_zipstats, NULL, ZIPSTATS_TIME);
/* Setup the timeout check. I'll shift it later :) -- adrian */
- eventAddIsh("comm_checktimeouts", comm_checktimeouts, NULL, 1);
-
- eventAdd("check_rehash", check_rehash, NULL, 1);
+ rb_event_addish("rb_checktimeouts", rb_checktimeouts, NULL, 1);
- if(ConfigServerHide.links_delay > 0)
- eventAdd("cache_links", cache_links, NULL,
- ConfigServerHide.links_delay);
- else
- ConfigServerHide.links_disabled = 1;
+ rb_event_add("check_rehash", check_rehash, NULL, 1);
if(splitmode)
- eventAdd("check_splitmode", check_splitmode, NULL, 2);
+ check_splitmode_ev = rb_event_add("check_splitmode", check_splitmode, NULL, 2);
ServerRunning = 1;
print_startup(getpid());
- charybdis_io_loop();
+ rb_lib_loop(250);
return 0;
}