X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/bf5b66e54fb4cda321097bac1a6d1b535a5cfb71..0a7647a3572342fce089bcae5931062e66fe3ab4:/trusts/events.c diff --git a/trusts/events.c b/trusts/events.c index 481390ac..b16d5570 100644 --- a/trusts/events.c +++ b/trusts/events.c @@ -1,10 +1,12 @@ #include "../core/hooks.h" #include "trusts.h" -static void __newnick(int hooknum, void *arg) { - nick *sender = arg; +static void __counthandler(int hooknum, void *arg); + +void trusts_newnick(nick *sender, int moving) { uint32_t host; trusthost *th; + void *arg[2]; host = irc_in_addr_v4_to_int(&sender->p_ipaddr); th = th_getbyhost(host); @@ -18,17 +20,31 @@ static void __newnick(int hooknum, void *arg) { setnextbytrust(sender, th->users); th->users = sender; - triggerhook(HOOK_TRUSTS_NEWNICK, sender); + /* sucks we have to do this, at least until we get priority hooks */ + __counthandler(HOOK_TRUSTS_NEWNICK, sender); + + arg[0] = sender; + arg[1] = (void *)(long)moving; + 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]; if(!th) return; - triggerhook(HOOK_TRUSTS_LOSTNICK, sender); + __counthandler(HOOK_TRUSTS_LOSTNICK, sender); + + arg[0] = sender; + arg[1] = (void *)(long)moving; + triggerhook(HOOK_TRUSTS_LOSTNICK, arg); /* * we need to erase this nick from the trusthost list @@ -49,27 +65,46 @@ 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; + tg->lastseen = th->lastseen = t; if(hooknum == HOOK_TRUSTS_NEWNICK) { th->count++; - th->group->count++; + if(th->count > th->maxusage) + th->maxusage = th->count; + + tg->count++; + if(tg->count > tg->maxusage) + tg->maxusage = tg->count; } else { th->count--; - th->group->count--; + tg->count--; } } +static int hooksregistered; + static void __dbloaded(int hooknum, void *arg) { int i; nick *np; + if(hooksregistered) + return; + hooksregistered = 1; + registerhook(HOOK_NICK_NEWNICK, __newnick); registerhook(HOOK_NICK_LOSTNICK, __lostnick); - registerhook(HOOK_TRUSTS_NEWNICK, __counthandler); +/* registerhook(HOOK_TRUSTS_NEWNICK, __counthandler); registerhook(HOOK_TRUSTS_LOSTNICK, __counthandler); +*/ /* we could do it by host, but hosts and ips are not bijective :( */ for(i=0;i