X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/212380e3f42f585dc1ea927402252eb943f91f7b..07db71cda082d1d7db7bec491bb60aee5f1e2879:/include/channel.h diff --git a/include/channel.h b/include/channel.h index ce9ef00..22f9d53 100644 --- a/include/channel.h +++ b/include/channel.h @@ -21,13 +21,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: channel.h 2727 2006-11-09 23:48:45Z jilles $ */ #ifndef INCLUDED_channel_h #define INCLUDED_channel_h -#include "config.h" /* config settings */ -#include "ircd_defs.h" /* buffer sizes */ #define MODEBUFLEN 200 @@ -51,22 +48,22 @@ struct Mode /* channel structure */ struct Channel { - dlink_node node; + rb_dlink_node node; struct Mode mode; + char *mode_lock; char *topic; char *topic_info; time_t topic_time; - time_t users_last; /* when last user was in channel */ time_t last_knock; /* don't allow knock to flood */ - dlink_list members; /* channel members */ - dlink_list locmembers; /* local channel members */ + rb_dlink_list members; /* channel members */ + rb_dlink_list locmembers; /* local channel members */ - dlink_list invites; - dlink_list banlist; - dlink_list exceptlist; - dlink_list invexlist; - dlink_list quietlist; + rb_dlink_list invites; + rb_dlink_list banlist; + rb_dlink_list exceptlist; + rb_dlink_list invexlist; + rb_dlink_list quietlist; time_t first_received_message_time; /* channel flood control */ int received_number_of_privmsgs; @@ -75,6 +72,8 @@ struct Channel unsigned int join_count; /* joins within delta */ unsigned int join_delta; /* last ts of join */ + struct Dictionary *metadata; + unsigned long bants; time_t channelts; char *chname; @@ -82,9 +81,9 @@ struct Channel struct membership { - dlink_node channode; - dlink_node locchannode; - dlink_node usernode; + rb_dlink_node channode; + rb_dlink_node locchannode; + rb_dlink_node usernode; struct Channel *chptr; struct Client *client_p; @@ -93,13 +92,19 @@ struct membership unsigned long bants; }; -#define BANLEN NICKLEN+USERLEN+HOSTLEN+6 +#define BANLEN 195 struct Ban { char *banstr; char *who; time_t when; - dlink_node node; + rb_dlink_node node; +}; + +struct mode_letter +{ + int mode; + char letter; }; struct ChModeChange @@ -111,6 +116,7 @@ struct ChModeChange int caps; int nocaps; int mems; + int override; struct Client *client; }; @@ -121,11 +127,13 @@ struct ChCapCombo int cap_no; }; +typedef void (*ChannelModeFunc)(struct Client *source_p, struct Channel *chptr, + int alevel, int parc, int *parn, + const char **parv, int *errors, int dir, char c, long mode_type); + struct ChannelMode { - void (*set_func) (struct Client * source_p, struct Channel * chptr, - int alevel, int parc, int *parn, - const char **parv, int *errors, int dir, char c, long mode_type); + ChannelModeFunc set_func; long mode_type; }; @@ -141,18 +149,20 @@ typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, #define CHFL_PEON 0x0000 /* normal member of channel */ #define CHFL_CHANOP 0x0001 /* Channel operator */ #define CHFL_VOICE 0x0002 /* the power to speak */ -#define CHFL_DEOPPED 0x0004 /* deopped on sjoin, bounce modes */ #define CHFL_BANNED 0x0008 /* cached as banned */ #define CHFL_QUIETED 0x0010 /* cached as being +q victim */ #define ONLY_SERVERS 0x0020 +#define CHFL_HALFOP 0x0040 +#define CHFL_ADMIN 0x0080 +#define ONLY_OPERS 0x0100 #define ALL_MEMBERS CHFL_PEON -#define ONLY_CHANOPS CHFL_CHANOP -#define ONLY_CHANOPSVOICED (CHFL_CHANOP|CHFL_VOICE) +#define ONLY_CHANOPS (CHFL_ADMIN|CHFL_CHANOP|CHFL_HALFOP) +#define ONLY_CHANOPSVOICED (CHFL_ADMIN|CHFL_CHANOP|CHFL_HALFOP|CHFL_VOICE) +#define is_chmode_h(x) ((x) && (x)->flags & CHFL_HALFOP) /* does not check if halfop is enabled, should typically not be used */ +#define is_chmode_a(x) ((x) && (x)->flags & CHFL_ADMIN) /* does not check if admin is enabled, should typically not be used */ #define is_chanop(x) ((x) && (x)->flags & CHFL_CHANOP) #define is_voiced(x) ((x) && (x)->flags & CHFL_VOICE) -#define is_chanop_voiced(x) ((x) && (x)->flags & (CHFL_CHANOP|CHFL_VOICE)) -#define is_deop(x) ((x) && (x)->flags & CHFL_DEOPPED) #define can_send_banned(x) ((x) && (x)->flags & (CHFL_BANNED|CHFL_QUIETED)) /* channel modes ONLY */ @@ -170,6 +180,15 @@ typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, #define MODE_FREEINVITE 0x0800 /* allow free use of /invite */ #define MODE_FREETARGET 0x1000 /* can be forwarded to without authorization */ #define MODE_DISFORWARD 0x2000 /* disable channel forwarding */ +#define MODE_NOCTCP 0x8000 /* Block CTCPs directed to this channel */ +#define MODE_NONOTICE 0x10000 /* Block notices directed to this channel */ +#define MODE_NOACTION 0x20000 /* Block CTCP ACTION directed to this channel */ +#define MODE_NOKICK 0x40000 /* Disable /kick on this channel */ +#define MODE_NONICK 0x80000 /* Disable /nick for anyone on this channel */ +#define MODE_NOCAPS 0x100000 /* Block messages in all capital letters */ +#define MODE_NOREJOIN 0x200000 /* Block rejoin immediately after kick */ +#define MODE_NOREPEAT 0x400000 /* Block repeat messages */ +#define MODE_NOOPERKICK 0x800000 /* disallow kicking opers */ #define CHFL_BAN 0x10000000 /* ban channel flag */ #define CHFL_EXCEPTION 0x20000000 /* exception to ban channel flag */ @@ -199,7 +218,7 @@ typedef int (*ExtbanFunc)(const char *data, struct Client *client_p, #define EXTBAN_NOMATCH 0 /* valid mask, no match */ #define EXTBAN_MATCH 1 /* matches */ -extern dlink_list global_channel_list; +extern rb_dlink_list global_channel_list; void init_channels(void); struct Channel *allocate_channel(const char *chname); @@ -220,12 +239,17 @@ extern int can_join(struct Client *source_p, struct Channel *chptr, char *key); extern struct membership *find_channel_membership(struct Channel *, struct Client *); extern const char *find_channel_status(struct membership *msptr, int combine); +extern int is_halfop(struct membership *msptr); +extern int is_admin(struct membership *msptr); +extern int is_any_op(struct membership *msptr); +extern int is_chanop_voiced(struct membership *msptr); +extern int can_kick_deop(struct membership *source, struct membership *target); extern void add_user_to_channel(struct Channel *, struct Client *, int flags); extern void remove_user_from_channel(struct membership *); extern void remove_user_from_channels(struct Client *); extern void invalidate_bancache_user(struct Client *); -extern void free_channel_list(dlink_list *); +extern void free_channel_list(rb_dlink_list *); extern int check_channel_name(const char *name); @@ -236,8 +260,12 @@ extern void del_invite(struct Channel *chptr, struct Client *who); const char *channel_modes(struct Channel *chptr, struct Client *who); +extern int has_common_channel(struct Client *client1, struct Client *client2); + extern struct Channel *find_bannickchange_channel(struct Client *client_p); +extern struct Channel *find_nonickchange_channel(struct Client *client_p); + extern void check_spambot_warning(struct Client *source_p, const char *name); extern void check_splitmode(void *); @@ -251,15 +279,19 @@ extern void unset_chcap_usage_counts(struct Client *serv_p); extern void send_cap_mode_changes(struct Client *client_p, struct Client *source_p, struct Channel *chptr, struct ChModeChange foo[], int); +void resv_chan_forcepart(const char *name, const char *reason, int temp_time); + extern void set_channel_mode(struct Client *client_p, struct Client *source_p, struct Channel *chptr, struct membership *msptr, int parc, const char *parv[]); +extern void set_channel_mlock(struct Client *client_p, struct Client *source_p, + struct Channel *chptr, const char *newmlock, int propagate); extern struct ChannelMode chmode_table[256]; extern int add_id(struct Client *source_p, struct Channel *chptr, const char *banid, - dlink_list * list, long mode_type); + rb_dlink_list * list, long mode_type); -extern int del_id(struct Channel *chptr, const char *banid, dlink_list * list, long mode_type); +extern int del_id(struct Channel *chptr, const char *banid, rb_dlink_list * list, long mode_type); extern ExtbanFunc extban_table[256]; @@ -267,5 +299,16 @@ extern int match_extban(const char *banstr, struct Client *client_p, struct Chan extern int valid_extban(const char *banstr, struct Client *client_p, struct Channel *chptr, long mode_type); const char * get_extban_string(void); +extern struct Channel * check_forward(struct Client *source_p, struct Channel *chptr, char *key); +extern void user_join(struct Client * client_p, struct Client * source_p, const char * channels, const char * keys); +extern void do_join_0(struct Client *client_p, struct Client *source_p); +extern int check_channel_name_loc(struct Client *source_p, const char *name); + +extern struct Metadata *channel_metadata_add(struct Channel *target, const char *name, const char *value, int propegate); +extern struct Metadata *channel_metadata_time_add(struct Channel *target, const char *name, time_t timevalue, const char *value); +extern void channel_metadata_delete(struct Channel *target, const char *name, int propegate); +extern struct Metadata *channel_metadata_find(struct Channel *target, const char *name); +extern void channel_metadata_clear(struct Channel *target); + #endif /* INCLUDED_channel_h */