]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/newsearch/interface.c
New module: nickwatch
[irc/quakenet/newserv.git] / chanserv / newsearch / interface.c
1 #include "../chanserv.h"
2 #include "../../lib/stringbuf.h"
3 #include "chanserv_newsearch.h"
4 #include <stdio.h>
5 #include <stdarg.h>
6
7 static char *concatargs(int cargc, char **cargv) {
8 static char bigbuf[1024];
9 StringBuf b;
10 int i;
11
12 sbinit(&b, bigbuf, sizeof(bigbuf));
13 for(i=0;i<cargc;i++) {
14 sbaddstr(&b, cargv[i]);
15 sbaddchar(&b, ' ');
16 }
17 sbterminate(&b);
18
19 return bigbuf;
20 }
21
22 static void chanservmessagewrapper(nick *np, char *format, ...) {
23 char buf[1024];
24 va_list ap;
25
26 va_start(ap, format);
27 vsnprintf(buf, sizeof(buf), format, ap);
28 va_end(ap);
29
30 chanservsendmessage(np, "%s", buf);
31 }
32
33 static void chanservwallwrapper(int level, char *format, ...) {
34 char buf[1024];
35 va_list ap;
36
37 va_start(ap, format);
38 vsnprintf(buf, sizeof(buf), format, ap);
39 va_end(ap);
40
41 chanservwallmessage("%s", buf);
42 }
43
44 int cs_donicksearch(void *source, int cargc, char **cargv) {
45 nick *sender=source;
46
47 if (cargc < 1) {
48 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "nicksearch");
49 return CMD_ERROR;
50 }
51
52 cs_log(source, "NICKSEARCH %s", concatargs(cargc, cargv));
53 do_nicksearch_real(chanservmessagewrapper, chanservwallwrapper, source, cargc, cargv);
54
55 chanservstdmessage(sender, QM_DONE);
56 return CMD_OK;
57 }
58
59 int cs_dochansearch(void *source, int cargc, char **cargv) {
60 nick *sender=source;
61
62 if (cargc < 1) {
63 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "chansearch");
64 return CMD_ERROR;
65 }
66
67 cs_log(source, "CHANSEARCH %s", concatargs(cargc, cargv));
68 do_chansearch_real(chanservmessagewrapper, chanservwallwrapper, source, cargc, cargv);
69
70 chanservstdmessage(sender, QM_DONE);
71 return CMD_OK;
72 }
73
74 int cs_dousersearch(void *source, int cargc, char **cargv) {
75 nick *sender=source;
76
77 if (cargc < 1) {
78 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "usersearch");
79 return CMD_ERROR;
80 }
81
82 cs_log(source, "USERSEARCH %s", concatargs(cargc, cargv));
83 do_usersearch_real(chanservmessagewrapper, chanservwallwrapper, source, cargc, cargv);
84
85 chanservstdmessage(sender, QM_DONE);
86 return CMD_OK;
87 }
88
89 void showheader(void *source, void *header) {
90 long iheader = (long)header;
91
92 chanservstdmessage(source, iheader);
93 }
94
95 int cs_dospewemail(void *source, int cargc, char **cargv) {
96 searchASTExpr tree;
97
98 if(cargc < 1) {
99 chanservstdmessage(source, QM_NOTENOUGHPARAMS, "spewemail");
100 return CMD_ERROR;
101 }
102
103 cs_log(source, "SPEWEMAIL %s", cargv[0]);
104
105 tree = NSASTNode(match_parse, NSASTNode(qemail_parse), NSASTLiteral(cargv[0]));
106 return ast_usersearch(&tree, chanservmessagewrapper, source, chanservwallwrapper, printauth, showheader, (void *)QM_SPEWHEADER, 2000, NULL);
107 }
108
109 int cs_dospewdb(void *source, int cargc, char **cargv) {
110 searchASTExpr tree;
111
112 if(cargc < 1) {
113 chanservstdmessage(source, QM_NOTENOUGHPARAMS, "spewdb");
114 return CMD_ERROR;
115 }
116
117 cs_log(source, "SPEWDB %s", cargv[0]);
118
119 tree =
120 NSASTNode(or_parse,
121 NSASTNode(match_parse, NSASTNode(qusername_parse), NSASTLiteral(cargv[0])),
122 NSASTNode(match_parse, NSASTNode(qsuspendreason_parse), NSASTLiteral(cargv[0])),
123 NSASTNode(match_parse, NSASTNode(qemail_parse), NSASTLiteral(cargv[0])),
124 NSASTNode(match_parse, NSASTNode(qlasthost_parse), NSASTLiteral(cargv[0])),
125 );
126 return ast_usersearch(&tree, chanservmessagewrapper, source, chanservwallwrapper, printauth, showheader, (void *)QM_SPEWHEADER, 2000, NULL);
127 }
128