5 #include "../core/nsmalloc.h"
8 unsigned long trusts_lasttrustgroupid
;
9 unsigned long trusts_lasttrusthostid
;
10 unsigned long trusts_lasttrustblockid
;
14 static void trusts_status(int hooknum
, void *arg
);
15 void trustsfinishinit(int hooknum
, void *arg
);
20 tgh_ext
= registernodeext("trusthost");
22 Error("trusts", ERR_FATAL
, "Could not register a required node extension");
26 if ( !trusts_load_db()) {
30 registerhook(HOOK_TRUSTS_DBLOADED
, trustsfinishinit
);
33 trustsfinishinit(HOOK_TRUSTS_DBLOADED
, NULL
);
36 void trustsfinishinit(int hooknum
, void *arg
) {
37 Error("trusts",ERR_INFO
,"Database loaded, finishing initialisation.");
39 deregisterhook(HOOK_TRUSTS_DBLOADED
, trustsfinishinit
);
41 registerhook(HOOK_NICK_NEWNICK
, &trusts_hook_newuser
);
42 registerhook(HOOK_NICK_LOSTNICK
, &trusts_hook_lostuser
);
44 registerhook(HOOK_CORE_STATSREQUEST
, trusts_status
);
49 trustgroupidentcount_t
*t
;
51 for ( i
= 0; i
< TRUSTS_HASH_HOSTSIZE
; i
++ ) {
52 for ( thptr
= trusthostidtable
[i
]; thptr
; thptr
= thptr
-> nextbyid
) {
53 derefnode(iptree
,thptr
->node
);
56 releasenodeext(tgh_ext
);
58 if ( trusts_loaded
) {
59 deregisterhook(HOOK_NICK_NEWNICK
, &trusts_hook_newuser
);
60 deregisterhook(HOOK_NICK_LOSTNICK
, &trusts_hook_lostuser
);
62 deregisterhook(HOOK_CORE_STATSREQUEST
, trusts_status
);
65 for ( i
= 0; i
< TRUSTS_HASH_IDENTSIZE
; i
++ ) {
66 for ( t
= trustgroupidentcounttable
[i
]; t
; t
= t
-> next
) {
68 freesstring(t
->ident
);
77 nsfreeall(POOL_TRUSTS
);
80 void increment_trust_ipnode(patricia_node_t
*node
) {
81 patricia_node_t
*parent
;
82 trusthost_t
*tgh
= NULL
;
83 time_t curtime
= getnettime();
86 if(parent
->exts
&& parent
->exts
[tgh_ext
]) {
87 /* update the trusted hosts themselves */
88 tgh
= (trusthost_t
*)parent
->exts
[tgh_ext
];
89 tgh
->lastused
= curtime
;
90 if (tgh
->node
->usercount
> tgh
->maxused
) { tgh
->maxused
= tgh
->node
->usercount
; }
92 /* update the trustgroup itself */
93 tgh
->trustgroup
->currenton
++;
94 tgh
->trustgroup
->lastused
= curtime
;
95 if (tgh
->trustgroup
->currenton
> tgh
->trustgroup
->maxusage
) { tgh
->trustgroup
->maxusage
= tgh
->trustgroup
->currenton
; }
97 parent
= parent
->parent
;
101 void decrement_trust_ipnode(patricia_node_t
*node
) {
102 patricia_node_t
*parent
;
103 trusthost_t
*tgh
= NULL
;
104 time_t curtime
= getnettime();
108 if(parent
->exts
&& parent
->exts
[tgh_ext
]) {
109 tgh
= (trusthost_t
*)parent
->exts
[tgh_ext
];
110 tgh
->trustgroup
->currenton
--;
111 tgh
->lastused
= curtime
;
113 tgh
->trustgroup
->lastused
= curtime
;
115 parent
= parent
->parent
;
119 void trust_debug(char *format
, ...) {
122 channel
*debugcp
= findchannel("#qnet.trusts");
124 va_start(va
, format
);
125 vsnprintf(buf
, sizeof(buf
), format
, va
);
127 controlchanmsg(debugcp
,buf
);
131 static void trusts_status(int hooknum
, void *arg
) {
134 int tgcount
= 0, thcount
= 0;
135 trustgroup_t
*tg
; trusthost_t
* thptr
; int i
;
137 for ( i
= 0; i
< TRUSTS_HASH_GROUPSIZE
; i
++ ) {
138 for ( tg
= trustgroupidtable
[i
]; tg
; tg
= tg
-> nextbyid
) {
143 for ( i
= 0; i
< TRUSTS_HASH_HOSTSIZE
; i
++ ) {
144 for ( thptr
= trusthostidtable
[i
]; thptr
; thptr
= thptr
-> nextbyid
) {
148 snprintf(message
, sizeof(message
), "Trusts :%7d groups, %7d hosts", tgcount
, thcount
);
149 triggerhook(HOOK_CORE_STATSREPLY
, message
);