#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 <ipv4|ipv6|cidr4|cidr6> [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 <ip|cidr>\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) {
int i = 0;
if (cargc < 1) {
- controlreply(np, "Syntax: dumptree <ipv4|ipv6|cidr4|cidr6>");
- return CMD_OK;
+ return CMD_USAGE;
}
if (ipmask_parse(cargv[0], &sin, &bits) == 0) {
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,
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?"-":":",
PATRICIA_WALK_END;
}
derefnode(iptree, head);
-
+ 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 <ipv4|ipv6|cidr4|cidr6>");
- return CMD_OK;
+ return CMD_USAGE;
}
if (ipmask_parse(cargv[0], &sin, &bits) == 0) {
head = refnode(iptree, &sin, bits);
- count = 0;
-
- PATRICIA_WALK(head, node) {
- count += node->usercount;
- } PATRICIA_WALK_END;
+ count = head->usercount;
derefnode(iptree, head);