X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=inline;f=include%2Fxline.h;h=db6b638629ebbaeae8d22c224697f0f324d59ff0;hb=d01372ab64ac1844175c8858aee2a04f02f0aba9;hp=bb59a97355bd2acea87cc74fe3d38680ccd5450d;hpb=f2acdbc3820f0f4f5ef76a0a64e73d2a320df91f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/xline.h b/include/xline.h index bb59a9735..db6b63862 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); @@ -56,6 +61,15 @@ class CoreExport XLine : public classbase free(reason); free(source); } + + /** Returns true whether or not the given user is covered by this line. + */ + virtual bool Matches(User *u) = 0; + + virtual bool Matches(const std::string &str); + + virtual void Apply(User* u); + /** The time the line was added. */ time_t set_time; @@ -75,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 @@ -90,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 @@ -104,6 +123,10 @@ class CoreExport KLine : public XLine free(hostmask); } + virtual bool Matches(User *u); + + virtual void Apply(User* u); + /** Ident mask */ char* identmask; @@ -125,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 @@ -139,6 +163,10 @@ class CoreExport GLine : public XLine free(hostmask); } + virtual bool Matches(User *u); + + virtual void Apply(User* u); + /** Ident mask */ char* identmask; @@ -160,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() @@ -172,6 +201,10 @@ class CoreExport ELine : public XLine free(hostmask); } + virtual bool Matches(User *u); + + virtual void Apply(User* u); + /** Ident mask */ char* identmask; @@ -192,9 +225,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 @@ -204,6 +238,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; @@ -221,9 +261,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 @@ -231,7 +272,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 */ @@ -286,25 +333,13 @@ class CoreExport XLineManager */ InspIRCd* ServerInstance; - /** This functor is used by the std::sort() function to keep glines in order - */ - static bool GSortComparison ( const GLine* one, const GLine* two ); - - /** This functor is used by the std::sort() function to keep elines in order - */ - static bool ESortComparison ( const ELine* one, const ELine* two ); - - /** This functor is used by the std::sort() function to keep zlines in order + /** This functor is used by the std::sort() function to keep all lines in order */ - static bool ZSortComparison ( const ZLine* one, const ZLine* two ); + static bool XSortComparison (const XLine *one, const XLine *two); - /** This functor is used by the std::sort() function to keep klines in order + /** Used to hold XLines which have not yet been applied. */ - static bool KSortComparison ( const KLine* one, const KLine* two ); - - /** This functor is used by the std::sort() function to keep qlines in order - */ - static bool QSortComparison ( const QLine* one, const QLine* two ); + std::vector pending_lines; public: /* Lists for temporary lines with an expiry time */ @@ -323,23 +358,6 @@ class CoreExport XLineManager /** Temporary ELines */ std::vector elines; - /* Seperate lists for perm XLines that isnt checked by expiry functions */ - - /** Permenant KLines */ - std::vector pklines; - - /** Permenant GLines */ - std::vector pglines; - - /** Permenant ZLines */ - std::vector pzlines; - - /** Permenant QLines */ - std::vector pqlines; - - /** Permenant ELines */ - std::vector pelines; - /** Constructor * @param Instance A pointer to the creator object */ @@ -357,7 +375,7 @@ class CoreExport XLineManager * @param hostmask The hostmask * @return True if the line was added successfully */ - bool add_gline(long duration, const char* source, const char* reason, const char* hostmask); + bool AddGLine(long duration, const char* source, const char* reason, const char* hostmask); /** Add a new QLine * @param duration The duration of the line @@ -366,7 +384,7 @@ class CoreExport XLineManager * @param nickname The nickmask * @return True if the line was added successfully */ - bool add_qline(long duration, const char* source, const char* reason, const char* nickname); + bool AddQLine(long duration, const char* source, const char* reason, const char* nickname); /** Add a new ZLine * @param duration The duration of the line @@ -375,7 +393,7 @@ class CoreExport XLineManager * @param ipaddr The IP mask * @return True if the line was added successfully */ - bool add_zline(long duration, const char* source, const char* reason, const char* ipaddr); + bool AddZLine(long duration, const char* source, const char* reason, const char* ipaddr); /** Add a new KLine * @param duration The duration of the line @@ -384,7 +402,7 @@ class CoreExport XLineManager * @param hostmask The hostmask * @return True if the line was added successfully */ - bool add_kline(long duration, const char* source, const char* reason, const char* hostmask); + bool AddKLine(long duration, const char* source, const char* reason, const char* hostmask); /** Add a new ELine * @param duration The duration of the line @@ -393,113 +411,110 @@ class CoreExport XLineManager * @param hostmask The hostmask * @return True if the line was added successfully */ - bool add_eline(long duration, const char* source, const char* reason, const char* hostmask); + bool AddELine(long duration, const char* source, const char* reason, const char* hostmask); /** Delete a GLine * @param hostmask The host to remove * @param simulate If this is true, don't actually remove the line, just return * @return True if the line was deleted successfully */ - bool del_gline(const char* hostmask, bool simulate = false); + bool DelGLine(const char* hostmask, bool simulate = false); /** Delete a QLine * @param nickname The nick to remove * @param simulate If this is true, don't actually remove the line, just return * @return True if the line was deleted successfully */ - bool del_qline(const char* nickname, bool simulate = false); + bool DelQLine(const char* nickname, bool simulate = false); /** Delete a ZLine * @param ipaddr The IP to remove * @param simulate If this is true, don't actually remove the line, just return * @return True if the line was deleted successfully */ - bool del_zline(const char* ipaddr, bool simulate = false); + bool DelZLine(const char* ipaddr, bool simulate = false); /** Delete a KLine * @param hostmask The host to remove * @param simulate If this is true, don't actually remove the line, just return * @return True if the line was deleted successfully */ - bool del_kline(const char* hostmask, bool simulate = false); + bool DelKLine(const char* hostmask, bool simulate = false); /** Delete a ELine * @param hostmask The host to remove * @param simulate If this is true, don't actually remove the line, just return * @return True if the line was deleted successfully */ - bool del_eline(const char* hostmask, bool simulate = false); + bool DelELine(const char* hostmask, bool simulate = false); /** Check if a nickname matches a QLine * @return nick The nick to check against * @return The reason for the line if there is a match, or NULL if there is no match */ - QLine* matches_qline(const char* nick, bool permonly = false); + QLine* matches_qline(const char* nick); /** Check if a hostname matches a GLine * @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 */ - GLine* matches_gline(userrec* user, bool permonly = false); + 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, bool permonly = false); + ZLine* matches_zline(User *user); /** Check if a hostname matches a KLine * @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 */ - KLine* matches_kline(userrec* user, bool permonly = false); + KLine* matches_kline(User* user); /** Check if a hostname matches a ELine * @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 */ - ELine* matches_exception(userrec* user, bool permonly = false); + ELine* matches_exception(User* user); - /** Expire any pending non-permenant lines + /** Expire any lines that should be expired. */ void expire_lines(); - /** Apply any new lines - * @param What The types of lines to apply, from the set - * APPLY_GLINES | APPLY_KLINES | APPLY_QLINES | APPLY_ZLINES | APPLY_ALL - * | APPLY_LOCAL_ONLY + /** Apply any new lines that are pending to be applied */ - void apply_lines(const int What); + void ApplyLines(); /** Handle /STATS K * @param user The username making the query * @param results The string_list to receive the results */ - void stats_k(userrec* user, string_list &results); + void stats_k(User* user, string_list &results); /** Handle /STATS G * @param user The username making the query * @param results The string_list to receive the results */ - void stats_g(userrec* user, string_list &results); + void stats_g(User* user, string_list &results); /** Handle /STATS Q * @param user The username making the query * @param results The string_list to receive the results */ - void stats_q(userrec* user, string_list &results); + void stats_q(User* user, string_list &results); /** Handle /STATS Z * @param user The username making the query * @param results The string_list to receive the results */ - void stats_z(userrec* user, string_list &results); + void stats_z(User* user, string_list &results); /** Handle /STATS E * @param user The username making the query * @param results The string_list to receive the results */ - void stats_e(userrec* user, string_list &results); + void stats_e(User* user, string_list &results); /** Change creation time of a GLine * @param host The hostname to change