#include "../server/server.h"
#include "../parser/parser.h"
#include "../lib/version.h"
+#include "../core/nsmalloc.h"
+
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
sstring *nickextnames[MAXNICKEXTS];
sstring *nodeextnames[PATRICIA_MAXSLOTS];
patricia_tree_t *iptree;
-sstring *authnameextnames[MAXAUTHNAMEEXTS];
void nickstats(int hooknum, void *arg);
iptree = patricia_new_tree(PATRICIA_MAXBITS);
}
+void _fini() {
+ nsfreeall(POOL_NICK);
+
+ /* Free the hooks */
+ deregisterhook(HOOK_SERVER_NEWSERVER,&handleserverchange);
+ deregisterhook(HOOK_SERVER_LOSTSERVER,&handleserverchange);
+ deregisterhook(HOOK_CORE_STATSREQUEST,&nickstats);
+
+ /* And our server handlers */
+ deregisterserverhandler("N",&handlenickmsg);
+ deregisterserverhandler("D",&handlekillmsg);
+ deregisterserverhandler("Q",&handlequitmsg);
+ deregisterserverhandler("M",&handleusermodemsg);
+ deregisterserverhandler("W",&handlewhoismsg);
+ deregisterserverhandler("AC",&handleaccountmsg);
+ deregisterserverhandler("R",&handlestatsmsg);
+}
+
/*
* This function handles servers appearing and disappearing.
* For a new server, the client table is allocated.
*/
void handleserverchange(int hooknum, void *arg) {
- int servernum;
+ long servernum;
int i;
- servernum=(int)arg;
+ servernum=(long)arg;
switch(hooknum) {
case HOOK_SERVER_NEWSERVER:
- servernicks[servernum]=(nick **)malloc((serverlist[servernum].maxusernum+1)*sizeof(nick **));
+ servernicks[servernum]=(nick **)nsmalloc(POOL_NICK,(serverlist[servernum].maxusernum+1)*sizeof(nick **));
memset(servernicks[servernum],0,(serverlist[servernum].maxusernum+1)*sizeof(nick **));
break;
}
}
- if ((int)arg>5) {
+ if ((long)arg>5) {
/* Full stats */
sprintf(buf,"Nick : %6d nicks (HASH: %6d/%6d, chain %3d)",total,buckets,NICKHASHSIZE,maxchain);
- } else if ((int)arg>2) {
+ } else if ((long)arg>2) {
sprintf(buf,"Nick : %6d users on network.",total);
}
- if ((int)arg>2) {
+ if ((long)arg>2) {
triggerhook(HOOK_CORE_STATSREPLY,buf);
}
}
}
}
-int registerauthnameext(const char *name) {
- int i;
-
- if (findauthnameext(name)!=-1) {
- Error("nick",ERR_WARNING,"Tried to register duplicate authname extension %s",name);
- return -1;
- }
-
- for (i=0;i<MAXAUTHNAMEEXTS;i++) {
- if (authnameextnames[i]==NULL) {
- authnameextnames[i]=getsstring(name,100);
- return i;
- }
- }
-
- Error("nick",ERR_WARNING,"Tried to register too many authname extensions: %s",name);
- return -1;
-}
-
-int findauthnameext(const char *name) {
- int i;
-
- for (i=0;i<MAXAUTHNAMEEXTS;i++) {
- if (authnameextnames[i]!=NULL && !ircd_strcmp(name,authnameextnames[i]->content)) {
- return i;
- }
- }
-
- return -1;
-}
-
-void releaseauthnameext(int index) {
- int i;
- authname *anp;
-
- freesstring(authnameextnames[index]);
- authnameextnames[index]=NULL;
-
- for (i=0;i<AUTHNAMEHASHSIZE;i++) {
- for (anp=authnametable[i];anp;anp=anp->next) {
- anp->exts[index]=NULL;
- }
- }
-}
-
/* visiblehostmask
* Produces the "apparent" hostmask as seen by network users.
*/