]> jfr.im git - irc/quakenet/newserv.git/blobdiff - trusts/events.c
Merge pull request #1 from meeb/meeb
[irc/quakenet/newserv.git] / trusts / events.c
index b16d55706228c86f445d9a172433f262aa82f4a5..7f716e802e9aaef6595531376f191e9f3b0a225a 100644 (file)
@@ -1,30 +1,32 @@
 #include "../core/hooks.h"
+#include "../irc/irc.h"
 #include "trusts.h"
 
 static void __counthandler(int hooknum, void *arg);
 
 void trusts_newnick(nick *sender, int moving) {
-  uint32_t host;
   trusthost *th;
   void *arg[2];
+  struct irc_in_addr ipaddress;
 
-  host = irc_in_addr_v4_to_int(&sender->p_ipaddr);
-  th = th_getbyhost(host);
+  ip_canonicalize_tunnel(&ipaddress, &sender->ipaddress);
+
+  th = th_getbyhost(&ipaddress);
 
   settrusthost(sender, th);
   if(!th) {
     setnextbytrust(sender, NULL);
-    return;
+  } else {
+    setnextbytrust(sender, th->users);
+    th->users = sender;
   }
 
-  setnextbytrust(sender, th->users);
-  th->users = sender;
+  arg[0] = sender;
+  arg[1] = (void *)(long)moving;
 
   /* sucks we have to do this, at least until we get priority hooks */
-  __counthandler(HOOK_TRUSTS_NEWNICK, sender);
+  __counthandler(HOOK_TRUSTS_NEWNICK, arg);
 
-  arg[0] = sender;
-  arg[1] = (void *)(long)moving;
   triggerhook(HOOK_TRUSTS_NEWNICK, arg);
 }
 
@@ -37,15 +39,15 @@ void trusts_lostnick(nick *sender, int moving) {
   trusthost *th = gettrusthost(sender);
   void *arg[2];
 
-  if(!th)
-    return;
-
-  __counthandler(HOOK_TRUSTS_LOSTNICK, sender);
-
   arg[0] = sender;
   arg[1] = (void *)(long)moving;
+
+  __counthandler(HOOK_TRUSTS_LOSTNICK, arg);
   triggerhook(HOOK_TRUSTS_LOSTNICK, arg);
 
+  if(!th)
+    return;
+
   /*
    * we need to erase this nick from the trusthost list
    * stored in the ->nextbytrust (ext) pointers in each nick
@@ -70,10 +72,15 @@ static void __lostnick(int hooknum, void *arg) {
 }
 
 static void __counthandler(int hooknum, void *arg) {
-  time_t t = time(NULL);
-  trusthost *th = gettrusthost((nick *)arg);
-  trustgroup *tg = th->group;
+  time_t t = getnettime();
+  void **args = arg;
+  trusthost *th = gettrusthost((nick *)args[0]);
+  trustgroup *tg;
+
+  if(!th)
+    return;
 
+  tg = th->group;
   tg->lastseen = th->lastseen = t;
   if(hooknum == HOOK_TRUSTS_NEWNICK) {
     th->count++;