X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fxline.h;h=7ac4aa7f1944eb533933dd1d67ce1902ea7b911e;hb=6d03943426dcce76ba66567a9b18425a5ebb4c0c;hp=d5653f8e0558b16b9913fdadc369198439389e5c;hpb=f1271614679843191bb247c0db2716acb5ac0e4b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/xline.h b/include/xline.h index d5653f8e0..7ac4aa7f1 100644 --- a/include/xline.h +++ b/include/xline.h @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -29,9 +29,6 @@ class CoreExport XLine : public classbase { protected: - /** Creator */ - InspIRCd* ServerInstance; - /** Default 'apply' action. Quits the user. * @param u User to apply the line against * @param line The line typed, used for display purposes in the quit message @@ -48,11 +45,9 @@ class CoreExport XLine : public classbase * @param re The reason of the xline * @param t The line type, should be set by the derived class constructor */ - XLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const std::string &t) - : ServerInstance(Instance), set_time(s_time), duration(d), type(t) + XLine(time_t s_time, long d, std::string src, std::string re, const std::string &t) + : set_time(s_time), duration(d), source(src), reason(re), type(t) { - source = strdup(src); - reason = strdup(re); expiry = set_time + duration; } @@ -60,8 +55,6 @@ class CoreExport XLine : public classbase */ virtual ~XLine() { - free(reason); - free(source); } /** Change creation time of an xline. Updates expiry @@ -121,18 +114,18 @@ class CoreExport XLine : public classbase /** The time the line was added. */ time_t set_time; - + /** The duration of the ban, or 0 if permenant */ long duration; - + /** Source of the ban. This can be a servername or an oper nickname */ - char* source; - + std::string source; + /** Reason for the ban */ - char* reason; + std::string reason; /** Expiry time. Does not contain useful data if the duration is 0. */ @@ -142,6 +135,8 @@ class CoreExport XLine : public classbase * type of line this is. */ const std::string type; + + virtual bool IsBurstable(); }; /** KLine class @@ -158,10 +153,9 @@ class CoreExport KLine : public XLine * @param ident Ident to match * @param host Host to match */ - 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, "K") + KLine(time_t s_time, long d, std::string src, std::string re, std::string ident, std::string host) + : XLine(s_time, d, src, re, "K"), identmask(ident), hostmask(host) { - identmask = strdup(ident); - hostmask = strdup(host); matchtext = this->identmask; matchtext.append("@").append(this->hostmask); } @@ -170,8 +164,6 @@ class CoreExport KLine : public XLine */ ~KLine() { - free(identmask); - free(hostmask); } virtual bool Matches(User *u); @@ -184,12 +176,14 @@ class CoreExport KLine : public XLine virtual const char* Displayable(); + virtual bool IsBurstable(); + /** Ident mask (ident part only) */ - char* identmask; + std::string identmask; /** Host mask (host part only) */ - char* hostmask; + std::string hostmask; std::string matchtext; }; @@ -207,10 +201,9 @@ class CoreExport GLine : public XLine * @param ident Ident to match * @param host Host to match */ - 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, "G") + GLine(time_t s_time, long d, std::string src, std::string re, std::string ident, std::string host) + : XLine(s_time, d, src, re, "G"), identmask(ident), hostmask(host) { - identmask = strdup(ident); - hostmask = strdup(host); matchtext = this->identmask; matchtext.append("@").append(this->hostmask); } @@ -219,8 +212,6 @@ class CoreExport GLine : public XLine */ ~GLine() { - free(identmask); - free(hostmask); } virtual bool Matches(User *u); @@ -235,10 +226,10 @@ class CoreExport GLine : public XLine /** Ident mask (ident part only) */ - char* identmask; + std::string identmask; /** Host mask (host part only) */ - char* hostmask; + std::string hostmask; std::string matchtext; }; @@ -256,18 +247,15 @@ class CoreExport ELine : public XLine * @param ident Ident to match * @param host Host to match */ - 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, "E") + ELine(time_t s_time, long d, std::string src, std::string re, std::string ident, std::string host) + : XLine(s_time, d, src, re, "E"), identmask(ident), hostmask(host) { - identmask = strdup(ident); - hostmask = strdup(host); matchtext = this->identmask; matchtext.append("@").append(this->hostmask); } ~ELine() { - free(identmask); - free(hostmask); } virtual bool Matches(User *u); @@ -284,10 +272,10 @@ class CoreExport ELine : public XLine /** Ident mask (ident part only) */ - char* identmask; + std::string identmask; /** Host mask (host part only) */ - char* hostmask; + std::string hostmask; std::string matchtext; }; @@ -304,16 +292,15 @@ class CoreExport ZLine : public XLine * @param re The reason of the xline * @param ip IP to match */ - 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, "Z") + ZLine(time_t s_time, long d, std::string src, std::string re, std::string ip) + : XLine(s_time, d, src, re, "Z"), ipaddr(ip) { - ipaddr = strdup(ip); } /** Destructor */ ~ZLine() { - free(ipaddr); } virtual bool Matches(User *u); @@ -328,7 +315,7 @@ class CoreExport ZLine : public XLine /** IP mask (no ident part) */ - char* ipaddr; + std::string ipaddr; }; /** QLine class @@ -343,17 +330,15 @@ class CoreExport QLine : public XLine * @param re The reason of the xline * @param nickname Nickname to match */ - 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, "Q") + QLine(time_t s_time, long d, std::string src, std::string re, std::string nickname) + : XLine(s_time, d, src, re, "Q"), nick(nickname) { - nick = strdup(nickname); } /** Destructor */ ~QLine() { - free(nick); - } virtual bool Matches(User *u); @@ -367,25 +352,24 @@ class CoreExport QLine : public XLine /** Nickname mask */ - char* nick; + std::string nick; }; /** Contains an ident and host split into two strings */ typedef std::pair IdentHostPair; -/** XLineFactory is used to generate an XLine pointer, given just the +/** XLineFactory is used to generate an XLine pointer, given just the * pattern, timing information and type of line to create. This is used * for example in the spanningtree module which will call an XLineFactory * to create a new XLine when it is inbound on a server link, so that it * does not have to know the specifics of the internals of an XLine class * and/or how to call its constructor. */ -class CoreExport XLineFactory +class CoreExport XLineFactory : public classbase { protected: - InspIRCd* ServerInstance; std::string type; public: @@ -394,8 +378,8 @@ class CoreExport XLineFactory * @param Instance creator * @param t Type of XLine this factory generates */ - XLineFactory(InspIRCd* Instance, const std::string &t) : ServerInstance(Instance), type(t) { } - + XLineFactory(const std::string &t) : type(t) { } + /** Return the type of XLine this factory generates * @return The type of XLine this factory generates */ @@ -409,7 +393,9 @@ class CoreExport XLineFactory * @param xline_specific_mask The mask string for the line, specific to the XLine type being created. * @return A specialized XLine class of the given type for this factory. */ - virtual XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) = 0; + virtual XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) = 0; + + virtual bool AutoApplyToUserList(XLine* x) { return true; } /** Destructor */ @@ -419,7 +405,6 @@ class CoreExport XLineFactory /* Required forward declarations */ class ServerConfig; -class InspIRCd; class GLineFactory; class ELineFactory; @@ -433,7 +418,7 @@ typedef std::map XLineFactMap; /** A map of XLines indexed by string */ -typedef std::map XLineLookup; +typedef std::map XLineLookup; /** A map of XLineLookup maps indexed by string */ @@ -451,13 +436,9 @@ typedef XLineLookup::iterator LookupIter; * or any other line created by a module. It also manages XLineFactory classes which * can generate a specialized XLine for use by another module. */ -class CoreExport XLineManager +class CoreExport XLineManager : public classbase { protected: - /** The owner/creator of this class - */ - InspIRCd* ServerInstance; - /** Used to hold XLines which have not yet been applied. */ std::vector pending_lines; @@ -488,7 +469,7 @@ class CoreExport XLineManager /** Constructor * @param Instance A pointer to the creator object */ - XLineManager(InspIRCd* Instance); + XLineManager(); /** Destructor */ @@ -511,6 +492,10 @@ class CoreExport XLineManager */ XLineLookup* GetAll(const std::string &type); + /** Remove all lines of a certain type. + */ + void DelAll(const std::string &type); + /** Return all known types of line currently stored by the XLineManager. * @return A vector containing all known line types currently stored in the main list. */ @@ -537,7 +522,7 @@ class CoreExport XLineManager * will generate a new XLine specialized to that type. For example if you * pass the XLineFactory that handles glines some data it will return a * pointer to a GLine, polymorphically represented as XLine. This is used where - * you do not know the full details of the item you wish to create, e.g. in a + * you do not know the full details of the item you wish to create, e.g. in a * server protocol module like m_spanningtree, when you receive xlines from other * servers. * @param xlf XLineFactory pointer to register @@ -597,14 +582,14 @@ class CoreExport XLineManager class CoreExport GLineFactory : public XLineFactory { public: - GLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "G") { } + GLineFactory() : XLineFactory("G") { } /** Generate a GLine */ - XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) { IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask); - return new GLine(ServerInstance, set_time, duration, source, reason, ih.first.c_str(), ih.second.c_str()); + return new GLine(set_time, duration, source, reason, ih.first, ih.second); } }; @@ -613,14 +598,14 @@ class CoreExport GLineFactory : public XLineFactory class CoreExport ELineFactory : public XLineFactory { public: - ELineFactory(InspIRCd* Instance) : XLineFactory(Instance, "E") { } + ELineFactory() : XLineFactory("E") { } /** Generate an ELine */ - XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) { IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask); - return new ELine(ServerInstance, set_time, duration, source, reason, ih.first.c_str(), ih.second.c_str()); + return new ELine(set_time, duration, source, reason, ih.first, ih.second); } }; @@ -629,14 +614,14 @@ class CoreExport ELineFactory : public XLineFactory class CoreExport KLineFactory : public XLineFactory { public: - KLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "K") { } + KLineFactory() : XLineFactory("K") { } /** Generate a KLine */ - XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) { IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask); - return new KLine(ServerInstance, set_time, duration, source, reason, ih.first.c_str(), ih.second.c_str()); + return new KLine(set_time, duration, source, reason, ih.first, ih.second); } }; @@ -645,13 +630,13 @@ class CoreExport KLineFactory : public XLineFactory class CoreExport QLineFactory : public XLineFactory { public: - QLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "Q") { } + QLineFactory() : XLineFactory("Q") { } /** Generate a QLine */ - XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) { - return new QLine(ServerInstance, set_time, duration, source, reason, xline_specific_mask); + return new QLine(set_time, duration, source, reason, xline_specific_mask); } }; @@ -660,15 +645,14 @@ class CoreExport QLineFactory : public XLineFactory class CoreExport ZLineFactory : public XLineFactory { public: - ZLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "Z") { } + ZLineFactory() : XLineFactory("Z") { } /** Generate a ZLine */ - XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) { - return new ZLine(ServerInstance, set_time, duration, source, reason, xline_specific_mask); + return new ZLine(set_time, duration, source, reason, xline_specific_mask); } }; #endif -