#include <stdio.h>
+#include <string.h>
#include "../core/hooks.h"
#include "../core/error.h"
+#include "../core/nsmalloc.h"
+#include "../server/server.h"
#include "trusts.h"
-int trusts_loaddb(void);
-void trusts_closedb(void);
void trusts_registerevents(void);
void trusts_deregisterevents(void);
static void statusfn(int, void *);
-static int loaded, unloaded;
+static sstring *tgextnames[MAXTGEXTS];
int trusts_thext, trusts_nextuserext;
+int trustsdbloaded;
void _init(void) {
trusts_thext = registernickext("trustth");
return;
}
- if(!trusts_loaddb())
- return;
- loaded = 1;
-
registerhook(HOOK_CORE_STATSREQUEST, statusfn);
trusts_registerevents();
}
-void trusts_unload(void) {
- if(unloaded)
- return;
-
- unloaded = 1;
-
+void _fini(void) {
if(trusts_thext != -1) {
releasenickext(trusts_thext);
releasenickext(trusts_nextuserext);
}
- if(loaded) {
- deregisterhook(HOOK_CORE_STATSREQUEST, statusfn);
- trusts_deregisterevents();
- }
+ deregisterhook(HOOK_CORE_STATSREQUEST, statusfn);
+ trusts_deregisterevents();
- trusts_closedb();
-}
-
-void _fini(void) {
- trusts_unload();
+ nscheckfreeall(POOL_TRUSTS);
}
static void statusfn(int hooknum, void *arg) {
triggerhook(HOOK_CORE_STATSREPLY, message);
}
}
+
+int findtgext(const char *name) {
+ int i;
+
+ for(i=0;i<MAXTGEXTS;i++)
+ if(tgextnames[i] && !strcmp(name, tgextnames[i]->content))
+ return i;
+
+ return -1;
+}
+
+int registertgext(const char *name) {
+ int i;
+
+ if(findtgext(name) != -1) {
+ Error("trusts", ERR_WARNING, "Tried to register duplicate trust group extension: %s.", name);
+ return -1;
+ }
+
+ for(i=0;i<MAXNICKEXTS;i++) {
+ if(!tgextnames[i]) {
+ tgextnames[i] = getsstring(name, 100);
+ return i;
+ }
+ }
+
+ Error("trusts", ERR_WARNING, "Tried to register too many trust group extensions: %s.", name);
+ return -1;
+}
+
+void releasetgext(int index) {
+ trustgroup *tg;
+
+ freesstring(tgextnames[index]);
+ tgextnames[index] = NULL;
+
+ for(tg=tglist;tg;tg=tg->next)
+ tg->exts[index] = NULL;
+}
+
+int trusts_fullyonline(void) {
+ if(myhub == -1)
+ return 0;
+
+ return serverlist[myhub].linkstate == LS_LINKED;
+}
+