]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add factories for eline and gline as tests
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 31 Oct 2007 19:26:26 +0000 (19:26 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 31 Oct 2007 19:26:26 +0000 (19:26 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8438 e03df62e-2008-0410-955e-edbf42e46eb7

include/xline.h
src/xline.cpp

index a94161738814063d86d226f0e349d0bbea17c254..edde8d91ad6739d16ac9e1a4e068db7798c6fff5 100644 (file)
@@ -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<std::string, std::string> 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<std::string, std::string> 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<char, XLineFactory*> line_factory;
 
+       GLineFactory* GFact;
+       ELineFactory* EFact;
+
  public:
 
        std::map<char, std::map<std::string, XLine *> > 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
 
index b970ad9e752540974f48d456a4ee531eb1eeb159..a853eb35f9c69d96878670f72e6cc726f238fa28 100644 (file)
@@ -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)