]> jfr.im git - irc/quakenet/newserv.git/blob - glines/glines.h
BUILD: add require-all build mode
[irc/quakenet/newserv.git] / glines / glines.h
1 #ifndef __GLINES_H
2 #define __GLINES_H
3
4 #include "../lib/sstring.h"
5 #include "../nick/nick.h"
6 #include "../channel/channel.h"
7 #include "../whowas/whowas.h"
8
9 #define SNIRCD_VERSION 134
10
11 #define MAXUSERGLINEUSERHITS 100
12 #define MAXUSERGLINECHANNELHITS 10
13
14 #define MAXGLINEDURATION 90 * 86400
15 #define MINGLINEREASONLEN 10
16
17 #define MAXGLINEUSERHITS 500
18 #define MAXGLINECHANNELHITS 50
19
20 #define MAXGLINELOG 500
21
22 #define GLINE_IGNORE_TRUST 1
23 #define GLINE_ALWAYS_NICK 2
24 #define GLINE_ALWAYS_USER 4
25 #define GLINE_SIMULATE 8
26
27 #define GLINE_HOSTMASK 1 /* Gline includes a host mask */
28 #define GLINE_IPMASK 2 /* Gline includes an CIDR mask */
29 #define GLINE_BADCHAN 4 /* Gline includes a badchan */
30 #define GLINE_REALNAME 8 /* Gline includes a realname */
31 #define GLINE_ACTIVATE 16 /* Gline should be activated */
32 #define GLINE_DEACTIVATE 32 /* Gline should be deactivated */
33 #define GLINE_DESTROY 64 /* Gline should be destroyed */
34 #define GLINE_ACTIVE 128 /* Gline is active */
35 #define GLINE_DESTROYED 256 /* Gline is destroyed */
36
37 /**
38 * glist flags
39 */
40 #define GLIST_COUNT 0x01 /* -c */
41 #define GLIST_EXACT 0x02 /* -x */
42 #define GLIST_FIND 0x04 /* -f */
43 #define GLIST_REASON 0x10 /* -r */
44 #define GLIST_OWNER 0x20 /* -o */
45 #define GLIST_REALNAME 0x40 /* -R */
46 #define GLIST_INACTIVE 0x80 /* -i */
47
48 #define GLSTORE_PATH_PREFIX "data/glines"
49 #define GLSTORE_SAVE_FILES 5
50 #define GLSTORE_SAVE_INTERVAL 3600
51
52 /**
53 * Interpret absolute/relative timestamps with same method as snircd
54 * If the expiration value, interpreted as an absolute timestamp, is
55 * more recent than 5 years in the past, we interpret it as an
56 * absolute timestamp; otherwise, we assume it's relative and convert
57 * it to an absolute timestamp.
58 */
59 #define abs_expire(exp) ((exp) >= getnettime() - 157680000 ? (exp) : (exp) + getnettime())
60
61 #define gline_max(a, b) (((a)<(b)) ? (b) : (a))
62
63 typedef struct gline {
64 sstring *nick;
65 sstring *user;
66 sstring *host;
67 sstring *reason;
68 sstring *creator;
69
70 struct irc_in_addr ip;
71 unsigned char bits;
72
73 time_t expire;
74 time_t lastmod;
75 time_t lifetime;
76
77 unsigned int flags;
78 int glinebufid;
79
80 struct gline *next;
81 } gline;
82
83 typedef struct glinebuf {
84 int id;
85 sstring *comment;
86 time_t commit;
87 time_t amend;
88
89 gline *glines;
90
91 int hitsvalid;
92 int userhits;
93 int channelhits;
94
95 array hits;
96 } glinebuf;
97
98 typedef struct glineinfo {
99 int hits;
100 char *mask;
101 } glineinfo;
102
103 extern gline *glinelist;
104 extern glinebuf *glinebuflog[MAXGLINELOG];
105 extern int glinebuflogoffset;
106
107 /* glines.c */
108 gline *findgline(const char *);
109 void gline_propagate(gline *);
110 void gline_deactivate(gline *, time_t, int);
111 void gline_destroy(gline *, time_t, int);
112 void gline_activate(gline *agline, time_t lastmod, int propagate);
113 int glineequal(gline *, gline *);
114 int gline_match_mask(gline *gla, gline *glb);
115 int gline_match_nick(gline *gl, nick *np);
116 int gline_match_channel(gline *gl, channel *cp);
117 int isglinesane(gline *gl, const char **hint);
118 gline *glinedup(gline *gl);
119
120 /* glines_formats.c */
121 gline *makegline(const char *);
122 char *glinetostring(gline *g);
123
124 /* glines_util.c */
125 int glinebyip(const char *user, struct irc_in_addr *ip, unsigned char bits, int duration, const char *reason, int flags, const char *creator);
126 glineinfo *glinebynickex(nick *np, int duration, const char *reason, int flags, const char *creator);
127 int glinebynick(nick *np, int duration, const char *reason, int flags, const char *creator);
128 void glineunsetmask(const char *mask);
129
130 /* glines_buf.c */
131 void glinebufinit(glinebuf *gbuf, int id);
132 gline *glinebufadd(glinebuf *gbuf, const char *mask, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
133 char *glinebufaddbyip(glinebuf *gbuf, const char *user, struct irc_in_addr *ip, unsigned char bits, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
134 char *glinebufaddbynick(glinebuf *gbuf, nick *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
135 void glinebufaddbywhowas(glinebuf *gbuf, whowas *, int flags, const char *creator, const char *reason, time_t expire, time_t lastmod, time_t lifetime);
136 void glinebufcounthits(glinebuf *gbuf, int *users, int *channels);
137 int glinebufchecksane(glinebuf *gbuf, nick *spewto, int overridesanity, int overridelimit);
138 void glinebufspew(glinebuf *gbuf, nick *spewto);
139 void glinebufmerge(glinebuf *gbuf);
140 int glinebufcommit(glinebuf *gbuf, int propagate);
141 void glinebufabort(glinebuf *gbuf);
142 int glinebufundo(int id);
143 void glinebufcommentf(glinebuf *gbuf, const char *format, ...);
144 void glinebufcommentv(glinebuf *gbuf, const char *prefix, int cargc, char **cargv);
145 int glinebufwritelog(glinebuf *gbuf, int propagating);
146
147 /* glines_alloc.c */
148 void freegline(gline *);
149 gline *newgline();
150 void removegline(gline *);
151
152 /* glines_handler.c */
153 int handleglinemsg(void *, int, char **);
154 void handleglinestats(int hooknum, void *arg);
155
156 /* glines_store.c */
157 int glstore_save(void);
158 int glstore_load(void);
159
160 #endif