X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/b9c52ee0c1d9833e8f2db99aa9cc383c9d339a28..9e5f0d797a0957172a9fd7b79f20115bc6fdcbd7:/trusts/trusts.c diff --git a/trusts/trusts.c b/trusts/trusts.c index d2f811aa..c34974bb 100644 --- a/trusts/trusts.c +++ b/trusts/trusts.c @@ -1,14 +1,19 @@ #include #include +#include "../lib/version.h" #include "../core/hooks.h" #include "../core/error.h" #include "../core/nsmalloc.h" +#include "../server/server.h" #include "trusts.h" +MODULE_VERSION(""); + void trusts_registerevents(void); void trusts_deregisterevents(void); static void statusfn(int, void *); +static void whoisfn(int, void *); static sstring *tgextnames[MAXTGEXTS]; @@ -30,6 +35,7 @@ void _init(void) { } registerhook(HOOK_CORE_STATSREQUEST, statusfn); + registerhook(HOOK_CONTROL_WHOISREQUEST, &whoisfn); trusts_registerevents(); } @@ -40,11 +46,52 @@ void _fini(void) { } deregisterhook(HOOK_CORE_STATSREQUEST, statusfn); + deregisterhook(HOOK_CONTROL_WHOISREQUEST, &whoisfn); trusts_deregisterevents(); nscheckfreeall(POOL_TRUSTS); } +static void whoisfn(int hooknum, void *arg) { + trusthost *th; + char message[512]; + nick *np = (nick *)arg; + + if(!np) + return; + + th = gettrusthost(np); + + if(!th) + return; + + snprintf(message, sizeof(message), "Trustgroup: %s (#%d)", th->group->name->content, th->group->id); + triggerhook(HOOK_CONTROL_WHOISREPLY, message); + + if (th->maxpernode > 0) { + snprintf(message, sizeof(message), "Node : %s", CIDRtostr(np->ipaddress, th->nodebits)); + triggerhook(HOOK_CONTROL_WHOISREPLY, message); + + patricia_node_t *node; + int usercount = 0; + + node = refnode(iptree, &(np->ipaddress), th->nodebits); + usercount = node->usercount; + derefnode(iptree, node); + + snprintf(message, sizeof(message), "Node : Usage: %d/%d", usercount, th->maxpernode); + triggerhook(HOOK_CONTROL_WHOISREPLY, message); + } + + if (th->group->trustedfor > 0) { + snprintf(message, sizeof(message), "Trusthost : %s", CIDRtostr(th->ip, th->bits)); + triggerhook(HOOK_CONTROL_WHOISREPLY, message); + + snprintf(message, sizeof(message), "Trustgroup : Usage: %d/%d", th->group->count, th->group->trustedfor); + triggerhook(HOOK_CONTROL_WHOISREPLY, message); + } +} + static void statusfn(int hooknum, void *arg) { if((long)arg > 10) { char message[100]; @@ -82,7 +129,7 @@ int registertgext(const char *name) { return -1; } - for(i=0;inext) tg->exts[index] = NULL; } + +int trusts_fullyonline(void) { + if(myhub == -1) + return 0; + + return serverlist[myhub].linkstate == LS_LINKED; +} +