ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/include/channels.h
(Generate patch)

Comparing ermyth/include/channels.h (file contents):
Revision 1.2 by pippijn, Sat Jul 21 01:29:07 2007 UTC vs.
Revision 1.3 by pippijn, Tue Aug 28 17:08:06 2007 UTC

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
15struct channel_t 17class 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
34public:
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 */
37struct chanuser_t 57class 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
65public:
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
46struct chanban_t 75struct 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
75struct extmode 104struct 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 */
82typedef struct 112typedef 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
102typedef struct 132struct 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 */
115E char *flags_to_string (int flags); 151E char *flags_to_string (int flags);
116E int mode_to_flag (char c); 152E int mode_to_flag (char c);
117E void channel_mode (user_t *source, channel_t *chan, int parc, char *parv[]); 153E void channel_mode (user_t *source, channel_t *chan, int parc, char const * const parv[]);
154E void channel_mode (user_t *source, channel_t *chan, char const * const arg);
118E void channel_mode_va (user_t *source, channel_t *chan, int parc, char *parv0, ...); 155E void channel_mode_va (user_t *source, channel_t *chan, int parc, char const * const parv0, ...);
119E void clear_simple_modes (channel_t *c); 156E void clear_simple_modes (channel_t *c);
120E char *channel_modes (channel_t *c, bool doparams); 157E char *channel_modes (channel_t *c, bool doparams);
121E void modestack_flush_channel (channel_t *channel); 158E void modestack_flush_channel (channel_t *channel);
122E void modestack_forget_channel (channel_t *channel); 159E void modestack_forget_channel (channel_t *channel);
123E void modestack_finalize_channel (channel_t *channel); 160E void modestack_finalize_channel (channel_t *channel);
124E void modestack_mode_simple (char *source, channel_t *channel, int dir, int flags); 161E void modestack_mode_simple (char *source, channel_t *channel, int dir, int flags);
125E void modestack_mode_limit (char *source, channel_t *channel, int dir, unsigned int limit); 162E void modestack_mode_limit (char *source, channel_t *channel, int dir, unsigned int limit);
126E void modestack_mode_ext (char *source, channel_t *channel, int dir, int i, const char *value); 163E void modestack_mode_ext (char *source, channel_t *channel, int dir, int i, char const * const value);
127E void modestack_mode_param (char *source, channel_t *channel, int dir, char type, const char *value); 164E void modestack_mode_param (char *source, channel_t *channel, int dir, char type, char const * const value);
128E void check_modes (mychan_t *mychan, bool sendnow); 165E void check_modes (mychan_t *mychan, bool sendnow);
129 166
130/* channels.c */ 167/* channels.C */
131E dictionary_tree_t *chanlist; 168E dictionary_tree_t *chanlist;
132 169
133E void init_channels (void); 170E void init_channels (void);
134 171
135E channel_t *channel_add (const char *name, unsigned int ts, server_t *creator); 172E channel_t *channel_add (char const * const name, unsigned int ts, server_t *creator);
136E void channel_delete (channel_t *c); 173E void channel_delete (channel_t *c);
137E channel_t *channel_find (const char *name); 174E channel_t *channel_find (char const * const name);
138 175
139E chanuser_t *chanuser_add (channel_t *chan, const char *user); 176E chanuser_t *chanuser_add (channel_t *chan, char const * const user);
140E void chanuser_delete (channel_t *chan, user_t *user); 177E void chanuser_delete (channel_t *chan, user_t *user);
141E chanuser_t *chanuser_find (channel_t *chan, user_t *user); 178E chanuser_t *chanuser_find (channel_t *chan, user_t *user);
142 179
143E chanban_t *chanban_add (channel_t *chan, const char *mask, int type); 180E chanban_t *chanban_add (channel_t *chan, char const * const mask, int type);
144E void chanban_delete (chanban_t *c); 181E void chanban_delete (chanban_t *c);
145E chanban_t *chanban_find (channel_t *chan, const char *mask, int type); 182E chanban_t *chanban_find (channel_t *chan, char const * const mask, int type);
146E void chanban_clear (channel_t *chan); 183E void chanban_clear (channel_t *chan);
147 184
148#endif 185#endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines