]> jfr.im git - irc/quakenet/newserv.git/blobdiff - trojanscan/trojanscan.c
rework of build stage 2:
[irc/quakenet/newserv.git] / trojanscan / trojanscan.c
index 1813d1fc8a97123fe67a525c94ae525f0450f94a..141d5bb4fab44b82f976a0efef662e46be437da7 100644 (file)
@@ -41,6 +41,8 @@ static char *versionreply;
 static int hooksregistered = 0;
 static void *trojanscan_connect_nick_schedule;
 
+static void *db_ping_schedule;
+
 void _init() {
   trojanscan_cmds = newcommandtree();
 
@@ -129,6 +131,7 @@ void _fini(void) {
 
   for (i=0;i<trojanscan_tailpoolsize;i++)
     freesstring(trojanscan_tailpool[i]);
+
   trojanscan_database_close();
 
   deletecommandfromtree(trojanscan_cmds, "showcommands", &trojanscan_showcommands);
@@ -252,6 +255,11 @@ void trojanscan_connect(void *arg) {
 
   if ((trojanscan_cycletime / trojanscan_maxchans) < 1) {
     Error("trojanscan", ERR_FATAL, "Cycletime / maxchans < 1, increase cycletime or decrease maxchans else cycling breaks.");
+    freesstring(dbhost);
+    freesstring(dbuser);
+    freesstring(dbpass);
+    freesstring(db);
+    freesstring(dbport);
     return; /* PPA: module failed to load */
   }
   
@@ -264,6 +272,11 @@ void trojanscan_connect(void *arg) {
 
   if (trojanscan_database_connect(dbhost->content, dbuser->content, dbpass->content, db->content, atoi(dbport->content)) < 0) {
     Error("trojanscan", ERR_FATAL, "Cannot connect to database host!");
+    freesstring(dbhost);
+    freesstring(dbuser);
+    freesstring(dbpass);
+    freesstring(db);
+    freesstring(dbport);
     return; /* PPA: module failed to load */
   }
   
@@ -777,9 +790,9 @@ void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *message, ...)
   va_end(va);
   
   if (cp) {
-    sendmessagetochannel(trojanscan_nick, cp, buf);
+    sendmessagetochannel(trojanscan_nick, cp, "%s", buf);
   } else {
-    sendmessagetouser(trojanscan_nick, np, buf);
+    sendmessagetouser(trojanscan_nick, np, "%s", buf);
   }
 
 }
@@ -2500,7 +2513,21 @@ void trojanscan_generaterealname(char *buf, int maxsize) {
     strlcpy(buf, np->realname->name->content, maxsize + 1);
 }
 
+static void db_ping(void *arg) {
+  if (!(trojanscan_database_query("SELECT 1"))) {
+    trojanscan_database_res *res;
+    if ((res = trojanscan_database_store_result(&trojanscan_sql))) {
+      trojanscan_database_free_result(res);
+    }
+  } 
+
+  db_ping_schedule = scheduleoneshot(time(NULL) + 60, &db_ping, NULL);
+}
+
 void trojanscan_database_close(void) {
+  if(db_ping_schedule)
+    deleteschedule(db_ping_schedule, db_ping, NULL);
+
   mysql_close(&trojanscan_sql);
 }
 
@@ -2508,6 +2535,10 @@ int trojanscan_database_connect(char *dbhost, char *dbuser, char *dbpass, char *
   mysql_init(&trojanscan_sql);
   if (!mysql_real_connect(&trojanscan_sql, dbhost, dbuser, dbpass, db, port, NULL, 0))
     return -1;
+
+
+  db_ping_schedule = scheduleoneshot(time(NULL) + 60, &db_ping, NULL);
+
   return 0;
 }