X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/c86edd1d9e5994aea33cfad3164e4827e591e7e6..9172b03e94b4a23862c5ffeab84d2bcec001cb64:/channel/channel.h diff --git a/channel/channel.h b/channel/channel.h index 5b6e40e1..0053682b 100644 --- a/channel/channel.h +++ b/channel/channel.h @@ -11,6 +11,8 @@ #include "../core/hooks.h" #include "../core/error.h" #include "../nick/nick.h" +#include "../chanindex/chanindex.h" +#include "../bans/bans.h" #include #include @@ -29,25 +31,11 @@ #define CHANMODE_DELJOINS 0x0800 #define CHANMODE_NOQUITMSG 0x1000 #define CHANMODE_NONOTICE 0x2000 +#define CHANMODE_MODNOAUTH 0x4000 +#define CHANMODE_SINGLETARG 0x8000 -#define CHANMODE_ALL 0x3FFF - -#define CHANBAN_NICKEXACT 0x0001 /* Ban includes an exact nick (no wildcards) */ -#define CHANBAN_NICKMASK 0x0002 /* Ban includes a nick mask with wildcards */ -#define CHANBAN_NICKANY 0x0004 /* Ban is *!.. */ -#define CHANBAN_NICKNULL 0x0008 /* Ban has no nick */ -#define CHANBAN_USEREXACT 0x0010 /* Ban includes an exact user (no wildcards) */ -#define CHANBAN_USERMASK 0x0020 /* Ban includes a user mask with wildcards */ -#define CHANBAN_USERANY 0x0040 /* Ban is ..!*@.. */ -#define CHANBAN_USERNULL 0x0080 /* Ban has no user */ -#define CHANBAN_HOSTEXACT 0x0100 /* Ban includes an exact host */ -#define CHANBAN_HOSTMASK 0x0200 /* Ban includes a host mask */ -#define CHANBAN_HOSTANY 0x0400 /* Ban is ..@* */ -#define CHANBAN_HOSTNULL 0x0800 /* Ban has no host */ -#define CHANBAN_IP 0x1000 /* Ban could match against IP address */ -#define CHANBAN_CIDR 0x2000 /* Ban includes a CIDR mask (e.g. 192.168.0.0/16 ) */ -#define CHANBAN_INVALID 0x4000 /* Ban is nonsensical, i.e. has at least one really NULL component*/ -#define CHANBAN_HIDDENHOST 0x8000 /* Ban could possibly match hidden host */ +#define CHANMODE_ALL 0xFFFF +#define CHANMODE_DEFAULT 0x2203 /* +ntCN */ #define IsNoExtMsg(x) ((x)->flags & CHANMODE_NOEXTMSG) #define IsTopicLimit(x) ((x)->flags & CHANMODE_TOPICLIMIT) @@ -63,6 +51,8 @@ #define IsDelJoins(x) ((x)->flags & CHANMODE_DELJOINS) #define IsNoQuitMsg(x) ((x)->flags & CHANMODE_NOQUITMSG) #define IsNoNotice(x) ((x)->flags & CHANMODE_NONOTICE) +#define IsModNoAuth(x) ((x)->flags & CHANMODE_MODNOAUTH) +#define IsSingleTarg(x) ((x)->flags & CHANMODE_SINGLETARG) #define SetNoExtMsg(x) ((x)->flags |= CHANMODE_NOEXTMSG) #define SetTopicLimit(x) ((x)->flags |= CHANMODE_TOPICLIMIT) @@ -78,6 +68,8 @@ #define SetDelJoins(x) ((x)->flags |= CHANMODE_DELJOINS) #define SetNoQuitMsg(x) ((x)->flags |= CHANMODE_NOQUITMSG) #define SetNoNotice(x) ((x)->flags |= CHANMODE_NONOTICE) +#define SetModNoAuth(x) ((x)->flags |= CHANMODE_MODNOAUTH) +#define SetSingleTarg(x) ((x)->flags |= CHANMODE_SINGLETARG) #define ClearNoExtMsg(x) ((x)->flags &= ~CHANMODE_NOEXTMSG) #define ClearTopicLimit(x) ((x)->flags &= ~CHANMODE_TOPICLIMIT) @@ -93,6 +85,8 @@ #define ClearDelJoins(x) ((x)->flags &= ~CHANMODE_DELJOINS) #define ClearNoQuitMsg(x) ((x)->flags &= ~CHANMODE_NOQUITMSG) #define ClearNoNotice(x) ((x)->flags &= ~CHANMODE_NONOTICE) +#define ClearModNoAuth(x) ((x)->flags &= ~CHANMODE_MODNOAUTH) +#define ClearSingleTarg(x) ((x)->flags &= ~CHANMODE_SINGLETARG) #define CUMODE_OP 0x80000000 #define CUMODE_VOICE 0x40000000 @@ -108,32 +102,10 @@ #define MAGIC_REMOTE_JOIN_TS 1270080000 -#define CHANNELHASHSIZE 60000 -#define MAXCHANNELEXTS 7 - #define MODECHANGE_MODES 0x00000001 #define MODECHANGE_USERS 0x00000002 #define MODECHANGE_BANS 0x00000004 -struct channel; - -typedef struct chanindex { - sstring *name; - struct channel *channel; - struct chanindex *next; - unsigned int marker; - void *exts[MAXCHANNELEXTS]; -} chanindex; - -typedef struct chanban { - flag_t flags; - sstring *nick; - sstring *user; - sstring *host; - time_t timeset; - struct chanban *next; -} chanban; - typedef struct chanuserhash { unsigned short hashsize; unsigned short totalusers; @@ -154,7 +126,6 @@ typedef struct channel { extern unsigned long nouser; extern const flag cmodeflags[]; -extern chanindex *chantable[CHANNELHASHSIZE]; /* functions from channel.c */ int addnicktochannel(channel *cp, long numeric); @@ -167,6 +138,7 @@ void removechannelfromhash(channel *cp); void addordelnick(int hooknum, void *arg); void onconnect(int hooknum, void *arg); unsigned int countuniquehosts(channel *cp); +void clean_key(char *s); /* functions from channelhandlers.c */ int handleburstmsg(void *source, int cargc, char **cargv); @@ -177,6 +149,7 @@ int handlekickmsg(void *source, int cargc, char **cargv); int handletopicmsg(void *source, int cargc, char **cargv); int handlemodemsg(void *source, int cargc, char **cargv); int handleclearmodemsg(void *source, int cargc, char **cargv); +void handlewhoischannels(int hooknum, void *arg); /* functions from chanuserhash.c */ void rehashchannel(channel *cp); @@ -184,27 +157,17 @@ int addnumerictochanuserhash(chanuserhash *cuh, long numeric); unsigned long *getnumerichandlefromchanhash(chanuserhash *cuh, long numeric); /* functions from channelalloc.c */ -void initchannelalloc(); channel *newchan(); void freechan(channel *cp); chanuserhash *newchanuserhash(int numbuckets); void freechanuserhash(chanuserhash *cuhp); -chanban *getchanban(); -void freechanban(chanban *cbp); -chanindex *getchanindex(); -void freechanindex(chanindex *cip); /* functions from channelbans.c */ -chanban *makeban(const char *mask); -int banoverlap(const chanban *bana, const chanban *banb); -int banequal(chanban *bana, chanban *banb); -char *bantostring(chanban *bp); -char *bantostringdebug(chanban *bp); -void setban(channel *cp, const char *ban); +int setban(channel *cp, const char *ban); int clearban(channel *cp, const char *ban, int optional); void clearallbans(channel *cp); -int nickmatchban(nick *np, chanban *bp); -int nickbanned(nick *np, channel *cp); +int nickmatchban(nick *np, chanban *bp, int visibleonly); +int nickbanned(nick *np, channel *cp, int visibleonly); /* functions from channelindex.c */ void initchannelindex();