]> jfr.im git - irc/quakenet/newserv.git/blobdiff - patricia/patricia_commands.c
CHANSERV: add missing error statements.
[irc/quakenet/newserv.git] / patricia / patricia_commands.c
index 6abc4214f8ea442d357a3308be6d2ffaac99bc9e..a3322ed20fd6ecea92940deccd111ed6e4d6d379 100644 (file)
 #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) {
@@ -41,8 +53,7 @@ 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) {
@@ -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 <ipv4|ipv6|cidr4|cidr6>");
-    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);