X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/9451417624bf1da79af586c5fb1ba8c7047e620a..28aa186de14dc4fa7488866e70beb6ae933dde79:/patricia/patricia_commands.c diff --git a/patricia/patricia_commands.c b/patricia/patricia_commands.c index 6abc4214..a3322ed2 100644 --- a/patricia/patricia_commands.c +++ b/patricia/patricia_commands.c @@ -13,23 +13,35 @@ #include "../lib/irc_string.h" #include "../lib/splitline.h" #include "../control/control.h" +#include "../lib/version.h" + +MODULE_VERSION("") -FILE* dumpip_logfp; int nc_cmd_dumptree(void *source, int cargc, char **cargv); -int nc_cmd_nodecount(void *source, int cargc, char **cargv); +int nc_cmd_usercount(void *source, int cargc, char **cargv); void _init() { - if (!(dumpip_logfp = fopen("log/iplist", "w"))) - Error("dumpip", ERR_ERROR, "Failed to open log file!"); - registercontrolcmd("dumptree", 10, 2, &nc_cmd_dumptree); - registercontrolcmd("nodecount", 10, 1, &nc_cmd_nodecount); + registercontrolhelpcmd("dumptree", NO_DEVELOPER, 2, &nc_cmd_dumptree, + "Dumps diaganostic information on the patricia trie structure\n" + "Usage: dumptree [int]\n" + "Nodes with prefixies Only:\n" + "No arguments - default prints: ptr, ip\n" + "1: ptr, prefixptr, bitlen, refcount, ip\n" + "2: ptr, bit, usercount, ip\n" + "3: ptr, leftptr, rightptr, parentptr\n" + "4: ptr, ext0, ext1, ext2, ext3, ext4\n" + "All Notes (inc no prefixies):\n" + "10: ptr, prefixptr, ip\n" + "11: ptr, prefixbitlen, refcount,ip\n" + "12: ptr, bitlen, usercount, ip\n" + "13: ptr, leftptr, rightptr, parentptr\n" + "14: ptr, ext0, ext1, ext2, ext3, ext4"); + registercontrolhelpcmd("usercount", NO_OPER, 1, &nc_cmd_usercount, "Usage: usercount \nDisplays number of users on a given ipv4/6 or cidr4/6"); } void _fini() { - if (dumpip_logfp) - fclose(dumpip_logfp); deregistercontrolcmd("dumptree", &nc_cmd_dumptree); - deregistercontrolcmd("nodecount", &nc_cmd_nodecount); + deregistercontrolcmd("usercount", &nc_cmd_usercount); } int nc_cmd_dumptree(void *source, int cargc, char **cargv) { @@ -41,8 +53,7 @@ int nc_cmd_dumptree(void *source, int cargc, char **cargv) { int i = 0; if (cargc < 1) { - controlreply(np, "Syntax: dumptree "); - return CMD_OK; + return CMD_USAGE; } if (ipmask_parse(cargv[0], &sin, &bits) == 0) { @@ -71,7 +82,7 @@ int nc_cmd_dumptree(void *source, int cargc, char **cargv) { controlreply(np,"%p: bit: %d, usercount: %d, IP: %s", node, node->bit, node->usercount, IPtostr(node->prefix->sin)); break; case 3: - controlreply(np,"%p: L: %p, R: %p", node, node->l, node->r); + controlreply(np,"%p: L: %p, R: %p P: %p", node, node->l, node->r, node->parent); break; case 4: controlreply(np,"%p: 0: %p, 1: %p, 2: %p, 3: %p, 4: %p", node, @@ -104,7 +115,7 @@ int nc_cmd_dumptree(void *source, int cargc, char **cargv) { controlreply(np,"%p: bit: %d, usercount: %d, IP: %s", node, node->bit, node->usercount, node->prefix?IPtostr(node->prefix->sin):""); break; case 13: - controlreply(np,"%p: L: %p, R: %p", node, node->l, node->r); + controlreply(np,"%p: L: %p, R: %p P: %p", node, node->l, node->r, node->parent); break; case 14: controlreply(np,"%p%s 0: %p, 1: %p, 2: %p, 3: %p, 4: %p", node, node->prefix?"-":":", @@ -124,16 +135,15 @@ int nc_cmd_dumptree(void *source, int cargc, char **cargv) { return CMD_OK; } -int nc_cmd_nodecount(void *source, int cargc, char **cargv) { +int nc_cmd_usercount(void *source, int cargc, char **cargv) { nick *np = (nick *)source; struct irc_in_addr sin; unsigned char bits; - patricia_node_t *head, *node; + patricia_node_t *head; int count; if (cargc < 1) { - controlreply(np, "Syntax: nodecount "); - return CMD_OK; + return CMD_USAGE; } if (ipmask_parse(cargv[0], &sin, &bits) == 0) { @@ -144,11 +154,7 @@ int nc_cmd_nodecount(void *source, int cargc, char **cargv) { head = refnode(iptree, &sin, bits); - count = 0; - - PATRICIA_WALK(head, node) { - count += node->usercount; - } PATRICIA_WALK_END; + count = head->usercount; derefnode(iptree, head);