X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmain.c;h=fbf9ed5806f4b93d9cb0c292c1a07feb4ff32794;hb=0def65a9df6d9a295c064cba58af229b326f39fe;hp=79043b19452374fe9648859ccc074ca88e94163a;hpb=0e63b966fea89cabaf1d859a28382b350721eb40;p=NeonServV5.git diff --git a/src/main.c b/src/main.c index 79043b1..fbf9ed5 100644 --- a/src/main.c +++ b/src/main.c @@ -34,11 +34,12 @@ #include "ModeNode.h" #include "IRCQueue.h" #include "DBHelper.h" -#include "commands.h" #include "ConfigParser.h" #include "ssl.h" #include "QServer.h" #include "version.h" +#include "modules.h" +#include "module_commands.h" time_t start_time; static int running, hard_restart; @@ -61,6 +62,7 @@ static pthread_mutex_t log_sync; static void check_firstrun(); void cleanup() { + stop_modules(); free_sockets(); qserver_free(); free_parser(); @@ -69,7 +71,6 @@ void cleanup() { free_bind(); free_modcmd(); free_whoqueue(); - free_bots(); free_mysql(); free_handleinfohandler(); free_lang(); @@ -191,10 +192,15 @@ int main(int argc, char *argv[]) { break; } } + #ifndef WIN32 if(geteuid() == 0 || getuid() == 0) { fprintf(stderr, "NeonServ may not be run with super user privileges.\n"); exit(0); } + #endif + #ifdef ENABLE_MEMORY_DEBUG + initMemoryDebug(); + #endif if(!loadConfig(CONF_FILE)) { fprintf(stderr, "Unable to load " CONF_FILE "\n"); exit(0); @@ -243,10 +249,6 @@ main: signal(SIGSEGV, sighandler); signal(SIGTERM, sighandler); - #ifdef ENABLE_MEMORY_DEBUG - initMemoryDebug(); - #endif - start_time = time(0); #ifdef WIN32 @@ -280,9 +282,10 @@ main: init_ModeNode(); init_bind(); init_modcmd(); + register_module_commands(); init_handleinfohandler(); init_tools(); - register_commands(); + loadModules(); init_bots(); init_DBHelper(); qserver_init(); @@ -290,9 +293,9 @@ main: load_languages(); int update_minutes = get_int_field("statistics.frequency"); if(!update_minutes) update_minutes = 2; - timeq_add(update_minutes * 60 + 10, main_statistics, NULL); + timeq_add(update_minutes * 60 + 10, 0, main_statistics, NULL); - timeq_add(90, main_checkauths, NULL); + timeq_add(90, 0, main_checkauths, NULL); int worker_threads = get_int_field("General.worker_threads"); if(!worker_threads) worker_threads = 1; @@ -307,7 +310,7 @@ main: int usleep_delay = 1000000 / TICKS_PER_SECOND; while(running) { timeq_tick(); - loop_bots(); + loop_modules(); qserver_loop(); queue_loop(); mysql_free(); @@ -329,7 +332,7 @@ main: } } while(time(0) < socket_wait); timeq_tick(); - loop_bots(); + loop_modules(); clearTempUsers(); destroyEvents(); qserver_loop(); @@ -457,7 +460,7 @@ TIMEQ_CALLBACK(main_checkauths) { if ((row = mysql_fetch_row(res)) != NULL) { lastcheck = atoi(row[1]); if(!lastcheck || unixtime - lastcheck >= min_unckecked) { - lookup_authname(row[0], main_checkauths_callback, NULL); + lookup_authname(row[0], 0, main_checkauths_callback, NULL); } else next_call = 300; } @@ -472,13 +475,13 @@ TIMEQ_CALLBACK(main_checkauths) { } } - timeq_add(next_call, main_checkauths, NULL); + timeq_add(next_call, 0, main_checkauths, NULL); } TIMEQ_CALLBACK(main_statistics) { int update_minutes = get_int_field("statistics.frequency"); if(!update_minutes) update_minutes = 2; - timeq_add(update_minutes * 60, main_statistics, NULL); + timeq_add(update_minutes * 60, 0, main_statistics, NULL); if(get_int_field("statistics.enable")) { statistics_enabled = 1; statistics_requested_lusers = 1; @@ -518,6 +521,14 @@ void statistics_update() { } } +time_t getStartTime() { + return start_time; +} + +int getRunningThreads() { + return running_threads; +} + void write_log(int loglevel, const char *line, int len) { SYNCHRONIZE(log_sync); if(!daemonized && (print_loglevel & loglevel)) {