]>
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
);
20 setnextbytrust(sender
, th
->users
);
23 /* sucks we have to do this, at least until we get priority hooks */
24 __counthandler(HOOK_TRUSTS_NEWNICK
, sender
);
27 arg
[1] = (void *)(long)moving
;
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
);
43 __counthandler(HOOK_TRUSTS_LOSTNICK
, sender
);
46 arg
[1] = (void *)(long)moving
;
47 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
);
74 trusthost
*th
= gettrusthost((nick
*)arg
);
75 trustgroup
*tg
= th
->group
;
77 tg
->lastseen
= th
->lastseen
= t
;
78 if(hooknum
== HOOK_TRUSTS_NEWNICK
) {
80 if(th
->count
> th
->maxusage
)
81 th
->maxusage
= th
->count
;
84 if(tg
->count
> tg
->maxusage
)
85 tg
->maxusage
= tg
->count
;
92 static int hooksregistered
;
94 static void __dbloaded(int hooknum
, void *arg
) {
102 registerhook(HOOK_NICK_NEWNICK
, __newnick
);
103 registerhook(HOOK_NICK_LOSTNICK
, __lostnick
);
105 /* registerhook(HOOK_TRUSTS_NEWNICK, __counthandler);
106 registerhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
109 /* we could do it by host, but hosts and ips are not bijective :( */
110 for(i
=0;i
<NICKHASHSIZE
;i
++)
111 for(np
=nicktable
[i
];np
;np
=np
->next
)
115 static void __dbclosed(int hooknum
, void *arg
) {
120 deregisterhook(HOOK_NICK_NEWNICK
, __newnick
);
121 deregisterhook(HOOK_NICK_LOSTNICK
, __lostnick
);
124 deregisterhook(HOOK_TRUSTS_NEWNICK, __counthandler);
125 deregisterhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
129 void trusts_deregisterevents(void) {
130 deregisterhook(HOOK_TRUSTS_DB_LOADED
, __dbloaded
);
131 deregisterhook(HOOK_TRUSTS_DB_CLOSED
, __dbclosed
);
136 void trusts_registerevents(void) {
137 registerhook(HOOK_TRUSTS_DB_LOADED
, __dbloaded
);
138 registerhook(HOOK_TRUSTS_DB_CLOSED
, __dbclosed
);