]> jfr.im git - irc/quakenet/newserv.git/blame - channel/channel.h
CHANSERV: tell user when they can't attempts to auth any more, and drop max attempts...
[irc/quakenet/newserv.git] / channel / channel.h
CommitLineData
c86edd1d
Q
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"
47a18d37 14#include "../chanindex/chanindex.h"
11032584 15#include "../bans/bans.h"
c86edd1d
Q
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
73a2c60a 34#define CHANMODE_MODNOAUTH 0x4000
35#define CHANMODE_SINGLETARG 0x8000
c86edd1d 36
73a2c60a 37#define CHANMODE_ALL 0xFFFF
0bf6422b 38#define CHANMODE_DEFAULT 0x2203 /* +ntCN */
c86edd1d 39
c86edd1d
Q
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)
73a2c60a 54#define IsModNoAuth(x) ((x)->flags & CHANMODE_MODNOAUTH)
55#define IsSingleTarg(x) ((x)->flags & CHANMODE_SINGLETARG)
c86edd1d
Q
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)
73a2c60a 71#define SetModNoAuth(x) ((x)->flags |= CHANMODE_MODNOAUTH)
72#define SetSingleTarg(x) ((x)->flags |= CHANMODE_SINGLETARG)
c86edd1d
Q
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)
73a2c60a 88#define ClearModNoAuth(x) ((x)->flags &= ~CHANMODE_MODNOAUTH)
89#define ClearSingleTarg(x) ((x)->flags &= ~CHANMODE_SINGLETARG)
c86edd1d
Q
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
c86edd1d
Q
105#define MODECHANGE_MODES 0x00000001
106#define MODECHANGE_USERS 0x00000002
107#define MODECHANGE_BANS 0x00000004
108
c86edd1d
Q
109typedef struct chanuserhash {
110 unsigned short hashsize;
111 unsigned short totalusers;
112 unsigned long *content;
113} chanuserhash;
114
115typedef 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
127extern unsigned long nouser;
128extern const flag cmodeflags[];
c86edd1d
Q
129
130/* functions from channel.c */
131int addnicktochannel(channel *cp, long numeric);
132void delnickfromchannel(channel *cp, long numeric, int updateuser);
133void delchannel(channel *cp);
134channel *createchannel(char *name);
135channel *findchannel(char *name);
136void addchanneltohash(channel *cp);
137void removechannelfromhash(channel *cp);
138void addordelnick(int hooknum, void *arg);
139void onconnect(int hooknum, void *arg);
140unsigned int countuniquehosts(channel *cp);
bc5e802e 141void clean_key(char *s);
c86edd1d
Q
142
143/* functions from channelhandlers.c */
144int handleburstmsg(void *source, int cargc, char **cargv);
145int handlejoinmsg(void *source, int cargc, char **cargv);
146int handlecreatemsg(void *source, int cargc, char **cargv);
147int handlepartmsg(void *source, int cargc, char **cargv);
148int handlekickmsg(void *source, int cargc, char **cargv);
149int handletopicmsg(void *source, int cargc, char **cargv);
150int handlemodemsg(void *source, int cargc, char **cargv);
151int handleclearmodemsg(void *source, int cargc, char **cargv);
f2b36aa8 152void handlewhoischannels(int hooknum, void *arg);
c86edd1d
Q
153
154/* functions from chanuserhash.c */
155void rehashchannel(channel *cp);
156int addnumerictochanuserhash(chanuserhash *cuh, long numeric);
157unsigned long *getnumerichandlefromchanhash(chanuserhash *cuh, long numeric);
158
159/* functions from channelalloc.c */
c86edd1d
Q
160channel *newchan();
161void freechan(channel *cp);
162chanuserhash *newchanuserhash(int numbuckets);
163void freechanuserhash(chanuserhash *cuhp);
c86edd1d
Q
164
165/* functions from channelbans.c */
11032584 166int setban(channel *cp, const char *ban);
c86edd1d
Q
167int clearban(channel *cp, const char *ban, int optional);
168void clearallbans(channel *cp);
873f4217 169int nickmatchban(nick *np, chanban *bp, int visibleonly);
170int nickbanned(nick *np, channel *cp, int visibleonly);
c86edd1d
Q
171
172/* functions from channelindex.c */
173void initchannelindex();
174chanindex *findchanindex(const char *name);
175chanindex *findorcreatechanindex(const char *name);
176void releasechanindex(chanindex *cip);
177int registerchanext(const char *name);
178int findchanext(const char *name);
179void releasechanext(int index);
180unsigned int nextchanmarker();
181
182#endif