5 #include "../core/nsmalloc.h"
10 unsigned long trusts_lasttrustgroupid
;
11 unsigned long trusts_lasttrusthostid
;
12 unsigned long trusts_lasttrustblockid
;
16 static void trusts_status(int hooknum
, void *arg
);
17 void trustsfinishinit(int hooknum
, void *arg
);
22 tgh_ext
= registernodeext("trusthost");
24 Error("trusts", ERR_FATAL
, "Could not register a required node extension (trusthost)");
28 tgb_ext
= registernodeext("trustblock");
30 Error("trusts", ERR_FATAL
, "Could not register a required node extension (trustblock)");
34 if ( !trusts_load_db()) {
38 registerhook(HOOK_TRUSTS_DBLOADED
, trustsfinishinit
);
41 trustsfinishinit(HOOK_TRUSTS_DBLOADED
, NULL
);
44 void trustsfinishinit(int hooknum
, void *arg
) {
45 Error("trusts",ERR_INFO
,"Database loaded, finishing initialisation.");
47 deregisterhook(HOOK_TRUSTS_DBLOADED
, trustsfinishinit
);
49 registerhook(HOOK_NICK_NEWNICK
, &trusts_hook_newuser
);
50 registerhook(HOOK_NICK_LOSTNICK
, &trusts_hook_lostuser
);
52 registerhook(HOOK_CORE_STATSREQUEST
, trusts_status
);
57 trustgroupidentcount_t
*t
;
60 for ( i
= 0; i
< TRUSTS_HASH_HOSTSIZE
; i
++ ) {
61 for ( thptr
= trusthostidtable
[i
]; thptr
; thptr
= thptr
-> nextbyid
) {
62 derefnode(iptree
,thptr
->node
);
66 releasenodeext(tgh_ext
);
68 releasenodeext(tgb_ext
);
70 if ( trusts_loaded
) {
71 deregisterhook(HOOK_NICK_NEWNICK
, &trusts_hook_newuser
);
72 deregisterhook(HOOK_NICK_LOSTNICK
, &trusts_hook_lostuser
);
74 deregisterhook(HOOK_CORE_STATSREQUEST
, trusts_status
);
77 for ( i
= 0; i
< TRUSTS_HASH_IDENTSIZE
; i
++ ) {
78 for ( t
= trustgroupidentcounttable
[i
]; t
; t
= t
-> next
) {
80 freesstring(t
->ident
);
91 nsfreeall(POOL_TRUSTS
);
94 void increment_trust_ipnode(patricia_node_t
*node
) {
95 patricia_node_t
*parent
;
96 trusthost_t
*tgh
= NULL
;
97 time_t curtime
= getnettime();
100 if(parent
->exts
&& parent
->exts
[tgh_ext
]) {
101 /* update the trusted hosts themselves */
102 tgh
= (trusthost_t
*)parent
->exts
[tgh_ext
];
103 tgh
->lastused
= curtime
;
104 if (tgh
->node
->usercount
> tgh
->maxused
) { tgh
->maxused
= tgh
->node
->usercount
; }
106 /* update the trustgroup itself */
107 tgh
->trustgroup
->currenton
++;
108 tgh
->trustgroup
->lastused
= curtime
;
109 if (tgh
->trustgroup
->currenton
> tgh
->trustgroup
->maxusage
) { tgh
->trustgroup
->maxusage
= tgh
->trustgroup
->currenton
; }
111 parent
= parent
->parent
;
115 void decrement_trust_ipnode(patricia_node_t
*node
) {
116 patricia_node_t
*parent
;
117 trusthost_t
*tgh
= NULL
;
118 time_t curtime
= getnettime();
122 if(parent
->exts
&& parent
->exts
[tgh_ext
]) {
123 tgh
= (trusthost_t
*)parent
->exts
[tgh_ext
];
124 tgh
->trustgroup
->currenton
--;
125 tgh
->lastused
= curtime
;
127 tgh
->trustgroup
->lastused
= curtime
;
129 parent
= parent
->parent
;
133 void trust_debug(char *format
, ...) {
136 channel
*debugcp
= findchannel("#qnet.trusts");
138 va_start(va
, format
);
139 vsnprintf(buf
, sizeof(buf
), format
, va
);
141 controlchanmsg(debugcp
,buf
);
145 static void trusts_status(int hooknum
, void *arg
) {
148 int tgcount
= 0, thcount
= 0;
149 trustgroup_t
*tg
; trusthost_t
* thptr
; int i
;
151 for ( i
= 0; i
< TRUSTS_HASH_GROUPSIZE
; i
++ ) {
152 for ( tg
= trustgroupidtable
[i
]; tg
; tg
= tg
-> nextbyid
) {
157 for ( i
= 0; i
< TRUSTS_HASH_HOSTSIZE
; i
++ ) {
158 for ( thptr
= trusthostidtable
[i
]; thptr
; thptr
= thptr
-> nextbyid
) {
162 snprintf(message
, sizeof(message
), "Trusts :%7d groups, %7d hosts", tgcount
, thcount
);
163 triggerhook(HOOK_CORE_STATSREPLY
, message
);