X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fxline.h;h=c2c5e54d776967437e9f69f43691abfd0311a097;hb=402bb37950becc1577d7daf6cd6f088d01234010;hp=794f9b7941e1a7d1d2b0994eb2010e83809ec300;hpb=9d5687922cffdf938c97c52a66abd86529dec91d;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/xline.h b/include/xline.h index 794f9b794..c2c5e54d7 100644 --- a/include/xline.h +++ b/include/xline.h @@ -33,7 +33,12 @@ const int APPLY_ALL = APPLY_GLINES | APPLY_KLINES | APPLY_QLINES | APPLY_ZLINES */ class CoreExport XLine : public classbase { - public: + protected: + + InspIRCd* ServerInstance; + void DefaultApply(User* u, char line); + + public: /** Create an XLine. * @param s_time The set time @@ -41,8 +46,8 @@ class CoreExport XLine : public classbase * @param src The sender of the xline * @param re The reason of the xline */ - XLine(time_t s_time, long d, const char* src, const char* re) - : set_time(s_time), duration(d) + XLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re) + : ServerInstance(Instance), set_time(s_time), duration(d) { source = strdup(src); reason = strdup(re); @@ -59,7 +64,11 @@ class CoreExport XLine : public classbase /** Returns true whether or not the given user is covered by this line. */ - virtual bool Matches(User *u); + virtual bool Matches(User *u) = 0; + + virtual bool Matches(const std::string &str); + + virtual void Apply(User* u); /** The time the line was added. */ @@ -80,6 +89,10 @@ class CoreExport XLine : public classbase /** Expiry time */ time_t expiry; + + /** Q, K, etc. Don't change this. Constructors set it. + */ + char type; }; /** KLine class @@ -95,10 +108,11 @@ class CoreExport KLine : public XLine * @param ident Ident to match * @param host Host to match */ - KLine(time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(s_time, d, src, re) + KLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(Instance, s_time, d, src, re) { identmask = strdup(ident); hostmask = strdup(host); + type = 'K'; } /** Destructor @@ -109,6 +123,10 @@ class CoreExport KLine : public XLine free(hostmask); } + virtual bool Matches(User *u); + + virtual void Apply(User* u); + /** Ident mask */ char* identmask; @@ -130,10 +148,11 @@ class CoreExport GLine : public XLine * @param ident Ident to match * @param host Host to match */ - GLine(time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(s_time, d, src, re) + GLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(Instance, s_time, d, src, re) { identmask = strdup(ident); hostmask = strdup(host); + type = 'G'; } /** Destructor @@ -144,6 +163,10 @@ class CoreExport GLine : public XLine free(hostmask); } + virtual bool Matches(User *u); + + virtual void Apply(User* u); + /** Ident mask */ char* identmask; @@ -165,10 +188,11 @@ class CoreExport ELine : public XLine * @param ident Ident to match * @param host Host to match */ - ELine(time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(s_time, d, src, re) + ELine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ident, const char* host) : XLine(Instance, s_time, d, src, re) { identmask = strdup(ident); hostmask = strdup(host); + type = 'E'; } ~ELine() @@ -177,6 +201,8 @@ class CoreExport ELine : public XLine free(hostmask); } + virtual bool Matches(User *u); + /** Ident mask */ char* identmask; @@ -197,9 +223,10 @@ class CoreExport ZLine : public XLine * @param re The reason of the xline * @param ip IP to match */ - ZLine(time_t s_time, long d, const char* src, const char* re, const char* ip) : XLine(s_time, d, src, re) + ZLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* ip) : XLine(Instance, s_time, d, src, re) { ipaddr = strdup(ip); + type = 'Z'; } /** Destructor @@ -209,6 +236,12 @@ class CoreExport ZLine : public XLine free(ipaddr); } + virtual bool Matches(User *u); + + virtual bool Matches(const std::string &str); + + virtual void Apply(User* u); + /** IP mask */ char* ipaddr; @@ -226,9 +259,10 @@ class CoreExport QLine : public XLine * @param re The reason of the xline * @param nickname Nickname to match */ - QLine(time_t s_time, long d, const char* src, const char* re, const char* nickname) : XLine(s_time, d, src, re) + QLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char* nickname) : XLine(Instance, s_time, d, src, re) { nick = strdup(nickname); + type = 'Q'; } /** Destructor @@ -236,7 +270,13 @@ class CoreExport QLine : public XLine ~QLine() { free(nick); + } + virtual bool Matches(User *u); + + virtual bool Matches(const std::string &str); + + virtual void Apply(User* u); /** Nickname mask */ @@ -294,6 +334,10 @@ class CoreExport XLineManager /** This functor is used by the std::sort() function to keep all lines in order */ static bool XSortComparison (const XLine *one, const XLine *two); + + /** Used to hold XLines which have not yet been applied. + */ + std::vector pending_lines; public: /* Lists for temporary lines with an expiry time */ @@ -414,11 +458,11 @@ class CoreExport XLineManager */ GLine* matches_gline(User* user); - /** Check if a IP matches a ZLine - * @param ipaddr The IP to check against + /** Check if a user's IP matches a ZLine + * @param user The user to check against * @return The reason for the line if there is a match, or NULL if there is no match */ - ZLine* matches_zline(const char* ipaddr); + ZLine* matches_zline(User *user); /** Check if a hostname matches a KLine * @param user The user to check against