X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=include%2Fchannel.h;h=57ed5dc4a91bc37424653c0970de12f06230891c;hb=refs%2Fheads%2Fupstream-ssl;hp=11ef0120616dd4257eb183b4a0f9445315b0f9b6;hpb=c360f47ee46cc67358df6efcf117f3b8d0e244a8;p=ircu2.10.12-pk.git diff --git a/include/channel.h b/include/channel.h index 11ef012..57ed5dc 100644 --- a/include/channel.h +++ b/include/channel.h @@ -30,6 +30,9 @@ #include #define INCLUDED_sys_types_h #endif +#ifndef INCLUDED_res_h +#include "res.h" +#endif struct SLink; struct Client; @@ -42,7 +45,6 @@ struct Client; #define MODEBUFLEN 200 /**< Maximum length of a mode */ #define KEYLEN 23 /**< Maximum length of a key */ -#define PASSLEN 23 /**< Maximum length of a password */ #define CHANNELLEN 200 /**< Maximum length of a channel */ #define MAXJOINARGS 15 /**< number of slots for join buffer */ @@ -99,6 +101,8 @@ struct Client; #define MODE_LIMIT 0x0400 /**< +l Limit */ #define MODE_REGONLY 0x0800 /**< Only +r users may join */ #define MODE_DELJOINS 0x1000 /**< New join messages are delayed */ +#define MODE_REGISTERED 0x2000 /**< Channel marked as registered + * (for future semantic expansion) */ #define MODE_SAVE 0x20000 /**< save this mode-with-arg 'til * later */ #define MODE_FREE 0x40000 /**< string needs to be passed to @@ -113,7 +117,7 @@ struct Client; #define MODE_WPARAS (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS) /** Available Channel modes */ -#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrD" : "biklmnopstvrD" +#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrDdR" : "biklmnopstvrDdR" /** Available Channel modes that take parameters */ #define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUv" : "bklov" @@ -123,8 +127,7 @@ struct Client; /** 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) @@ -147,6 +150,8 @@ typedef enum ChannelGetType { #define LISTARG_TOPICLIMITS 0x0001 #define LISTARG_SHOWSECRET 0x0002 +#define LISTARG_NEGATEWILDCARD 0x0004 +#define LISTARG_SHOWMODES 0x0008 /** * Maximum acceptable lag time in seconds: A channel younger than @@ -161,19 +166,6 @@ typedef enum ChannelGetType { */ #define TS_LAG_TIME 86400 -/** - * A Magic TS that is used for channels that are created by JOIN, - * a channel with this TS accepts all TS without complaining that - * it might receive later via MODE or CREATE. - * - * Part of the P9 compatibility, shouldn't occur on a P10 network. - */ -#define MAGIC_REMOTE_JOIN_TS 1270080000 - -/** - * used in can_join to determine if an oper forced a join on a channel - */ -#define MAGIC_OPER_OVERRIDE 1000 extern const char* const PartFmt1; @@ -245,24 +237,28 @@ struct Mode { unsigned int mode; unsigned int limit; char key[KEYLEN + 1]; - char upass[PASSLEN + 1]; - char apass[PASSLEN + 1]; + 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 */ - time_t when; /**< timestamp when ban was added */ - unsigned int flags; /**< modifier flags for the ban */ - char *who; /**< name of client that set the ban */ - char *banstr; /**< hostmask that the ban matches */ + 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 */ }; /** Information about a channel */ @@ -297,6 +293,7 @@ struct ListingArgs { time_t max_topic_time; time_t min_topic_time; unsigned int bucket; + char wildcard[CHANNELLEN]; }; struct ModeBuf { @@ -314,6 +311,7 @@ struct ModeBuf { char *mbma_string; /**< A string */ struct Client *mbma_client; /**< A client */ } mbm_arg; /**< The mode argument */ + unsigned short mbm_oplevel; /**< Oplevel for a bounce */ } mb_modeargs[MAXMODEPARAMS]; /**< A mode w/args */ }; @@ -336,6 +334,7 @@ struct ModeBuf { #define MB_UINT(mb, i) ((mb)->mb_modeargs[(i)].mbm_arg.mbma_uint) #define MB_STRING(mb, i) ((mb)->mb_modeargs[(i)].mbm_arg.mbma_string) #define MB_CLIENT(mb, i) ((mb)->mb_modeargs[(i)].mbm_arg.mbma_client) +#define MB_OPLEVEL(mb, i) ((mb)->mb_modeargs[(i)].mbm_oplevel) /** A buffer represeting a list of joins to send */ struct JoinBuf { @@ -361,7 +360,6 @@ extern int LocalChanOperMode; /* * Proto types */ -extern void clean_channelname(char* name); extern void channel_modes(struct Client *cptr, char *mbuf, char *pbuf, int buflen, struct Channel *chptr, struct Membership *member); @@ -376,18 +374,8 @@ extern struct Membership* find_member_link(struct Channel * chptr, const struct Client* cptr); extern int sub1_from_channel(struct Channel* chptr); extern int destruct_channel(struct Channel* chptr); -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); @@ -396,7 +384,6 @@ void add_invite(struct Client *cptr, 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); @@ -418,6 +405,7 @@ extern char *pretty_mask(char *mask); extern void del_invite(struct Client *cptr, struct Channel *chptr); extern void list_set_default(void); /* this belongs elsewhere! */ +extern void RevealDelayedJoinIfNeeded(struct Client *sptr, struct Channel *chptr); extern void RevealDelayedJoin(struct Membership *member); extern void CheckDelayedJoins(struct Channel *chan); @@ -430,7 +418,7 @@ extern void modebuf_mode_uint(struct ModeBuf *mbuf, unsigned int mode, extern void modebuf_mode_string(struct ModeBuf *mbuf, unsigned int mode, char *string, int free); extern void modebuf_mode_client(struct ModeBuf *mbuf, unsigned int mode, - struct Client *client); + struct Client *client, int oplevel); extern int modebuf_flush(struct ModeBuf *mbuf); extern void modebuf_extract(struct ModeBuf *mbuf, char *buf); @@ -458,6 +446,8 @@ extern void joinbuf_join(struct JoinBuf *jbuf, struct Channel *chan, 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 */