+ char upass[KEYLEN + 1];
+ char apass[KEYLEN + 1];
+};
+
+#define BAN_IPMASK 0x0001 /**< ban mask is an IP-number mask */
+#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 irc_in_addr address; /**< address 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[NICKLEN+1]; /**< name of client that set the ban */
+ char banstr[NICKLEN+USERLEN+HOSTLEN+3]; /**< hostmask that the ban matches */