]> jfr.im git - irc/quakenet/newserv.git/blobdiff - trusts/events.c
Merge chanserv-live into default.
[irc/quakenet/newserv.git] / trusts / events.c
index d14c885df10f14a2fd79ca456f739b222ef9d44c..7f716e802e9aaef6595531376f191e9f3b0a225a 100644 (file)
@@ -1,40 +1,53 @@
 #include "../core/hooks.h"
+#include "../irc/irc.h"
 #include "trusts.h"
 
 static void __counthandler(int hooknum, void *arg);
 
-static void __newnick(int hooknum, void *arg) {
-  nick *sender = arg;
-  uint32_t host;
+void trusts_newnick(nick *sender, int moving) {
   trusthost *th;
+  void *arg[2];
+  struct irc_in_addr ipaddress;
+
+  ip_canonicalize_tunnel(&ipaddress, &sender->ipaddress);
 
-  host = irc_in_addr_v4_to_int(&sender->p_ipaddr);
-  th = th_getbyhost(host);
+  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);
-  triggerhook(HOOK_TRUSTS_NEWNICK, sender);
+  __counthandler(HOOK_TRUSTS_NEWNICK, arg);
+
+  triggerhook(HOOK_TRUSTS_NEWNICK, arg);
 }
 
-static void __lostnick(int hooknum, void *arg) {
-  nick *sender = arg, *np, *lp;
+static void __newnick(int hooknum, void *arg) {
+  trusts_newnick(arg, 0);
+}
+
+void trusts_lostnick(nick *sender, int moving) {
+  nick *np, *lp;
   trusthost *th = gettrusthost(sender);
+  void *arg[2];
+
+  arg[0] = sender;
+  arg[1] = (void *)(long)moving;
+
+  __counthandler(HOOK_TRUSTS_LOSTNICK, arg);
+  triggerhook(HOOK_TRUSTS_LOSTNICK, arg);
 
   if(!th)
     return;
 
-  __counthandler(HOOK_TRUSTS_LOSTNICK, sender);
-  triggerhook(HOOK_TRUSTS_LOSTNICK, sender);
-
   /*
    * we need to erase this nick from the trusthost list
    * stored in the ->nextbytrust (ext) pointers in each nick
@@ -54,11 +67,20 @@ static void __lostnick(int hooknum, void *arg) {
   }
 }
 
+static void __lostnick(int hooknum, void *arg) {
+  trusts_lostnick(arg, 0);
+}
+
 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++;