]>
Commit | Line | Data |
---|---|---|
c426783d P |
1 | #include "../core/schedule.h" |
2 | #include "../lib/irc_string.h" | |
3 | #include "../localuser/localuserchannel.h" | |
4 | #include "../control/control.h" | |
5 | ||
6 | int nc_cmd_nodecount(void *source, int cargc, char **cargv); | |
7 | ||
8 | void _init(void) { | |
9 | registercontrolcmd("nodecount", 10, 1, &nc_cmd_nodecount); | |
10 | } | |
11 | ||
12 | void _fini(void) { | |
13 | deregistercontrolcmd("nodecount", &nc_cmd_nodecount); | |
14 | } | |
15 | ||
16 | int 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 |