1 | /* |
1 | /* |
2 | * Copyright © 2005 William Pitcock, et al. |
2 | * Copyright © 2005 William Pitcock, et al. |
3 | * Rights to this code are as documented in doc/pod/license.pod. |
3 | * Rights to this code are as documented in doc/pod/license.pod. |
4 | * |
4 | * |
5 | * Data structures for channel information. |
5 | * Data structures for channel information. |
6 | * |
6 | * |
7 | * $Id: channels.h,v 1.2 2007/07/21 01:29:07 pippijn Exp $ |
7 | * $Id: channels.h,v 1.3 2007/08/28 17:08:06 pippijn Exp $ |
8 | */ |
8 | */ |
9 | |
9 | |
10 | #ifndef CHANNELS_H |
10 | #ifndef CHANNELS_H |
11 | #define CHANNELS_H |
11 | #define CHANNELS_H |
12 | |
12 | |
|
|
13 | #include <ermyth/callback.h> |
|
|
14 | |
13 | #define MAXEXTMODES 5 |
15 | #define MAXEXTMODES 5 |
14 | |
16 | |
15 | struct channel_t |
17 | class channel_t : public zero_initialised |
16 | { |
18 | { |
|
|
19 | struct callbacks |
|
|
20 | { |
|
|
21 | functor::callback1<channel_t *> add; |
|
|
22 | functor::callback1<channel_t *> akick_add; |
|
|
23 | functor::callback1<channel_t *> remove; |
|
|
24 | functor::callback6<channel_t *, user_t *, server_t *, |
|
|
25 | char const * const /* setter */, |
|
|
26 | time_t /* ts */, |
|
|
27 | char const * const /* topic */, |
|
|
28 | bool /* return value */> can_change_topic; |
|
|
29 | functor::callback3<channel_t *, user_t *, char const * const> message; |
|
|
30 | functor::callback1<channel_t *> topic; |
|
|
31 | functor::callback1<channel_t *> tschange; |
|
|
32 | }; |
|
|
33 | |
|
|
34 | public: |
17 | char *name; |
35 | char *name; |
18 | |
36 | |
19 | unsigned int modes; |
37 | unsigned int modes; |
20 | char *key; |
38 | char *key; |
21 | unsigned int limit; |
39 | unsigned int limit; |
… | |
… | |
29 | char *topic_setter; |
47 | char *topic_setter; |
30 | time_t topicts; |
48 | time_t topicts; |
31 | |
49 | |
32 | list_t members; |
50 | list_t members; |
33 | list_t bans; |
51 | list_t bans; |
|
|
52 | |
|
|
53 | static callbacks callback; |
34 | }; |
54 | }; |
35 | |
55 | |
36 | /* struct for channel memberships */ |
56 | /* struct for channel memberships */ |
37 | struct chanuser_t |
57 | class chanuser_t : public zero_initialised |
38 | { |
58 | { |
|
|
59 | struct callbacks |
|
|
60 | { |
|
|
61 | functor::callback1<chanuser_t *, bool> join; |
|
|
62 | functor::callback1<chanuser_t *> part; |
|
|
63 | }; |
|
|
64 | |
|
|
65 | public: |
39 | channel_t *chan; |
66 | channel_t *chan; |
40 | user_t *user; |
67 | user_t *user; |
41 | unsigned int modes; |
68 | unsigned int modes; |
42 | node_t unode; |
69 | node_t unode; |
43 | node_t cnode; |
70 | node_t cnode; |
|
|
71 | |
|
|
72 | static callbacks callback; |
44 | }; |
73 | }; |
45 | |
74 | |
46 | struct chanban_t |
75 | struct chanban_t : zero_initialised |
47 | { |
76 | { |
48 | channel_t *chan; |
77 | channel_t *chan; |
49 | char *mask; |
78 | char *mask; |
50 | int type; /* 'b', 'e', 'I', etc -- jilles */ |
79 | int type; /* 'b', 'e', 'I', etc -- jilles */ |
51 | }; |
80 | }; |
… | |
… | |
73 | }; |
102 | }; |
74 | |
103 | |
75 | struct extmode |
104 | struct extmode |
76 | { |
105 | { |
77 | char mode; |
106 | char mode; |
78 | bool (*check) (const char *, channel_t *, mychan_t *, user_t *, myuser_t *); |
107 | bool (*check) (char const * const, channel_t *, mychan_t *, user_t *, myuser_t *); |
79 | }; |
108 | }; |
80 | |
109 | |
|
|
110 | #if 0 |
81 | /* channel related hooks */ |
111 | /* channel related hooks */ |
82 | typedef struct |
112 | typedef struct |
83 | { |
113 | { |
84 | chanuser_t *cu; /* Write NULL here if you kicked the user. |
114 | chanuser_t *cu; /* Write NULL here if you kicked the user. |
85 | When kicking the last user, you must join a |
115 | When kicking the last user, you must join a |
… | |
… | |
97 | user_t *u; |
127 | user_t *u; |
98 | channel_t *c; |
128 | channel_t *c; |
99 | char *msg; |
129 | char *msg; |
100 | } hook_cmessage_data_t; |
130 | } hook_cmessage_data_t; |
101 | |
131 | |
102 | typedef struct |
132 | struct hook_channel_topic_check_t |
103 | { |
133 | { |
104 | user_t *u; /* Online user that changed the topic */ |
134 | user_t *u; /* Online user that changed the topic */ |
105 | server_t *s; /* Server that restored a topic */ |
135 | server_t *s; /* Server that restored a topic */ |
106 | channel_t *c; /* Channel still has old topic */ |
136 | channel_t *c; /* Channel still has old topic */ |
107 | char *setter; /* Stored setter string, can be nick, nick!user@host |
137 | char const * const setter; /* Stored setter string, can be nick, nick!user@host |
108 | or server */ |
138 | or server */ |
109 | time_t ts; /* Time the topic was changed */ |
139 | time_t ts; /* Time the topic was changed */ |
110 | char *topic; /* New topic */ |
140 | char const * const topic; /* New topic */ |
111 | int approved; /* Write non-zero here to cancel the change */ |
141 | int approved; /* Write non-zero here to cancel the change */ |
112 | } hook_channel_topic_check_t; |
|
|
113 | |
142 | |
|
|
143 | hook_channel_topic_check_t (char const * const _setter, char const * const _topic) |
|
|
144 | : setter (_setter), topic (_topic) |
|
|
145 | { |
|
|
146 | } |
|
|
147 | }; |
|
|
148 | #endif |
|
|
149 | |
114 | /* cmode.c */ |
150 | /* cmode.C */ |
115 | E char *flags_to_string (int flags); |
151 | E char *flags_to_string (int flags); |
116 | E int mode_to_flag (char c); |
152 | E int mode_to_flag (char c); |
117 | E void channel_mode (user_t *source, channel_t *chan, int parc, char *parv[]); |
153 | E void channel_mode (user_t *source, channel_t *chan, int parc, char const * const parv[]); |
|
|
154 | E void channel_mode (user_t *source, channel_t *chan, char const * const arg); |
118 | E void channel_mode_va (user_t *source, channel_t *chan, int parc, char *parv0, ...); |
155 | E void channel_mode_va (user_t *source, channel_t *chan, int parc, char const * const parv0, ...); |
119 | E void clear_simple_modes (channel_t *c); |
156 | E void clear_simple_modes (channel_t *c); |
120 | E char *channel_modes (channel_t *c, bool doparams); |
157 | E char *channel_modes (channel_t *c, bool doparams); |
121 | E void modestack_flush_channel (channel_t *channel); |
158 | E void modestack_flush_channel (channel_t *channel); |
122 | E void modestack_forget_channel (channel_t *channel); |
159 | E void modestack_forget_channel (channel_t *channel); |
123 | E void modestack_finalize_channel (channel_t *channel); |
160 | E void modestack_finalize_channel (channel_t *channel); |
124 | E void modestack_mode_simple (char *source, channel_t *channel, int dir, int flags); |
161 | E void modestack_mode_simple (char *source, channel_t *channel, int dir, int flags); |
125 | E void modestack_mode_limit (char *source, channel_t *channel, int dir, unsigned int limit); |
162 | E void modestack_mode_limit (char *source, channel_t *channel, int dir, unsigned int limit); |
126 | E void modestack_mode_ext (char *source, channel_t *channel, int dir, int i, const char *value); |
163 | E void modestack_mode_ext (char *source, channel_t *channel, int dir, int i, char const * const value); |
127 | E void modestack_mode_param (char *source, channel_t *channel, int dir, char type, const char *value); |
164 | E void modestack_mode_param (char *source, channel_t *channel, int dir, char type, char const * const value); |
128 | E void check_modes (mychan_t *mychan, bool sendnow); |
165 | E void check_modes (mychan_t *mychan, bool sendnow); |
129 | |
166 | |
130 | /* channels.c */ |
167 | /* channels.C */ |
131 | E dictionary_tree_t *chanlist; |
168 | E dictionary_tree_t *chanlist; |
132 | |
169 | |
133 | E void init_channels (void); |
170 | E void init_channels (void); |
134 | |
171 | |
135 | E channel_t *channel_add (const char *name, unsigned int ts, server_t *creator); |
172 | E channel_t *channel_add (char const * const name, unsigned int ts, server_t *creator); |
136 | E void channel_delete (channel_t *c); |
173 | E void channel_delete (channel_t *c); |
137 | E channel_t *channel_find (const char *name); |
174 | E channel_t *channel_find (char const * const name); |
138 | |
175 | |
139 | E chanuser_t *chanuser_add (channel_t *chan, const char *user); |
176 | E chanuser_t *chanuser_add (channel_t *chan, char const * const user); |
140 | E void chanuser_delete (channel_t *chan, user_t *user); |
177 | E void chanuser_delete (channel_t *chan, user_t *user); |
141 | E chanuser_t *chanuser_find (channel_t *chan, user_t *user); |
178 | E chanuser_t *chanuser_find (channel_t *chan, user_t *user); |
142 | |
179 | |
143 | E chanban_t *chanban_add (channel_t *chan, const char *mask, int type); |
180 | E chanban_t *chanban_add (channel_t *chan, char const * const mask, int type); |
144 | E void chanban_delete (chanban_t *c); |
181 | E void chanban_delete (chanban_t *c); |
145 | E chanban_t *chanban_find (channel_t *chan, const char *mask, int type); |
182 | E chanban_t *chanban_find (channel_t *chan, char const * const mask, int type); |
146 | E void chanban_clear (channel_t *chan); |
183 | E void chanban_clear (channel_t *chan); |
147 | |
184 | |
148 | #endif |
185 | #endif |