#include <stdio.h>
#include <string.h>
-#define ALLOCUNIT 100
-
MODULE_VERSION("")
-patricianick_t *freepatricianicks;
int pnode_ext;
int pnick_ext;
registerhook(HOOK_NICK_NEWNICK, &pn_hook_newuser);
registerhook(HOOK_NICK_LOSTNICK, &pn_hook_lostuser);
- registerhook(HOOK_NICK_MOVENODE, &pn_hook_nodemoveuser);
registercontrolhelpcmd("nodeuserlist", NO_OPER, 1, &pn_cmd_nodeuserlist, "Usage: nodeuserlist <ipv4|ipv6|cidr4|cidr6>\nLists all users on a given IP address or CIDR range.");
}
deregisterhook(HOOK_NICK_NEWNICK, &pn_hook_newuser);
deregisterhook(HOOK_NICK_LOSTNICK, &pn_hook_lostuser);
- deregisterhook(HOOK_NICK_MOVENODE, &pn_hook_nodemoveuser);
deregistercontrolcmd("nodeuserlist", &pn_cmd_nodeuserlist);
}
patricianick_t *getpatricianick() {
- int i;
- patricianick_t *pnp;
-
- if (freepatricianicks==NULL) {
- freepatricianicks=(patricianick_t *)nsmalloc(POOL_PATRICIANICK, ALLOCUNIT*sizeof(patricianick_t));
- for(i=0;i<ALLOCUNIT-1;i++) {
- freepatricianicks[i].identhash[0]=(nick *)&(freepatricianicks[i+1]);
- }
- freepatricianicks[ALLOCUNIT-1].identhash[0]=NULL;
- }
+ patricianick_t *pnp = nsmalloc(POOL_PATRICIANICK, sizeof(patricianick_t));
- pnp=freepatricianicks;
- freepatricianicks=(patricianick_t *)pnp->identhash[0];
+ if (!pnp)
+ return NULL;
memset(pnp, 0, sizeof(patricianick_t));
return pnp;
}
void freepatricianick(patricianick_t *pnp) {
- pnp->identhash[0]=(nick *)freepatricianicks;
- freepatricianicks=pnp;
+ nsfree(POOL_PATRICIANICK, pnp);
}
void pn_hook_newuser(int hook, void *arg) {
deletenickfromnode(np->ipnode, np);
}
-void pn_hook_nodemoveuser(int hook, void *arg) {
- nick *np = ((void **)arg)[0];
- patricia_node_t *oldnode = ((void **)arg)[1];
-
- deletenickfromnode(oldnode, np);
- addnicktonode(np->ipnode, np);
-}
-
int pn_cmd_nodeuserlist(void *source, int cargc, char **cargv) {
nick *np=(nick *)source;
struct irc_in_addr sin;