]>
Commit | Line | Data |
---|---|---|
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 |
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[]; | |
c86edd1d Q |
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); | |
bc5e802e | 141 | void clean_key(char *s); |
c86edd1d Q |
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); | |
f2b36aa8 | 152 | void handlewhoischannels(int hooknum, void *arg); |
c86edd1d Q |
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 | void initchannelalloc(); | |
161 | channel *newchan(); | |
162 | void freechan(channel *cp); | |
163 | chanuserhash *newchanuserhash(int numbuckets); | |
164 | void freechanuserhash(chanuserhash *cuhp); | |
c86edd1d Q |
165 | |
166 | /* functions from channelbans.c */ | |
11032584 | 167 | int setban(channel *cp, const char *ban); |
c86edd1d Q |
168 | int clearban(channel *cp, const char *ban, int optional); |
169 | void clearallbans(channel *cp); | |
873f4217 | 170 | int nickmatchban(nick *np, chanban *bp, int visibleonly); |
171 | int nickbanned(nick *np, channel *cp, int visibleonly); | |
c86edd1d Q |
172 | |
173 | /* functions from channelindex.c */ | |
174 | void initchannelindex(); | |
175 | chanindex *findchanindex(const char *name); | |
176 | chanindex *findorcreatechanindex(const char *name); | |
177 | void releasechanindex(chanindex *cip); | |
178 | int registerchanext(const char *name); | |
179 | int findchanext(const char *name); | |
180 | void releasechanext(int index); | |
181 | unsigned int nextchanmarker(); | |
182 | ||
183 | #endif |