Another year is about to end... So we have to update these damn copyright information :P
[NeonServV5.git] / src / main.c
index 50cf11d3d6136323aa191d0121cac5bad2398ff7..876dc70be79891645b6edfa6050b8cf84302c273 100644 (file)
@@ -1,5 +1,5 @@
-/* main.c - NeonServ v5.2
- * Copyright (C) 2011  Philipp Kreil (pk910)
+/* main.c - NeonServ v5.3
+ * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * 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
 #include "DBHelper.h"
 #include "commands.h"
 #include "ConfigParser.h"
+#include "ssl.h"
 
 time_t start_time;
-static int running;
+static int running, hard_restart;
 static int statistics_requested_lusers = 0;
 int statistics_enabled;
 TIMEQ_CALLBACK(main_statistics);
@@ -91,7 +92,7 @@ static int load_mysql_config() {
     return 1;
 }
 
-int main(void) {
+int main(int argc, char *argv[]) {
 main:
     
     start_time = time(0);
@@ -114,6 +115,7 @@ main:
     
     queue_init();
     init_lang();
+    ssl_init();
     init_parser();
     init_UserNode();
     init_ChanNode();
@@ -127,7 +129,9 @@ main:
     init_DBHelper();
     
     load_languages();
-    timeq_add(10, main_statistics, NULL);
+    int update_minutes = get_int_field("statistics.frequency");
+    if(!update_minutes) update_minutes = 2;
+    timeq_add(update_minutes * 60 + 10, main_statistics, NULL);
     
     time_t socket_wait;
     running = 1;
@@ -143,6 +147,18 @@ main:
         queue_loop();
     }
     cleanup();
+    if(hard_restart) {
+        /* Append a NULL to the end of argv[]. */
+        char **restart_argv = (char **)alloca((argc + 1) * sizeof(char *));
+        memcpy(restart_argv, argv, argc * sizeof(char *));
+        restart_argv[argc] = NULL;
+        
+        #ifdef WIN32
+        execv(argv[0], (const char * const*)restart_argv);
+        #else
+        execv(argv[0], restart_argv);
+        #endif
+    }
     goto main;
 }
 
@@ -175,7 +191,8 @@ int stricmplen (const char *s1, const char *s2, int len)
    return c1 - c2;
 }
 
-void restart_bot(int hard_restart) {
+void restart_bot(int do_hard_restart) {
+    hard_restart = do_hard_restart;
     running = 0;
 }
 
@@ -214,8 +231,6 @@ TIMEQ_CALLBACK(main_statistics) {
 void statistics_update() {
     if(get_int_field("statistics.enable") && statistics_requested_lusers && get_string_field("statistics.execute")) {
         statistics_requested_lusers = 0;
-        int update_minutes = get_int_field("statistics.frequency");
-        if(!update_minutes) update_minutes = 2;
         char command[MAXLEN];
         /* parameters:
          - visible users
@@ -226,7 +241,7 @@ void statistics_update() {
          - network users
          - network channels
         */
-        sprintf(command, "%s %d %d %d %.2f %.2f %d %d", get_string_field("statistics.execute"), getUserCount(), getChanUserCount(), getChannelCount(), ((float) statistics_privmsg / update_minutes), ((float) statistics_commands / update_minutes), statistics_network_users, statistics_network_channels);
+        sprintf(command, "%s %d %d %d %d %d %d %d", get_string_field("statistics.execute"), getUserCount(), getChanUserCount(), getChannelCount(), statistics_privmsg, statistics_commands, statistics_network_users, statistics_network_channels);
         statistics_privmsg = 0;
         statistics_commands = 0;
         system(command);