1 /* spamserv.h - anti spam service
\r
2 * Copyright 2004 feigling
\r
4 * This program is free software; you can redistribute it and/or modify
\r
5 * it under the terms of the GNU General Public License as published by
\r
6 * the Free Software Foundation; either version 2 of the License, or
\r
7 * (at your option) any later version. Important limitations are
\r
8 * listed in the COPYING file that accompanies this software.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU General Public License for more details.
\r
15 * You should have received a copy of the GNU General Public License
\r
16 * along with this program; if not, email srvx-maintainers@srvx.net.
\r
18 * $Id: spamserv.h,v 1.3 2004/06/27 22:20:00 feigling Exp $
\r
24 #ifdef HAVE_ARPA_INET_H
\r
25 #include <arpa/inet.h>
\r
28 /***********************************************/
\r
30 /***********************************************/
\r
40 #define CHAN_INFO_SIZE (ci_Max + 1)
\r
41 #define CHAN_INFO_DEFAULT "bls"
\r
43 #define CHAN_SPAMSCAN 0x00000001
\r
44 #define CHAN_FLOODSCAN 0x00000002
\r
45 #define CHAN_JOINFLOOD 0x00000004
\r
46 #define CHAN_ADV_SCAN 0x00000008
\r
47 #define CHAN_SCAN_CHANOPS 0x00000010
\r
48 #define CHAN_SCAN_VOICED 0x00000020
\r
49 #define CHAN_SUSPENDED 0x00000040
\r
51 #define CHAN_FLAGS_DEFAULT (CHAN_SPAMSCAN | CHAN_FLOODSCAN | CHAN_JOINFLOOD)
\r
53 #define CHECK_SPAM(x) ((x)->flags & CHAN_SPAMSCAN)
\r
54 #define CHECK_FLOOD(x) ((x)->flags & CHAN_FLOODSCAN)
\r
55 #define CHECK_JOINFLOOD(x) ((x)->flags & CHAN_JOINFLOOD)
\r
56 #define CHECK_ADV(x) ((x)->flags & CHAN_ADV_SCAN)
\r
57 #define CHECK_CHANOPS(x) ((x)->flags & CHAN_SCAN_CHANOPS)
\r
58 #define CHECK_VOICED(x) ((x)->flags & CHAN_SCAN_VOICED)
\r
59 #define CHECK_SUSPENDED(x) ((x)->flags & CHAN_SUSPENDED)
\r
61 #define BADACTION_KICK 0
\r
62 #define BADACTION_BAN 1
\r
63 #define BADACTION_KILL 2
\r
64 #define BADACTION_GLINE 3
\r
68 struct chanNode *channel;
\r
69 struct string_list *exceptions;
\r
71 unsigned int flags : 30;
\r
72 unsigned int exceptlevel;
\r
73 char info[CHAN_INFO_SIZE];
\r
74 unsigned long suspend_expiry;
\r
75 unsigned int last_badword_id;
\r
78 /***********************************************/
\r
80 /***********************************************/
\r
82 #define USER_KICK 0x00000001
\r
83 #define USER_KICKBAN 0x00000002
\r
84 #define USER_SHORT_TBAN 0x00000004
\r
85 #define USER_LONG_TBAN 0x00000008
\r
86 #define USER_KILL 0x00000010
\r
87 #define USER_GLINE 0x00000020
\r
88 #define USER_WARNED 0x00000040
\r
89 #define USER_KILLED 0x00000080
\r
90 #define USER_ADV_WARNED 0x00000100
\r
92 #define CHECK_KICK(x) ((x)->flags & USER_KICK)
\r
93 #define CHECK_KICKBAN(x) ((x)->flags & USER_KICKBAN)
\r
94 #define CHECK_SHORT_TBAN(x) ((x)->flags & USER_SHORT_TBAN)
\r
95 #define CHECK_LONG_TBAN(x) ((x)->flags & USER_LONG_TBAN)
\r
96 #define CHECK_KILL(x) ((x)->flags & USER_KILL)
\r
97 #define CHECK_GLINE(x) ((x)->flags & USER_GLINE)
\r
98 #define CHECK_WARNED(x) ((x)->flags & USER_WARNED)
\r
99 #define CHECK_KILLED(x) ((x)->flags & USER_KILLED)
\r
100 #define CHECK_ADV_WARNED(x) ((x)->flags & USER_ADV_WARNED)
\r
102 #define SPAM_WARNLEVEL 1
\r
104 #define FLOOD_TIMEQ_FREQ 5
\r
105 #define FLOOD_EXPIRE 5
\r
106 #define FLOOD_WARNLEVEL 1
\r
107 #define FLOOD_MAX_LINES 8
\r
109 #define JOINFLOOD_TIMEQ_FREQ 225
\r
110 #define JOINFLOOD_EXPIRE 450
\r
111 #define JOINFLOOD_MAX 3
\r
112 #define JOINFLOOD_B_DURATION 900
\r
114 #define ADV_TIMEQ_FREQ 300
\r
115 #define ADV_EXPIRE 900
\r
116 #define ADV_WARNLEVEL 2
\r
118 #define WARNLEVEL_TIMEQ_FREQ 1800
\r
119 #define MAX_WARNLEVEL 6
\r
121 #define KILL_TIMEQ_FREQ 450
\r
122 #define KILL_EXPIRE 1800
\r
123 #define KILL_WARNLEVEL 3
\r
127 struct chanNode *channel;
\r
128 unsigned long crc32;
\r
129 unsigned int count;
\r
130 struct spamNode *prev;
\r
131 struct spamNode *next;
\r
136 struct chanNode *channel;
\r
137 struct userNode *owner;
\r
138 unsigned int count;
\r
140 struct floodNode *prev;
\r
141 struct floodNode *next;
\r
146 unsigned int warnlevel;
\r
152 struct userNode *user;
\r
153 struct spamNode *spam;
\r
154 struct floodNode *flood;
\r
155 struct floodNode *joinflood;
\r
156 unsigned int flags : 30;
\r
157 unsigned int warnlevel;
\r
163 char *badword_mask;
\r
164 unsigned int triggered : 29;
\r
165 unsigned int action : 3;
\r
168 /***********************************************/
\r
170 /***********************************************/
\r
179 void init_spamserv(const char *nick);
\r
180 struct chanInfo *get_chanInfo(const char *channelname);
\r
181 void spamserv_channel_message(struct chanNode *channel, struct userNode *user, char *text);
\r
182 void spamserv_cs_suspend(struct chanNode *channel, time_t expiry, int suspend, char *reason);
\r
183 int spamserv_cs_move_merge(struct userNode *user, struct chanNode *channel, struct chanNode *target, int move);
\r
184 void spamserv_cs_unregister(struct userNode *user, struct chanNode *channel, enum cs_unreg type, char *reason);
\r
185 static struct badword *add_badword(struct chanInfo *cInfo, const char *badword_mask, unsigned int triggered, unsigned int action, const char *id);
\r