]>
jfr.im git - irc/quakenet/newserv.git/blob - trusts/events.c
1 #include "../core/hooks.h"
4 static void __counthandler(int hooknum
, void *arg
);
6 void trusts_newnick(nick
*sender
, int moving
) {
11 host
= irc_in_addr_v4_to_int(&sender
->p_ipaddr
);
12 th
= th_getbyhost(host
);
14 settrusthost(sender
, th
);
16 setnextbytrust(sender
, NULL
);
18 setnextbytrust(sender
, th
->users
);
23 arg
[1] = (void *)(long)moving
;
25 /* sucks we have to do this, at least until we get priority hooks */
26 __counthandler(HOOK_TRUSTS_NEWNICK
, arg
);
28 triggerhook(HOOK_TRUSTS_NEWNICK
, arg
);
31 static void __newnick(int hooknum
, void *arg
) {
32 trusts_newnick(arg
, 0);
35 void trusts_lostnick(nick
*sender
, int moving
) {
37 trusthost
*th
= gettrusthost(sender
);
41 arg
[1] = (void *)(long)moving
;
43 __counthandler(HOOK_TRUSTS_LOSTNICK
, arg
);
44 triggerhook(HOOK_TRUSTS_LOSTNICK
, arg
);
50 * we need to erase this nick from the trusthost list
51 * stored in the ->nextbytrust (ext) pointers in each nick
54 for(np
=th
->users
,lp
=NULL
;np
;lp
=np
,np
=nextbytrust(np
)) {
59 setnextbytrust(lp
, nextbytrust(np
));
61 th
->users
= nextbytrust(np
);
68 static void __lostnick(int hooknum
, void *arg
) {
69 trusts_lostnick(arg
, 0);
72 static void __counthandler(int hooknum
, void *arg
) {
73 time_t t
= time(NULL
);
75 trusthost
*th
= gettrusthost((nick
*)args
[0]);
82 tg
->lastseen
= th
->lastseen
= t
;
83 if(hooknum
== HOOK_TRUSTS_NEWNICK
) {
85 if(th
->count
> th
->maxusage
)
86 th
->maxusage
= th
->count
;
89 if(tg
->count
> tg
->maxusage
)
90 tg
->maxusage
= tg
->count
;
97 static int hooksregistered
;
99 static void __dbloaded(int hooknum
, void *arg
) {
107 registerhook(HOOK_NICK_NEWNICK
, __newnick
);
108 registerhook(HOOK_NICK_LOSTNICK
, __lostnick
);
110 /* registerhook(HOOK_TRUSTS_NEWNICK, __counthandler);
111 registerhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
114 /* we could do it by host, but hosts and ips are not bijective :( */
115 for(i
=0;i
<NICKHASHSIZE
;i
++)
116 for(np
=nicktable
[i
];np
;np
=np
->next
)
120 static void __dbclosed(int hooknum
, void *arg
) {
125 deregisterhook(HOOK_NICK_NEWNICK
, __newnick
);
126 deregisterhook(HOOK_NICK_LOSTNICK
, __lostnick
);
129 deregisterhook(HOOK_TRUSTS_NEWNICK, __counthandler);
130 deregisterhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
134 void trusts_deregisterevents(void) {
135 deregisterhook(HOOK_TRUSTS_DB_LOADED
, __dbloaded
);
136 deregisterhook(HOOK_TRUSTS_DB_CLOSED
, __dbclosed
);
141 void trusts_registerevents(void) {
142 registerhook(HOOK_TRUSTS_DB_LOADED
, __dbloaded
);
143 registerhook(HOOK_TRUSTS_DB_CLOSED
, __dbclosed
);