+static int trusts_cmdtrustglinesuggest(void *source, int cargc, char **cargv) {
+ nick *sender = source;
+ char mask[512];
+ char *p, *user, *host;
+ struct irc_in_addr ip;
+ unsigned char bits;
+ int count;
+ glinebuf gbuf;
+ char creator[32];
+
+ if(cargc < 1)
+ return CMD_USAGE;
+
+ strncpy(mask, cargv[0], sizeof(mask));
+
+ p = strchr(mask, '@');
+
+ if(!p)
+ return CMD_USAGE;
+
+ user = mask;
+ host = p + 1;
+ *p = '\0';
+
+ if(!ipmask_parse(host, &ip, &bits)) {
+ controlreply(sender, "Invalid CIDR.");
+ return CMD_ERROR;
+ }
+
+ snprintf(creator, sizeof(creator), "#%s", sender->authname);
+
+ glinebufinit(&gbuf, 0);
+ glinebufaddbyip(&gbuf, user, &ip, 128, 0, creator, "Simulate", getnettime(), getnettime(), getnettime());
+ glinebufcounthits(&gbuf, &count, NULL);
+ glinebufspew(&gbuf, sender);
+ glinebufabort(&gbuf);
+
+ controlreply(sender, "Total hits: %d", count);
+
+ return CMD_OK;
+}
+
+static int trusts_cmdtrustspew(void *source, int cargc, char **cargv) {
+ nick *sender = source;
+ searchASTExpr tree;
+
+ if(cargc < 1)
+ return CMD_USAGE;
+
+ tree = NSASTNode(tgroup_parse, NSASTLiteral(cargv[0]));
+ return ast_nicksearch(&tree, controlreply, sender, NULL, printnick_channels, NULL, NULL, 2000);
+}
+