]>
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
) {
10 struct irc_in_addr ipaddress
;
12 ip_canonicalize_6to4(&ipaddress
, &sender
->p_ipaddr
);
14 if (irc_in_addr_is_ipv4(&ipaddress
)) {
15 host
= irc_in_addr_v4_to_int(&ipaddress
);
16 th
= th_getbyhost(host
);
20 settrusthost(sender
, th
);
22 setnextbytrust(sender
, NULL
);
24 setnextbytrust(sender
, th
->users
);
29 arg
[1] = (void *)(long)moving
;
31 /* sucks we have to do this, at least until we get priority hooks */
32 __counthandler(HOOK_TRUSTS_NEWNICK
, arg
);
34 triggerhook(HOOK_TRUSTS_NEWNICK
, arg
);
37 static void __newnick(int hooknum
, void *arg
) {
38 trusts_newnick(arg
, 0);
41 void trusts_lostnick(nick
*sender
, int moving
) {
43 trusthost
*th
= gettrusthost(sender
);
47 arg
[1] = (void *)(long)moving
;
49 __counthandler(HOOK_TRUSTS_LOSTNICK
, arg
);
50 triggerhook(HOOK_TRUSTS_LOSTNICK
, arg
);
56 * we need to erase this nick from the trusthost list
57 * stored in the ->nextbytrust (ext) pointers in each nick
60 for(np
=th
->users
,lp
=NULL
;np
;lp
=np
,np
=nextbytrust(np
)) {
65 setnextbytrust(lp
, nextbytrust(np
));
67 th
->users
= nextbytrust(np
);
74 static void __lostnick(int hooknum
, void *arg
) {
75 trusts_lostnick(arg
, 0);
78 static void __counthandler(int hooknum
, void *arg
) {
79 time_t t
= time(NULL
);
81 trusthost
*th
= gettrusthost((nick
*)args
[0]);
88 tg
->lastseen
= th
->lastseen
= t
;
89 if(hooknum
== HOOK_TRUSTS_NEWNICK
) {
91 if(th
->count
> th
->maxusage
)
92 th
->maxusage
= th
->count
;
95 if(tg
->count
> tg
->maxusage
)
96 tg
->maxusage
= tg
->count
;
103 static int hooksregistered
;
105 static void __dbloaded(int hooknum
, void *arg
) {
113 registerhook(HOOK_NICK_NEWNICK
, __newnick
);
114 registerhook(HOOK_NICK_LOSTNICK
, __lostnick
);
116 /* registerhook(HOOK_TRUSTS_NEWNICK, __counthandler);
117 registerhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
120 /* we could do it by host, but hosts and ips are not bijective :( */
121 for(i
=0;i
<NICKHASHSIZE
;i
++)
122 for(np
=nicktable
[i
];np
;np
=np
->next
)
126 static void __dbclosed(int hooknum
, void *arg
) {
131 deregisterhook(HOOK_NICK_NEWNICK
, __newnick
);
132 deregisterhook(HOOK_NICK_LOSTNICK
, __lostnick
);
135 deregisterhook(HOOK_TRUSTS_NEWNICK, __counthandler);
136 deregisterhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
140 void trusts_deregisterevents(void) {
141 deregisterhook(HOOK_TRUSTS_DB_LOADED
, __dbloaded
);
142 deregisterhook(HOOK_TRUSTS_DB_CLOSED
, __dbclosed
);
147 void trusts_registerevents(void) {
148 registerhook(HOOK_TRUSTS_DB_LOADED
, __dbloaded
);
149 registerhook(HOOK_TRUSTS_DB_CLOSED
, __dbclosed
);