]> jfr.im git - irc/quakenet/newserv.git/blob - trojanscan/trojanscan.h
Merge pull request #132 from retropc/lua_country
[irc/quakenet/newserv.git] / trojanscan / trojanscan.h
1 #ifndef __trojanscan_H
2 #define __trojanscan_H
3
4 #include "../core/config.h"
5 #include "../core/schedule.h"
6 #include "../lib/irc_string.h"
7 #include "../lib/splitline.h"
8 #include "../lib/strlfunc.h"
9 #include "../localuser/localuserchannel.h"
10
11 #include <assert.h>
12 #include <mysql.h>
13 #include <pcre.h>
14 #include <stdarg.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <ctype.h>
18 #include <strings.h>
19
20 #define TROJANSCAN_VERSION "2.73"
21
22 #define TROJANSCAN_CLONE_MAX 75
23 #define TROJANSCAN_WATCHCLONE_MAX 75
24 #define TROJANSCAN_CLONE_TOTAL TROJANSCAN_CLONE_MAX + TROJANSCAN_WATCHCLONE_MAX
25
26 #define TROJANSCAN_DEFAULT_MAXCHANS 750
27 #define TROJANSCAN_DEFAULT_CYCLETIME 16000
28
29 #define TROJANSCAN_DEFAULT_MINIMUM_CHANNEL_SIZE 150 /* 100 */
30
31 #define TROJANSCAN_NICKCHANGE_ODDS 32
32 #define TROJANSCAN_INVISIBLE_ODDS 8
33
34 #define TROJANSCAN_DEFAULT_PARTTIME 2600
35 #define TROJANSCAN_DEFAULT_MAXUSERS 20
36
37 #define TROJANSCAN_POOL_REGENERATION 3600
38
39 #define TROJANSCAN_HOST_POOL 0x00
40 #define TROJANSCAN_STEAL_HOST 0x01
41
42 #define TROJANSCAN_EPIDEMIC_MULTIPLIER 20
43
44 #define TROJANSCAN_HOST_MODE TROJANSCAN_STEAL_HOST
45
46 #define TROJANSCAN_MAX_CLONE_COUNT 3
47
48 #define TROJANSCAN_CAT "./trojanscan/cat.txt"
49
50 #define TROJANSCAN_CHANNEL "#qnet.trj"
51 #define TROJANSCAN_OPERCHANNEL "#twilightzone"
52
53 #define TROJANSCAN_URL_PREFIX "http://trojanscan.quakenet.org/?"
54
55 #define TROJANSCAN_MMAX(a, b) a > b ? a : b
56 #define TROJANSCAN_MMIN(a, b) a > b ? b : a
57
58 #define TROJANSCAN_NORMAL_CLONES 0
59 #define TROJANSCAN_WATCH_CLONES 1
60
61 #define TROJANSCAN_QUERY_TEMP_BUF_SIZE 1040
62 #define TROJANSCAN_QUERY_BUF_SIZE 5040
63
64 #define TROJANSCAN_FIRST_OFFENSE 12
65 #define TROJANSCAN_IPLEN 20
66
67 #define TROJANSCAN_VERSION_DETECT "\001VERSION"
68 #define TROJANSCAN_DEFAULT_VERSION_REPLY "mIRC v6.35 Khaled Mardam-Bey"
69
70 typedef struct trojanscan_clones {
71 int remaining, sitting, index;
72 nick *clone;
73 } trojanscan_clones;
74
75 typedef struct trojanscan_channels {
76 sstring *name;
77 unsigned exempt : 1;
78 } trojanscan_channels;
79
80 typedef struct trojanscan_worms {
81 int id;
82 sstring *name;
83 unsigned glinehost : 1;
84 unsigned glineuser : 1;
85 unsigned monitor : 1;
86 unsigned datalen : 1;
87 unsigned hitpriv : 1;
88 unsigned hitchans : 1;
89 unsigned epidemic : 1;
90 } trojanscan_worms;
91
92 typedef struct trojanscan_phrases {
93 int id;
94 pcre *phrase;
95 pcre_extra *hint;
96 trojanscan_worms *worm;
97 } trojanscan_phrases;
98
99 typedef struct trojanscan_db {
100 int total_channels, total_phrases, total_worms, detections, glines;
101 trojanscan_channels *channels;
102 trojanscan_phrases *phrases;
103 trojanscan_worms *worms;
104 } trojanscan_db;
105
106 typedef struct trojanscan_prechannels {
107 sstring *name;
108 int size;
109 struct trojanscan_clones *watch_clone;
110 struct trojanscan_prechannels *next;
111 unsigned exempt : 1;
112 } trojanscan_prechannels;
113
114 typedef struct trojanscan_realchannels {
115 channel *chan;
116 struct trojanscan_clones *clone;
117 struct trojanscan_realchannels *next;
118 void *schedule;
119 char donotpart;
120 int kickedout;
121 } trojanscan_realchannels;
122
123 typedef struct trojanscan_userflags {
124 unsigned unauthed : 1;
125 unsigned cat : 1;
126 unsigned website : 1;
127 unsigned staff : 1;
128 unsigned teamleader : 1;
129 unsigned developer : 1;
130 } trojanscan_userflags;
131
132 typedef union trojanscan_userlevel {
133 char number;
134 struct trojanscan_userflags values;
135 } trojanscan_userlevel;
136
137 typedef struct trojanscan_flagmodification {
138 char addition;
139 char flag;
140 } trojanscan_flagmodification;
141
142 typedef struct trojanscan_rejoinlist {
143 sstring *channel;
144 trojanscan_clones *clone;
145 void *schedule;
146 struct trojanscan_realchannels *rp;
147 struct trojanscan_rejoinlist *next;
148 } trojanscan_rejoinlist;
149
150 typedef struct trojanscan_inchannel {
151 sstring *channel;
152 struct trojanscan_clones *watch_clone;
153 } trojanscan_inchannel;
154
155 typedef struct trojanscan_templist {
156 struct trojanscan_clones *watch_clone;
157 char active; /* required as copy of trojanscan_inchannel could be nil unfortunatly */
158 } trojanscan_templist;
159
160 typedef MYSQL_RES trojanscan_database_res;
161 typedef MYSQL_ROW trojanscan_database_row;
162 typedef MYSQL trojanscan_database_connection;
163
164 #define TROJANSCAN_FLAG_MASK "%s%s%s%s%s"
165
166 #define TrojanscanIsCat(x) (x.values.cat)
167 #define TrojanscanIsWebsite(x) (x.values.website)
168 #define TrojanscanIsStaff(x) (x.values.staff)
169 #define TrojanscanIsDeveloper(x) (x.values.developer)
170 #define TrojanscanIsTeamLeader(x) (x.values.teamleader)
171
172 #define TrojanscanIsLeastTeamLeader(x) ((TrojanscanIsTeamLeader(x) | TrojanscanIsDeveloper(x)))
173 #define TrojanscanIsLeastWebsite(x) ((TrojanscanIsWebsite(x) | TrojanscanIsDeveloper(x)))
174 #define TrojanscanIsLeastStaff(x) ((TrojanscanIsStaff(x) | TrojanscanIsTeamLeader(x) | TrojanscanIsDeveloper(x)))
175
176 #define TrojanscanFlagsInfo(flags) TrojanscanIsDeveloper(flags) ? "d" : "", TrojanscanIsTeamLeader(flags) ? "t" : "", TrojanscanIsStaff(flags) ? "s" : "", TrojanscanIsWebsite(flags) ? "w" : "", TrojanscanIsCat(flags) ? "c" : ""
177
178 #define TROJANSCAN_ACL_UNAUTHED 0x01
179 #define TROJANSCAN_ACL_STAFF 0x02
180 #define TROJANSCAN_ACL_OPER 0x04
181 #define TROJANSCAN_ACL_DEVELOPER 0x08
182 #define TROJANSCAN_ACL_CAT 0x10
183 #define TROJANSCAN_ACL_WEBSITE 0x20
184 #define TROJANSCAN_ACL_TEAMLEADER 0x40
185
186 int trojanscan_status(void *sender, int cargc, char **cargv);
187 int trojanscan_showcommands(void *sender, int cargc, char **cargv);
188 int trojanscan_help(void *sender, int cargc, char **cargv);
189 int trojanscan_hello(void *sender, int cargc, char **cargv);
190 int trojanscan_userjoin(void *sender, int cargc, char **cargv);
191 int trojanscan_changelev(void *sender, int cargc, char **cargv);
192 int trojanscan_deluser(void *sender, int cargc, char **cargv);
193 int trojanscan_rehash(void *sender, int cargc, char **cargv);
194 int trojanscan_mew(void *sender, int cargc, char **cargv);
195 int trojanscan_cat(void *sender, int cargc, char **cargv);
196 int trojanscan_reschedule(void *sender, int cargc, char **cargv);
197 int trojanscan_chanlist(void *sender, int cargc, char **cargv);
198 int trojanscan_whois(void *sender, int cargc, char **cargv);
199 int trojanscan_listusers(void *sender, int cargc, char **cargv);
200
201 char trojanscan_getmtfrommessagetype(int input);
202
203 void trojanscan_handlemessages(nick *target, int messagetype, void **args);
204 void trojanscan_clonehandlemessages(nick *target, int messagetype, void **args);
205 void trojanscan_mainchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2)));
206 void trojanscan_peonchanmsg(char *message, ...) __attribute__ ((format (printf, 1, 2)));
207 void trojanscan_reply(nick *target, char *message, ... ) __attribute__ ((format (printf, 2, 3)));
208 void trojanscan_privmsg_chan_or_nick(channel *cp, nick *np, char *text, ...) __attribute__ ((format (printf, 3, 4)));
209
210 void trojanscan_connect(void *arg);
211 void trojanscan_dojoin(void *arg);
212 void trojanscan_dopart(void *arg);
213 void trojanscan_donickchange(void *arg);
214 void trojanscan_registerclones(void *arg);
215 void trojanscan_fill_channels(void *arg);
216 void trojanscan_rehash_schedule(void *arg);
217 void trojanscan_rejoin_channel(void *arg);
218
219 void trojanscan_read_database(int first_time);
220 void trojanscan_free_database(void);
221
222 struct trojanscan_realchannels *trojanscan_allocaterc(char *chan);
223 void trojanscan_join(trojanscan_realchannels *rc);
224 struct trojanscan_clones *trojanscan_selectclone(char type);
225 void trojanscan_free_channels(void);
226 int trojanscan_add_ll(struct trojanscan_prechannels **head, struct trojanscan_prechannels *newitem);
227 int trojanscan_keysort(const void *v1, const void *v2);
228
229 int trojanscan_user_level_by_authname(char *authname);
230 int trojanscan_user_id_by_authname(char *authname);
231 struct trojanscan_worms *trojanscan_find_worm_by_id(int id);
232 char *trojanscan_getuser(int id);
233
234 int trojanscan_minmaxrand(float min, float max);
235
236 int trojanscan_database_connect(char *dbhost, char *dbuser, char *dbpass, char *db, unsigned int port);
237 void trojanscan_database_close(void);
238 void trojanscan_database_escape_string(char *dest, char *source, size_t length);
239 int trojanscan_database_query(char *format, ...) __attribute__ ((format (printf, 1, 2)));
240 int trojanscan_database_num_rows(trojanscan_database_res *res);
241 trojanscan_database_res *trojanscan_database_store_result();
242 trojanscan_database_row trojanscan_database_fetch_row(trojanscan_database_res *res);
243 void trojanscan_database_free_result(trojanscan_database_res *res);
244 nick *trojanscan_selectuser(void);
245
246 void trojanscan_watch_clone_update(struct trojanscan_prechannels *hp, int count);
247
248 sstring *trojanscan_getsstring(char *string, int length);
249 int trojanscan_strip_codes(char *buf, size_t max, char *original);
250 int trojanscan_isip(char *host);
251
252 struct trojanscan_clones trojanscan_swarm[TROJANSCAN_CLONE_TOTAL];
253 struct trojanscan_db trojanscan_database;
254
255 struct trojanscan_inchannel *trojanscan_chans = NULL;
256
257 unsigned int trojanscan_cycletime, trojanscan_maxchans, trojanscan_part_time, trojanscan_activechans = 0, trojanscan_channumber = 0, trojanscan_maxusers;
258 int trojanscan_watchclones_count = 0;
259
260 int trojanscan_errorcode;
261 struct trojanscan_realchannels *trojanscan_realchanlist;
262
263 void *trojanscan_schedule, *trojanscan_connect_schedule;
264 void *trojanscan_initialschedule, *trojanscan_rehashschedule, *trojanscan_cloneschedule;
265
266 int trojanscan_minchansize, trojanscan_min_hosts;
267 int trojanscan_swarm_created = 0;
268
269 nick *trojanscan_nick;
270 CommandTree *trojanscan_cmds;
271 trojanscan_database_connection trojanscan_sql;
272 struct trojanscan_rejoinlist *trojanscan_schedulerejoins = NULL;
273
274 #endif