]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/ircd.c
event* -> rb_event*
[irc/rqf/shadowircd.git] / src / ircd.c
index 818806853ff362c75fff5605420393d6c11cd7ab..aab1d454dbd877a3e0d2c2744f01c79208d9a24e 100644 (file)
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: ircd.c 3047 2006-12-26 23:18:05Z jilles $
+ *  $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"
@@ -47,7 +45,6 @@
 #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.
  */
 int _charybdis_data_version = CHARYBDIS_DV;
 
-extern int ServerRunning, initialVMTop;
+extern int ServerRunning;
 extern struct LocalUser meLocalUser;
 extern char **myargv;
 
-/*
- * get_vm_top - get the operating systems notion of the resident set size
- */
-static unsigned long
-get_vm_top(void)
-{
-       /*
-        * NOTE: sbrk is not part of the ANSI C library or the POSIX.1 standard
-        * however it seems that everyone defines it. Calling sbrk with a 0
-        * argument will return a pointer to the top of the process virtual
-        * memory without changing the process size, so this call should be
-        * reasonably safe (sbrk returns the new value for the top of memory).
-        * This code relies on the notion that the address returned will be an 
-        * offset from 0 (NULL), so the result of sbrk is cast to a size_t and 
-        * returned. We really shouldn't be using it here but...
-        */
-       void *vptr = sbrk(0);
-       return (unsigned long) vptr;
-}
-
-/*
- * get_maxrss - get the operating systems notion of the resident set size
- */
-unsigned long
-get_maxrss(void)
-{
-       return get_vm_top() - initialVMTop;
-}
+extern int maxconnections; /* XXX */
 
 /*
  * print_startup - print startup information
@@ -140,6 +108,12 @@ ircd_log_cb(const char *str)
        ilog(L_MAIN, "%s", str);
 }
 
+static void
+ircd_restart_cb(const char *str)
+{
+       ilog(L_MAIN, "%s", str);
+}
+
 /*
  * Why EXIT_FAILURE here?
  * Because if ircd_die_cb() is called it's because of a fatal
@@ -168,29 +142,19 @@ ircd_die_cb(const char *str)
 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 fd table too big\n");
-                       fprintf(stderr, "Hard Limit: %ld IRC max: %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 */
+#endif /* RLIMIT_NOFILE */
 }
 
 static int
@@ -280,8 +244,8 @@ set_time(void)
        newtime.tv_sec = time(NULL);
        
 #endif
-       if(newtime.tv_sec < CurrentTime)
-               set_back_events(CurrentTime - newtime.tv_sec);
+       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;
@@ -326,12 +290,12 @@ charybdis_io_loop(void)
                 * event
                 */
 
-               delay = eventNextTime();
-               if(delay <= CurrentTime)
-                       eventRun();
+               delay = rb_event_next();
+               if(delay <= rb_current_time())
+                       rb_event_run();
 
 
-               comm_select(250);
+               rb_select(250);
        }
 }
 
@@ -348,7 +312,7 @@ initialize_global_set_options(void)
        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;
@@ -413,7 +377,7 @@ write_pidfile(const char *filename)
        {
                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)",
@@ -483,6 +447,8 @@ setup_corefile(void)
 #endif
 }
 
+struct ev_entry *check_splitmode_ev = NULL;
+
 /*
  * main
  *
@@ -513,11 +479,6 @@ main(int argc, char *argv[])
         */
        setup_corefile();
 
-       /*
-        * set initialVMTop before we allocate any memory
-        */
-       initialVMTop = get_vm_top();
-
        ServerRunning = 0;
        /* It ain't random, but it ought to be a little harder to guess */
        srand(SystemTime.tv_sec ^ (SystemTime.tv_usec | (getpid() << 20)));
@@ -533,7 +494,7 @@ main(int argc, char *argv[])
        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));
@@ -596,17 +557,10 @@ main(int argc, char *argv[])
        }
 
        /* 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, restart, ircd_die_cb, !server_state_foreground, maxconnections, DNODE_HEAP_SIZE, FD_HEAP_SIZE);
 
        init_main_logfile();
-       init_patricia();
        newconf_init();
        init_s_conf();
        init_s_newconf();
@@ -679,12 +633,12 @@ main(int argc, char *argv[])
        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();
 
@@ -695,31 +649,25 @@ main(int argc, char *argv[])
 
        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;