From: brain Date: Wed, 31 Oct 2007 19:26:26 +0000 (+0000) Subject: Add factories for eline and gline as tests X-Git-Tag: v2.0.23~4265 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=31eaefa6a6244bc1226bacf9b3d9e527f49f035f;p=user%2Fhenk%2Fcode%2Finspircd.git Add factories for eline and gline as tests git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8438 e03df62e-2008-0410-955e-edbf42e46eb7 --- diff --git a/include/xline.h b/include/xline.h index a94161738..edde8d91a 100644 --- a/include/xline.h +++ b/include/xline.h @@ -343,16 +343,21 @@ class CoreExport QLine : public XLine char* nick; }; -class XLineFactory +/** Contains an ident and host split into two strings + */ +typedef std::pair IdentHostPair; + + +class CoreExport XLineFactory { protected: - const char type; InspIRCd* ServerInstance; + const char type; public: - XLineFactory(const char t) : type(t) { } + XLineFactory(InspIRCd* Instance, const char t) : ServerInstance(Instance), type(t) { } virtual const char GetType() { return type; } @@ -366,9 +371,8 @@ class XLineFactory class ServerConfig; class InspIRCd; -/** Contains an ident and host split into two strings - */ -typedef std::pair IdentHostPair; +class GLineFactory; +class ELineFactory; /** XLineManager is a class used to manage glines, klines, elines, zlines and qlines. */ @@ -391,6 +395,9 @@ class CoreExport XLineManager std::map line_factory; + GLineFactory* GFact; + ELineFactory* EFact; + public: std::map > lookup_lines; @@ -400,6 +407,8 @@ class CoreExport XLineManager */ XLineManager(InspIRCd* Instance); + ~XLineManager(); + /** Split an ident and host into two seperate strings. * This allows for faster matching. */ @@ -540,5 +549,30 @@ class CoreExport XLineManager void eline_set_creation_time(const char* host, time_t create_time); }; +class CoreExport GLineFactory : public XLineFactory +{ + public: + GLineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'G') { } + + XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* 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()); + } +}; + +class CoreExport ELineFactory : public XLineFactory +{ + public: + ELineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'E') { } + + XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* 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()); + } +}; + + #endif diff --git a/src/xline.cpp b/src/xline.cpp index b970ad9e7..a853eb35f 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -422,6 +422,20 @@ void XLineManager::stats_e(User* user, string_list &results) XLineManager::XLineManager(InspIRCd* Instance) : ServerInstance(Instance) { + GFact = new GLineFactory(Instance); + EFact = new ELineFactory(Instance); + + RegisterFactory(GFact); + RegisterFactory(EFact); +} + +XLineManager::~XLineManager() +{ + UnregisterFactory(GFact); + UnregisterFactory(EFact); + + delete GFact; + delete EFact; } void XLine::Apply(User* u)