00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef INCLUDED_channel_h
00028 #define INCLUDED_channel_h
00029
00030 #include "ircd_defs.h"
00031 #include "tools.h"
00032
00033 struct Client;
00034
00035
00036 struct Mode
00037 {
00038 unsigned int mode;
00039 unsigned int limit;
00040 char key[KEYLEN];
00041 };
00042
00043
00044 struct Channel
00045 {
00046 dlink_node node;
00047
00048 struct Channel *hnextch;
00049
00050 struct Mode mode;
00051 char *topic;
00052 char *topic_info;
00053 time_t topic_time;
00054 unsigned long lazyLinkChannelExists;
00055 time_t last_knock;
00056
00057 dlink_list members;
00058 dlink_list invites;
00059 dlink_list banlist;
00060 dlink_list exceptlist;
00061 dlink_list invexlist;
00062
00063 time_t first_received_message_time;
00064 int received_number_of_privmsgs;
00065 int flags;
00066 float number_joined;
00067 time_t last_join_time;
00068
00069 time_t channelts;
00070 char chname[CHANNELLEN + 1];
00071 };
00072
00073
00074 struct Membership
00075 {
00076 dlink_node channode;
00077 dlink_node usernode;
00078 struct Channel *chptr;
00079 struct Client *client_p;
00080 unsigned int flags;
00081 };
00082
00083
00084 struct Ban
00085 {
00086 dlink_node node;
00087 size_t len;
00088 char *name;
00089 char *username;
00090 char *host;
00091 char *who;
00092 time_t when;
00093 struct irc_ssaddr addr;
00094 int bits;
00095 char type;
00096 };
00097
00098 extern dlink_list global_channel_list;
00099
00100 extern int check_channel_name(const char *, int);
00101 extern int can_send(struct Channel *, struct Client *, struct Membership *);
00102 extern int is_banned(struct Channel *, struct Client *);
00103 extern int can_join(struct Client *, struct Channel *, const char *);
00104 extern int has_member_flags(struct Membership *, unsigned int);
00105
00106 extern void remove_ban(struct Ban *, dlink_list *);
00107 extern void init_channels(void);
00108 extern void add_user_to_channel(struct Channel *, struct Client *,
00109 unsigned int, int);
00110 extern void remove_user_from_channel(struct Membership *);
00111 extern void channel_member_names(struct Client *, struct Channel *, int);
00112 extern void add_invite(struct Channel *, struct Client *);
00113 extern void del_invite(struct Channel *, struct Client *);
00114 extern void send_channel_modes(struct Client *, struct Channel *);
00115 extern void channel_modes(struct Channel *, struct Client *, char *, char *);
00116 extern void check_spambot_warning(struct Client *, const char *);
00117 extern void check_splitmode(void *);
00118 extern void free_channel_list(dlink_list *);
00119 extern void free_topic(struct Channel *);
00120 extern void destroy_channel(struct Channel *);
00121 extern void set_channel_topic(struct Channel *, const char *, const char *, time_t);
00122
00123 extern const char *get_member_status(const struct Membership *, int);
00124
00125 extern struct Channel *make_channel(const char *);
00126 extern struct Membership *find_channel_link(struct Client *, struct Channel *);
00127
00128
00129 #define ShowChannel(v,c) (PubChannel(c) || IsMember((v),(c)))
00130
00131 #define IsMember(who, chan) ((find_channel_link(who, chan)) ? 1 : 0)
00132 #define AddMemberFlag(x, y) ((x)->flags |= (y))
00133 #define DelMemberFlag(x, y) ((x)->flags &= ~(y))
00134
00135 #define FLOOD_NOTICED 1
00136 #define JOIN_FLOOD_NOTICED 2
00137
00138 #define SetFloodNoticed(x) ((x)->flags |= FLOOD_NOTICED)
00139 #define IsSetFloodNoticed(x) ((x)->flags & FLOOD_NOTICED)
00140 #define ClearFloodNoticed(x) ((x)->flags &= ~FLOOD_NOTICED)
00141
00142 #define SetJoinFloodNoticed(x) ((x)->flags |= JOIN_FLOOD_NOTICED)
00143 #define IsSetJoinFloodNoticed(x) ((x)->flags & JOIN_FLOOD_NOTICED)
00144 #define ClearJoinFloodNoticed(x) ((x)->flags &= ~JOIN_FLOOD_NOTICED)
00145
00146 #endif