]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
The rest doesnt compile yet, dont bother :p
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 31 Oct 2007 17:00:23 +0000 (17:00 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 31 Oct 2007 17:00:23 +0000 (17:00 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8427 e03df62e-2008-0410-955e-edbf42e46eb7

include/xline.h
src/xline.cpp

index 6540d57f623f1abd64e03dae74424bbe7ef104cb..5b81eef828926528527e370a900c7e250a4fa0b9 100644 (file)
@@ -46,8 +46,8 @@ class CoreExport XLine : public classbase
         * @param src The sender of the xline
         * @param re The reason of the xline
         */
-       XLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re)
-               : ServerInstance(Instance), set_time(s_time), duration(d)
+       XLine(InspIRCd* Instance, time_t s_time, long d, const char* src, const char* re, const char t)
+               : ServerInstance(Instance), set_time(s_time), duration(d), type(t)
        {
                source = strdup(src);
                reason = strdup(re);
@@ -66,14 +66,21 @@ class CoreExport XLine : public classbase
         */
        virtual bool Matches(User *u) = 0;
 
+       /** Returns true wether or not the given string exactly matches the gline
+        * (no wildcard use in this method) -- used for removal of a line
+        */
+       virtual bool MatchesLiteral(std::string &str) = 0;
+
        virtual bool Matches(const std::string &str);
 
        virtual void Apply(User* u);
 
-       virtual void Unset() { };
+       virtual void Unset() { }
 
        virtual void DisplayExpiry() = 0;
 
+       virtual void OnAdd() { }
+
        /** The time the line was added.
         */
        time_t set_time;
@@ -96,7 +103,7 @@ class CoreExport XLine : public classbase
 
        /** Q, K, etc. Don't change this. Constructors set it.
         */
-       char type;
+       const char type;
 };
 
 /** KLine class
@@ -112,11 +119,10 @@ 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)
+       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')
        {
                identmask = strdup(ident);
                hostmask = strdup(host);
-               type = 'K';
        }
 
        /** Destructor
@@ -129,6 +135,8 @@ class CoreExport KLine : public XLine
 
        virtual bool Matches(User *u);
 
+       virtual bool MatchesLiteral(const std::string &str);
+
        virtual void Apply(User* u);
 
        virtual void DisplayExpiry();
@@ -154,11 +162,10 @@ 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)
+       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')
        {
                identmask = strdup(ident);
                hostmask = strdup(host);
-               type = 'G';
        }
 
        /** Destructor
@@ -171,6 +178,8 @@ class CoreExport GLine : public XLine
 
        virtual bool Matches(User *u);
 
+       virtual bool MatchesLiteral(const std::string &str);
+
        virtual void Apply(User* u);
 
        virtual void DisplayExpiry();
@@ -196,11 +205,10 @@ 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)
+       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')
        {
                identmask = strdup(ident);
                hostmask = strdup(host);
-               type = 'E';
        }
 
        ~ELine()
@@ -211,10 +219,14 @@ class CoreExport ELine : public XLine
 
        virtual bool Matches(User *u);
 
+       virtual bool MatchesLiteral(const std::string &str);
+
        virtual void Unset();
 
        virtual void DisplayExpiry();
 
+       virtual void OnAdd();
+
        /** Ident mask
         */
        char* identmask;
@@ -235,10 +247,9 @@ 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)
+       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')
        {
                ipaddr = strdup(ip);
-               type = 'Z';
        }
 
        /** Destructor
@@ -252,6 +263,8 @@ class CoreExport ZLine : public XLine
 
        virtual bool Matches(const std::string &str);
 
+       virtual bool MatchesLiteral(const std::string &str);
+
        virtual void Apply(User* u);
 
        virtual void DisplayExpiry();
@@ -273,10 +286,9 @@ 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)
+       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')
        {
                nick = strdup(nickname);
-               type = 'Q';
        }
 
        /** Destructor
@@ -290,6 +302,8 @@ class CoreExport QLine : public XLine
 
        virtual bool Matches(const std::string &str);
 
+       virtual bool MatchesLiteral(const std::string &str);
+
        virtual void Apply(User* u);
 
        virtual void DisplayExpiry();
@@ -357,43 +371,7 @@ class CoreExport XLineManager
         * @param hostmask The hostmask
         * @return True if the line was added successfully
         */
-       bool AddGLine(long duration, const char* source, const char* reason, const char* hostmask);
-
-       /** Add a new QLine
-        * @param duration The duration of the line
-        * @param source The source of the line
-        * @param reason The reason for the line
-        * @param nickname The nickmask
-        * @return True if the line was added successfully
-        */
-       bool AddQLine(long duration, const char* source, const char* reason, const char* nickname);
-
-       /** Add a new ZLine
-        * @param duration The duration of the line
-        * @param source The source of the line
-        * @param reason The reason for the line
-        * @param ipaddr The IP mask
-        * @return True if the line was added successfully
-        */
-       bool AddZLine(long duration, const char* source, const char* reason, const char* ipaddr);
-
-       /** Add a new KLine
-        * @param duration The duration of the line
-        * @param source The source of the line
-        * @param reason The reason for the line
-        * @param hostmask The hostmask
-        * @return True if the line was added successfully
-        */
-       bool AddKLine(long duration, const char* source, const char* reason, const char* hostmask);
-
-       /** Add a new ELine
-        * @param duration The duration of the line
-        * @param source The source of the line
-        * @param reason The reason for the line
-        * @param hostmask The hostmask
-        * @return True if the line was added successfully
-        */
-       bool AddELine(long duration, const char* source, const char* reason, const char* hostmask);
+       bool AddLine(XLine* line);
 
        /** Delete a GLine
         * @param hostmask The host to remove
index 08226f650bf1df0c4e33e7ef9370a710c9725af0..9a56450ff7073fe05c072ccf8506216eaa55de73 100644 (file)
@@ -125,104 +125,36 @@ IdentHostPair XLineManager::IdentSplit(const std::string &ident_and_host)
 
 // adds a g:line
 
-bool XLineManager::AddGLine(long duration, const char* source,const char* reason,const char* hostmask)
+/*bool XLineManager::AddELine(long duration, const char* source, const char* reason, const char* hostmask)*/
+bool XLineManager::AddLine(XLine* line)
 {
-       IdentHostPair ih = IdentSplit(hostmask);
+       /*IdentHostPair ih = IdentSplit(hostmask);*/
 
-       if (DelLine(hostmask, 'G', true))
+       if (DelLine(hostmask, line->type, true))
                return false;
 
-       GLine* item = new GLine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());
+       /*ELine* item = new ELine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());*/
 
        active_lines.push_back(item);
-       sort(active_lines.begin(), active_lines.end(),XLineManager::XSortComparison);
-       pending_lines.push_back(item);
-       lookup_lines['G'][hostmask] = item;
-
-       return true;
-}
-
-// adds an e:line (exception to bans)
-
-bool XLineManager::AddELine(long duration, const char* source, const char* reason, const char* hostmask)
-{
-       IdentHostPair ih = IdentSplit(hostmask);
-
-       if (DelLine(hostmask, 'E', true))
-               return false;
-
-       ELine* item = new ELine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());
-
-       active_lines.push_back(item);
-       sort(active_lines.begin(), active_lines.end(),XLineManager::XSortComparison);
-       lookup_lines['E'][hostmask] = item;
+       sort(active_lines.begin(), active_lines.end(), XLineManager::XSortComparison);
+       lookup_lines[line->type][hostmask] = item;
+       line->OnAdd();
 
        // XXX we really only need to check one line (the new one) - this is a bit wasteful!
        // we should really create a temporary var here and pass that instead.
        // hmm, perhaps we can merge this with line "application" somehow.. and just force a recheck on DelELine?
-       this->CheckELines(lookup_lines['E']);
-       return true;
-}
-
-// adds a q:line
-
-bool XLineManager::AddQLine(long duration, const char* source, const char* reason, const char* nickname)
-{
-       if (DelLine(nickname, 'Q', true))
-               return false;
-
-       QLine* item = new QLine(ServerInstance, ServerInstance->Time(), duration, source, reason, nickname);
-
-       active_lines.push_back(item);
-       sort(active_lines.begin(), active_lines.end(), XLineManager::XSortComparison);
-       pending_lines.push_back(item);
-       lookup_lines['Q'][nickname] = item;
-
-       return true;
+       /*this->CheckELines(lookup_lines['E']);
+       return true;*/
 }
 
-// adds a z:line
-
-bool XLineManager::AddZLine(long duration, const char* source, const char* reason, const char* ipaddr)
+/*bool XLineManager::AddZLine(long duration, const char* source, const char* reason, const char* ipaddr)
 {
        if (strchr(ipaddr,'@'))
        {
                while (*ipaddr != '@')
                        ipaddr++;
                ipaddr++;
-       }
-
-       if (DelLine(ipaddr, 'Z', true))
-               return false;
-
-       ZLine* item = new ZLine(ServerInstance, ServerInstance->Time(), duration, source, reason, ipaddr);
-
-       active_lines.push_back(item);
-       sort(active_lines.begin(), active_lines.end(),XLineManager::XSortComparison);
-       pending_lines.push_back(item);
-       lookup_lines['Z'][ipaddr] = item;
-
-       return true;
-}
-
-// adds a k:line
-
-bool XLineManager::AddKLine(long duration, const char* source, const char* reason, const char* hostmask)
-{
-       IdentHostPair ih = IdentSplit(hostmask);
-
-       if (DelLine(hostmask, 'K', true))
-               return false;
-
-       KLine* item = new KLine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());
-
-       active_lines.push_back(item);
-       sort(active_lines.begin(), active_lines.end(),XLineManager::XSortComparison);
-       pending_lines.push_back(item);
-       lookup_lines['K'][hostmask] = item;
-
-       return true;
-}
+       }*/
 
 // deletes a g:line, returns true if the line existed and was removed
 
@@ -233,7 +165,7 @@ bool XLineManager::DelLine(const char* hostmask, char type, bool simulate)
        {
                if ((*i)->type == type)
                {
-                       if ((*i)->Matches(hostmask))
+                       if ((*i)->MatchesLiteral(hostmask))
                        {
                                if (!simulate)
                                {
@@ -626,6 +558,36 @@ bool QLine::Matches(const std::string &str)
        return false;
 }
 
+virtual bool ELine::MatchesLiteral(const std::string &str)
+{
+       return (assign(str) == irc::string(this->identmask) + '@' + this->hostmask);
+}
+
+virtual bool ZLine::MatchesLiteral(const std::string &str)
+{       
+       return (assign(str) == this->ipmask);
+}
+
+virtual bool GLine::MatchesLiteral(const std::string &str)
+{       
+       return (assign(str) == irc::string(this->identmask) + '@' + this->hostmask);
+}
+
+virtual bool KLine::MatchesLiteral(const std::string &str)
+{       
+       return (assign(str) == irc::string(this->identmask) + '@' + this->hostmask);
+}
+
+virtual bool QLine::MatchesLiteral(const std::string &str)
+{       
+       return (assign(str) == this->nickmask);
+}
+
+virtual void ELine::OnAdd()
+{
+       ServerInstance->XLines->CheckELines(ServerInstance->XLines->lookup_lines['E']);
+}
+
 void ELine::DisplayExpiry()
 {
        ServerInstance->SNO->WriteToSnoMask('x',"Expiring timed E-Line %s@%s (set by %s %d seconds ago)",this->identmask,this->hostmask,this->source,this->duration);
@@ -633,7 +595,7 @@ void ELine::DisplayExpiry()
 
 void QLine::DisplayExpiry()
 {
-       ServerInstance->SNO->WriteToSnoMask('x',"Expiring timed G-Line %s (set by %s %d seconds ago)",this->nick,this->source,this->duration);
+       ServerInstance->SNO->WriteToSnoMask('x',"Expiring timed Q-Line %s (set by %s %d seconds ago)",this->nick,this->source,this->duration);
 }
 
 void ZLine::DisplayExpiry()