]> jfr.im git - irc/quakenet/newserv.git/blame - nodecount/nodecount.c
review - ops first
[irc/quakenet/newserv.git] / nodecount / nodecount.c
CommitLineData
c426783d
P
1#include "../core/schedule.h"
2#include "../lib/irc_string.h"
3#include "../localuser/localuserchannel.h"
4#include "../control/control.h"
5
6int nc_cmd_nodecount(void *source, int cargc, char **cargv);
7
8void _init(void) {
9 registercontrolcmd("nodecount", 10, 1, &nc_cmd_nodecount);
10}
11
12void _fini(void) {
13 deregistercontrolcmd("nodecount", &nc_cmd_nodecount);
14}
15
16int nc_cmd_nodecount(void *source, int cargc, char **cargv) {
17 nick *np = (nick *)source;
18 struct irc_in_addr sin;
19 unsigned char bits;
20 patricia_node_t *head, *node;
21 int count;
22
23 if (cargc < 1) {
24 controlreply(np, "Syntax: nodecount <IP>");
25 return CMD_OK;
26 }
27
28 if (ipmask_parse(cargv[0], &sin, &bits) == 0) {
29 controlreply(np, "Invalid mask.");
30
31 return CMD_OK;
32 }
33
34 head = refnode(iptree, &sin, bits);
35
36 count = 0;
37
38 PATRICIA_WALK(head, node) {
39 count += node->usercount;
40 } PATRICIA_WALK_END;
41
42 derefnode(iptree, head);
43
44 controlreply(np, "%d user(s) found.", count);
45
46 return CMD_OK;
47}
48