]> jfr.im git - irc/quakenet/newserv.git/blob - channel/channel.h
LUA: port luadb to dbapi2 to drop postgres dependency
[irc/quakenet/newserv.git] / channel / channel.h
1 /* channel.h */
2
3 #ifndef __CHANNEL_H
4 #define __CHANNEL_H
5
6 #include "../lib/flags.h"
7 #include "../lib/sstring.h"
8 #include "../irc/irc_config.h"
9 #include "../lib/array.h"
10 #include "../lib/sstring.h"
11 #include "../core/hooks.h"
12 #include "../core/error.h"
13 #include "../nick/nick.h"
14 #include "../chanindex/chanindex.h"
15 #include "../bans/bans.h"
16
17 #include <time.h>
18 #include <stdlib.h>
19
20 #define CHANMODE_NOEXTMSG 0x0001
21 #define CHANMODE_TOPICLIMIT 0x0002
22 #define CHANMODE_SECRET 0x0004
23 #define CHANMODE_PRIVATE 0x0008
24 #define CHANMODE_INVITEONLY 0x0010
25 #define CHANMODE_LIMIT 0x0020
26 #define CHANMODE_KEY 0x0040
27 #define CHANMODE_MODERATE 0x0080
28 #define CHANMODE_NOCOLOUR 0x0100
29 #define CHANMODE_NOCTCP 0x0200
30 #define CHANMODE_REGONLY 0x0400
31 #define CHANMODE_DELJOINS 0x0800
32 #define CHANMODE_NOQUITMSG 0x1000
33 #define CHANMODE_NONOTICE 0x2000
34 #define CHANMODE_MODNOAUTH 0x4000
35 #define CHANMODE_SINGLETARG 0x8000
36
37 #define CHANMODE_ALL 0xFFFF
38 #define CHANMODE_DEFAULT 0x2203 /* +ntCN */
39
40 #define IsNoExtMsg(x) ((x)->flags & CHANMODE_NOEXTMSG)
41 #define IsTopicLimit(x) ((x)->flags & CHANMODE_TOPICLIMIT)
42 #define IsSecret(x) ((x)->flags & CHANMODE_SECRET)
43 #define IsPrivate(x) ((x)->flags & CHANMODE_PRIVATE)
44 #define IsInviteOnly(x) ((x)->flags & CHANMODE_INVITEONLY)
45 #define IsLimit(x) ((x)->flags & CHANMODE_LIMIT)
46 #define IsKey(x) ((x)->flags & CHANMODE_KEY)
47 #define IsModerated(x) ((x)->flags & CHANMODE_MODERATE)
48 #define IsNoColour(x) ((x)->flags & CHANMODE_NOCOLOUR)
49 #define IsNoCTCP(x) ((x)->flags & CHANMODE_NOCTCP)
50 #define IsRegOnly(x) ((x)->flags & CHANMODE_REGONLY)
51 #define IsDelJoins(x) ((x)->flags & CHANMODE_DELJOINS)
52 #define IsNoQuitMsg(x) ((x)->flags & CHANMODE_NOQUITMSG)
53 #define IsNoNotice(x) ((x)->flags & CHANMODE_NONOTICE)
54 #define IsModNoAuth(x) ((x)->flags & CHANMODE_MODNOAUTH)
55 #define IsSingleTarg(x) ((x)->flags & CHANMODE_SINGLETARG)
56
57 #define SetNoExtMsg(x) ((x)->flags |= CHANMODE_NOEXTMSG)
58 #define SetTopicLimit(x) ((x)->flags |= CHANMODE_TOPICLIMIT)
59 #define SetSecret(x) ((x)->flags |= CHANMODE_SECRET)
60 #define SetPrivate(x) ((x)->flags |= CHANMODE_PRIVATE)
61 #define SetInviteOnly(x) ((x)->flags |= CHANMODE_INVITEONLY)
62 #define SetLimit(x) ((x)->flags |= CHANMODE_LIMIT)
63 #define SetKey(x) ((x)->flags |= CHANMODE_KEY)
64 #define SetModerated(x) ((x)->flags |= CHANMODE_MODERATE)
65 #define SetNoColour(x) ((x)->flags |= CHANMODE_NOCOLOUR)
66 #define SetNoCTCP(x) ((x)->flags |= CHANMODE_NOCTCP)
67 #define SetRegOnly(x) ((x)->flags |= CHANMODE_REGONLY)
68 #define SetDelJoins(x) ((x)->flags |= CHANMODE_DELJOINS)
69 #define SetNoQuitMsg(x) ((x)->flags |= CHANMODE_NOQUITMSG)
70 #define SetNoNotice(x) ((x)->flags |= CHANMODE_NONOTICE)
71 #define SetModNoAuth(x) ((x)->flags |= CHANMODE_MODNOAUTH)
72 #define SetSingleTarg(x) ((x)->flags |= CHANMODE_SINGLETARG)
73
74 #define ClearNoExtMsg(x) ((x)->flags &= ~CHANMODE_NOEXTMSG)
75 #define ClearTopicLimit(x) ((x)->flags &= ~CHANMODE_TOPICLIMIT)
76 #define ClearSecret(x) ((x)->flags &= ~CHANMODE_SECRET)
77 #define ClearPrivate(x) ((x)->flags &= ~CHANMODE_PRIVATE)
78 #define ClearInviteOnly(x) ((x)->flags &= ~CHANMODE_INVITEONLY)
79 #define ClearLimit(x) ((x)->flags &= ~CHANMODE_LIMIT)
80 #define ClearKey(x) ((x)->flags &= ~CHANMODE_KEY)
81 #define ClearModerated(x) ((x)->flags &= ~CHANMODE_MODERATE)
82 #define ClearNoColour(x) ((x)->flags &= ~CHANMODE_NOCOLOUR)
83 #define ClearNoCTCP(x) ((x)->flags &= ~CHANMODE_NOCTCP)
84 #define ClearRegOnly(x) ((x)->flags &= ~CHANMODE_REGONLY)
85 #define ClearDelJoins(x) ((x)->flags &= ~CHANMODE_DELJOINS)
86 #define ClearNoQuitMsg(x) ((x)->flags &= ~CHANMODE_NOQUITMSG)
87 #define ClearNoNotice(x) ((x)->flags &= ~CHANMODE_NONOTICE)
88 #define ClearModNoAuth(x) ((x)->flags &= ~CHANMODE_MODNOAUTH)
89 #define ClearSingleTarg(x) ((x)->flags &= ~CHANMODE_SINGLETARG)
90
91 #define CUMODE_OP 0x80000000
92 #define CUMODE_VOICE 0x40000000
93
94 #define CU_NUMERICMASK 0x3FFFFFFF
95 #define CU_MODEMASK 0xC0000000
96
97 #define CU_NOUSERMASK 0x0003FFFF
98
99 /* Maximum allowed hash search depth */
100
101 #define CUHASH_DEPTH 10
102
103 #define MAGIC_REMOTE_JOIN_TS 1270080000
104
105 #define MODECHANGE_MODES 0x00000001
106 #define MODECHANGE_USERS 0x00000002
107 #define MODECHANGE_BANS 0x00000004
108
109 typedef struct chanuserhash {
110 unsigned short hashsize;
111 unsigned short totalusers;
112 unsigned long *content;
113 } chanuserhash;
114
115 typedef struct channel {
116 chanindex *index;
117 time_t timestamp;
118 sstring *topic;
119 time_t topictime;
120 flag_t flags;
121 sstring *key;
122 int limit;
123 chanban *bans;
124 chanuserhash *users;
125 } channel;
126
127 extern unsigned long nouser;
128 extern const flag cmodeflags[];
129
130 /* functions from channel.c */
131 int addnicktochannel(channel *cp, long numeric);
132 void delnickfromchannel(channel *cp, long numeric, int updateuser);
133 void delchannel(channel *cp);
134 channel *createchannel(char *name);
135 channel *findchannel(char *name);
136 void addchanneltohash(channel *cp);
137 void removechannelfromhash(channel *cp);
138 void addordelnick(int hooknum, void *arg);
139 void onconnect(int hooknum, void *arg);
140 unsigned int countuniquehosts(channel *cp);
141 void clean_key(char *s);
142
143 /* functions from channelhandlers.c */
144 int handleburstmsg(void *source, int cargc, char **cargv);
145 int handlejoinmsg(void *source, int cargc, char **cargv);
146 int handlecreatemsg(void *source, int cargc, char **cargv);
147 int handlepartmsg(void *source, int cargc, char **cargv);
148 int handlekickmsg(void *source, int cargc, char **cargv);
149 int handletopicmsg(void *source, int cargc, char **cargv);
150 int handlemodemsg(void *source, int cargc, char **cargv);
151 int handleclearmodemsg(void *source, int cargc, char **cargv);
152 void handlewhoischannels(int hooknum, void *arg);
153
154 /* functions from chanuserhash.c */
155 void rehashchannel(channel *cp);
156 int addnumerictochanuserhash(chanuserhash *cuh, long numeric);
157 unsigned long *getnumerichandlefromchanhash(chanuserhash *cuh, long numeric);
158
159 /* functions from channelalloc.c */
160 channel *newchan();
161 void freechan(channel *cp);
162 chanuserhash *newchanuserhash(int numbuckets);
163 void freechanuserhash(chanuserhash *cuhp);
164
165 /* functions from channelbans.c */
166 int setban(channel *cp, const char *ban);
167 int clearban(channel *cp, const char *ban, int optional);
168 void clearallbans(channel *cp);
169 int nickmatchban(nick *np, chanban *bp, int visibleonly);
170 int nickbanned(nick *np, channel *cp, int visibleonly);
171
172 /* functions from channelindex.c */
173 void initchannelindex();
174 chanindex *findchanindex(const char *name);
175 chanindex *findorcreatechanindex(const char *name);
176 void releasechanindex(chanindex *cip);
177 int registerchanext(const char *name);
178 int findchanext(const char *name);
179 void releasechanext(int index);
180 unsigned int nextchanmarker();
181
182 #endif