/** channel not shown but names are */
#define HiddenChannel(x) ((x) && ((x)->mode.mode & MODE_PRIVATE))
/** channel visible */
-#define ShowChannel(v,c) (PubChannel(c) || find_channel_member((v),(c)) || \
- (IsAnOper(v) && HasPriv(v, PRIV_LIST_CHAN)))
+#define ShowChannel(v,c) (PubChannel(c) || find_channel_member((v),(c)))
#define PubChannel(x) ((!x) || ((x)->mode.mode & \
(MODE_PRIVATE | MODE_SECRET)) == 0)
#define LISTARG_TOPICLIMITS 0x0001
#define LISTARG_SHOWSECRET 0x0002
+#define LISTARG_NEGATEWILDCARD 0x0004
/**
* Maximum acceptable lag time in seconds: A channel younger than
#define BAN_OVERLAPPED 0x0002 /**< ban overlapped, need bounce */
#define BAN_BURSTED 0x0004 /**< Ban part of last BURST */
#define BAN_BURST_WIPEOUT 0x0008 /**< Ban will be wiped at EOB */
+#define BAN_EXCEPTION 0x0010 /**< Ban is an exception */
#define BAN_DEL 0x4000 /**< Ban is being removed */
#define BAN_ADD 0x8000 /**< Ban is being added */
/** A single ban for a channel. */
struct Ban {
- struct Ban* next; /**< next ban in the channel */
+ struct Ban* next; /**< next ban in the channel */
struct irc_in_addr address; /**< addres for BAN_IPMASK bans */
- time_t when; /**< timestamp when ban was added */
- unsigned short flags; /**< modifier flags for the ban */
- unsigned char nu_len; /**< length of nick!user part of banstr */
- unsigned char addrbits; /**< netmask length for BAN_IPMASK bans */
- char *who; /**< name of client that set the ban */
- char *banstr; /**< hostmask that the ban matches */
+ time_t when; /**< timestamp when ban was added */
+ unsigned short flags; /**< modifier flags for the ban */
+ unsigned char nu_len; /**< length of nick!user part of banstr */
+ unsigned char addrbits; /**< netmask length for BAN_IPMASK bans */
+ char who[NICKLEN+1]; /**< name of client that set the ban */
+ char banstr[NICKLEN+USERLEN+HOSTLEN+3]; /**< hostmask that the ban matches */
};
/** Information about a channel */
time_t max_topic_time;
time_t min_topic_time;
unsigned int bucket;
+ char wildcard[CHANNELLEN];
};
struct ModeBuf {
extern int can_join(struct Client *sptr, struct Channel *chptr, char *key);
extern void add_user_to_channel(struct Channel* chptr, struct Client* who,
unsigned int flags, int oplevel);
-extern void cancel_mode(struct Client *sptr, struct Channel *chptr, char m,
- const char *param, int *count);
-extern void add_token_to_sendbuf(char *token, size_t *sblenp, int *firstp,
- int *send_itp, char is_a_ban, int mode);
-extern int add_banid(struct Client *cptr, struct Channel *chptr, char *banid,
- int change, int firsttime);
-extern struct Ban *next_removed_overlapped_ban(void);
-extern void cancel_mode(struct Client *sptr, struct Channel *chptr, char m,
- const char *param, int *count);
extern void make_zombie(struct Membership* member, struct Client* who,
struct Client* cptr, struct Client* sptr,
struct Channel* chptr);
int number_of_zombies(struct Channel *chptr);
extern const char* find_no_nickchange_channel(struct Client* cptr);
-extern struct Membership* IsMember(struct Client *cptr, struct Channel *chptr);
extern struct Membership* find_channel_member(struct Client* cptr, struct Channel* chptr);
extern int member_can_send_to_channel(struct Membership* member, int reveal);
extern int client_can_send_to_channel(struct Client *cptr, struct Channel *chptr, int reveal);
unsigned int flags);
extern int joinbuf_flush(struct JoinBuf *jbuf);
extern struct Ban *make_ban(const char *banstr);
+extern struct Ban *find_ban(struct Client *cptr, struct Ban *banlist);
+extern int apply_ban(struct Ban **banlist, struct Ban *newban, int free);
extern void free_ban(struct Ban *ban);
#endif /* INCLUDED_channel_h */