summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xline.h75
-rw-r--r--src/commands/cmd_eline.cpp2
-rw-r--r--src/commands/cmd_gline.cpp2
-rw-r--r--src/commands/cmd_kline.cpp2
-rw-r--r--src/commands/cmd_nick.cpp2
-rw-r--r--src/commands/cmd_qline.cpp2
-rw-r--r--src/commands/cmd_rehash.cpp2
-rw-r--r--src/commands/cmd_stats.cpp6
-rw-r--r--src/commands/cmd_zline.cpp2
-rw-r--r--src/configreader.cpp2
-rw-r--r--src/inspircd.cpp2
-rw-r--r--src/modules/m_spanningtree/treesocket2.cpp8
-rw-r--r--src/users.cpp10
-rw-r--r--src/xline.cpp106
14 files changed, 94 insertions, 129 deletions
diff --git a/include/xline.h b/include/xline.h
index 7e0e7f56e..5f982b1c5 100644
--- a/include/xline.h
+++ b/include/xline.h
@@ -36,7 +36,7 @@ class CoreExport XLine : public classbase
protected:
InspIRCd* ServerInstance;
- void DefaultApply(User* u, char line);
+ void DefaultApply(User* u, const std::string &line);
public:
@@ -46,7 +46,7 @@ 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, const char t)
+ 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)
{
source = strdup(src);
@@ -72,11 +72,6 @@ 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(const std::string &str) = 0;
-
virtual bool Matches(const std::string &str) = 0;
virtual void Apply(User* u);
@@ -111,7 +106,7 @@ class CoreExport XLine : public classbase
/** Q, K, etc. Don't change this. Constructors set it.
*/
- const char type;
+ const std::string type;
};
/** KLine class
@@ -127,7 +122,7 @@ 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(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);
@@ -147,8 +142,6 @@ class CoreExport KLine : public XLine
virtual bool Matches(const std::string &str);
- virtual bool MatchesLiteral(const std::string &str);
-
virtual void Apply(User* u);
virtual void DisplayExpiry();
@@ -178,7 +171,7 @@ 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(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);
@@ -198,8 +191,6 @@ class CoreExport GLine : public XLine
virtual bool Matches(const std::string &str);
- virtual bool MatchesLiteral(const std::string &str);
-
virtual void Apply(User* u);
virtual void DisplayExpiry();
@@ -229,7 +220,7 @@ 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(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);
@@ -247,8 +238,6 @@ class CoreExport ELine : public XLine
virtual bool Matches(const std::string &str);
- virtual bool MatchesLiteral(const std::string &str);
-
virtual void Unset();
virtual void DisplayExpiry();
@@ -279,7 +268,7 @@ 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(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);
}
@@ -295,8 +284,6 @@ 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();
@@ -320,7 +307,7 @@ 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(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);
}
@@ -336,8 +323,6 @@ 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();
@@ -359,13 +344,13 @@ class CoreExport XLineFactory
protected:
InspIRCd* ServerInstance;
- const char type;
+ std::string type;
public:
- XLineFactory(InspIRCd* Instance, const char t) : ServerInstance(Instance), type(t) { }
+ XLineFactory(InspIRCd* Instance, const std::string &t) : ServerInstance(Instance), type(t) { }
- virtual const char GetType() { return type; }
+ virtual const std::string& GetType() { return type; }
virtual XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask) = 0;
@@ -383,6 +368,12 @@ class QLineFactory;
class ZLineFactory;
class KLineFactory;
+typedef std::map<std::string, XLineFactory*> XLineFactMap;
+typedef std::map<std::string, XLine *> XLineLookup;
+typedef std::map<std::string, XLineLookup > XLineContainer;
+typedef XLineContainer::iterator ContainerIter;
+typedef XLineLookup::iterator LookupIter;
+
/** XLineManager is a class used to manage glines, klines, elines, zlines and qlines.
*/
class CoreExport XLineManager
@@ -396,7 +387,7 @@ class CoreExport XLineManager
*/
std::vector<XLine *> pending_lines;
- std::map<char, XLineFactory*> line_factory;
+ XLineFactMap line_factory;
GLineFactory* GFact;
ELineFactory* EFact;
@@ -406,7 +397,7 @@ class CoreExport XLineManager
public:
- std::map<char, std::map<std::string, XLine *> > lookup_lines;
+ XLineContainer lookup_lines;
/** Constructor
* @param Instance A pointer to the creator object
@@ -420,10 +411,9 @@ class CoreExport XLineManager
*/
IdentHostPair IdentSplit(const std::string &ident_and_host);
- /** Checks what users match a given list of ELines and sets their ban exempt flag accordingly.
- * @param ELines List of E:Lines to check.
+ /** Checks what users match e:lines and sets their ban exempt flag accordingly.
*/
- void CheckELines(std::map<std::string, XLine *> &ELines);
+ void CheckELines();
/** Add a new GLine
* @param line The line to be added
@@ -439,7 +429,7 @@ class CoreExport XLineManager
* @param simulate If this is true, don't actually remove the line, just return
* @return True if the line was deleted successfully
*/
- bool DelLine(const char* hostmask, char type, User* user, bool simulate = false);
+ bool DelLine(const char* hostmask, const std::string &type, User* user, bool simulate = false);
/** Registers an xline factory.
* An xline factory is a class which when given a particular xline type,
@@ -459,25 +449,25 @@ class CoreExport XLineManager
/** Get the XLineFactory for a specific type.
* Returns NULL if there is no known handler for this xline type
*/
- XLineFactory* GetFactory(const char type);
+ XLineFactory* GetFactory(const std::string &type);
/** Check if a user matches an XLine
* @param type The type of line to look up
* @param user The user to match against (what is checked is specific to the xline type)
* @return The reason for the line if there is a match, or NULL if there is no match
*/
- XLine* MatchesLine(const char type, User* user);
+ XLine* MatchesLine(const std::string &type, User* user);
/** Check if a pattern matches an XLine
* @param type The type of line to look up
* @param pattern A pattern string specific to the xline type
* @return The matching XLine if there is a match, or NULL if there is no match
*/
- XLine* MatchesLine(const char type, const std::string &pattern);
+ XLine* MatchesLine(const std::string &type, const std::string &pattern);
/** Expire a line given two iterators which identify it
*/
- void ExpireLine(std::map<char, std::map<std::string, XLine*> >::iterator container, std::map<std::string, XLine*>::iterator item);
+ void ExpireLine(ContainerIter container, LookupIter item);
/** Apply any new lines that are pending to be applied
*/
@@ -488,13 +478,13 @@ class CoreExport XLineManager
* @param user The username making the query
* @param results The string_list to receive the results
*/
- void InvokeStats(const char type, int numeric, User* user, string_list &results);
+ void InvokeStats(const std::string &type, int numeric, User* user, string_list &results);
};
class CoreExport GLineFactory : public XLineFactory
{
public:
- GLineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'G') { }
+ 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)
{
@@ -506,7 +496,7 @@ class CoreExport GLineFactory : public XLineFactory
class CoreExport ELineFactory : public XLineFactory
{
public:
- ELineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'E') { }
+ 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)
{
@@ -518,7 +508,7 @@ class CoreExport ELineFactory : public XLineFactory
class CoreExport KLineFactory : public XLineFactory
{
public:
- KLineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'K') { }
+ KLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "K") { }
XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask)
{
@@ -530,7 +520,7 @@ class CoreExport KLineFactory : public XLineFactory
class CoreExport QLineFactory : public XLineFactory
{
public:
- QLineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'Q') { }
+ QLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "Q") { }
XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask)
{
@@ -541,7 +531,7 @@ class CoreExport QLineFactory : public XLineFactory
class CoreExport ZLineFactory : public XLineFactory
{
public:
- ZLineFactory(InspIRCd* Instance) : XLineFactory(Instance, 'Z') { }
+ ZLineFactory(InspIRCd* Instance) : XLineFactory(Instance, "Z") { }
XLine* Generate(time_t set_time, long duration, const char* source, const char* reason, const char* xline_specific_mask)
{
@@ -550,3 +540,4 @@ class CoreExport ZLineFactory : public XLineFactory
};
#endif
+
diff --git a/src/commands/cmd_eline.cpp b/src/commands/cmd_eline.cpp
index cd0627178..83c921d8b 100644
--- a/src/commands/cmd_eline.cpp
+++ b/src/commands/cmd_eline.cpp
@@ -60,7 +60,7 @@ CmdResult CommandEline::Handle (const char** parameters, int pcnt, User *user)
}
else
{
- if (ServerInstance->XLines->DelLine(parameters[0], 'E', user))
+ if (ServerInstance->XLines->DelLine(parameters[0], "E", user))
{
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed E-line on %s.",user->nick,parameters[0]);
}
diff --git a/src/commands/cmd_gline.cpp b/src/commands/cmd_gline.cpp
index abe29d18e..caed54ebe 100644
--- a/src/commands/cmd_gline.cpp
+++ b/src/commands/cmd_gline.cpp
@@ -67,7 +67,7 @@ CmdResult CommandGline::Handle (const char** parameters, int pcnt, User *user)
}
else
{
- if (ServerInstance->XLines->DelLine(parameters[0],'G',user))
+ if (ServerInstance->XLines->DelLine(parameters[0],"G",user))
{
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed G-line on %s.",user->nick,parameters[0]);
}
diff --git a/src/commands/cmd_kline.cpp b/src/commands/cmd_kline.cpp
index de225b0f0..7058de77f 100644
--- a/src/commands/cmd_kline.cpp
+++ b/src/commands/cmd_kline.cpp
@@ -66,7 +66,7 @@ CmdResult CommandKline::Handle (const char** parameters, int pcnt, User *user)
}
else
{
- if (ServerInstance->XLines->DelLine(parameters[0],'K',user))
+ if (ServerInstance->XLines->DelLine(parameters[0],"K",user))
{
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed K-line on %s.",user->nick,parameters[0]);
}
diff --git a/src/commands/cmd_nick.cpp b/src/commands/cmd_nick.cpp
index aaa6698ac..06fc5dcc3 100644
--- a/src/commands/cmd_nick.cpp
+++ b/src/commands/cmd_nick.cpp
@@ -60,7 +60,7 @@ CmdResult CommandNick::Handle (const char** parameters, int, User *user)
}
else
{
- XLine* mq = ServerInstance->XLines->MatchesLine('Q',parameters[0]);
+ XLine* mq = ServerInstance->XLines->MatchesLine("Q",parameters[0]);
if (mq)
{
ServerInstance->SNO->WriteToSnoMask('x', "Q-Lined nickname %s from %s!%s@%s: %s", parameters[0], user->nick, user->ident, user->host, mq->reason);
diff --git a/src/commands/cmd_qline.cpp b/src/commands/cmd_qline.cpp
index 2922c09cf..e4da8c5ff 100644
--- a/src/commands/cmd_qline.cpp
+++ b/src/commands/cmd_qline.cpp
@@ -59,7 +59,7 @@ CmdResult CommandQline::Handle (const char** parameters, int pcnt, User *user)
}
else
{
- if (ServerInstance->XLines->DelLine(parameters[0],'Q',user))
+ if (ServerInstance->XLines->DelLine(parameters[0],"Q",user))
{
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed Q-line on %s.",user->nick,parameters[0]);
}
diff --git a/src/commands/cmd_rehash.cpp b/src/commands/cmd_rehash.cpp
index 5b1ab019c..174fba8ba 100644
--- a/src/commands/cmd_rehash.cpp
+++ b/src/commands/cmd_rehash.cpp
@@ -41,7 +41,7 @@ CmdResult CommandRehash::Handle (const char** parameters, int pcnt, User *user)
FOREACH_MOD(I_OnGarbageCollect, OnGarbageCollect());
ServerInstance->Config->Read(false,user);
// Get XLine to do it's thing.
- ServerInstance->XLines->CheckELines(ServerInstance->XLines->lookup_lines['E']);
+ ServerInstance->XLines->CheckELines(ServerInstance->XLines->lookup_lines["E"]);
ServerInstance->XLines->ApplyLines();
ServerInstance->Res->Rehash();
ServerInstance->ResetMaxBans();
diff --git a/src/commands/cmd_stats.cpp b/src/commands/cmd_stats.cpp
index 5d4417689..0e8a5a0b0 100644
--- a/src/commands/cmd_stats.cpp
+++ b/src/commands/cmd_stats.cpp
@@ -144,6 +144,7 @@ DllExport void DoStats(InspIRCd* ServerInstance, char statschar, User* user, str
case 'q':
case 'Z':
case 'e':
+ {
/* FIXME: Make the 216 here different depending on stats char:
* k: 216
* g: 223
@@ -151,7 +152,10 @@ DllExport void DoStats(InspIRCd* ServerInstance, char statschar, User* user, str
* z: 223
* e: 223
*/
- ServerInstance->XLines->InvokeStats(toupper(statschar),216,user,results);
+ std::string stat;
+ stat += toupper(statschar);
+ ServerInstance->XLines->InvokeStats(stat,216,user,results);
+ }
break;
/* stats m (list number of times each command has been used, plus bytecount) */
diff --git a/src/commands/cmd_zline.cpp b/src/commands/cmd_zline.cpp
index e701867fb..520bea306 100644
--- a/src/commands/cmd_zline.cpp
+++ b/src/commands/cmd_zline.cpp
@@ -67,7 +67,7 @@ CmdResult CommandZline::Handle (const char** parameters, int pcnt, User *user)
}
else
{
- if (ServerInstance->XLines->DelLine(parameters[0],'Z',user))
+ if (ServerInstance->XLines->DelLine(parameters[0],"Z",user))
{
ServerInstance->SNO->WriteToSnoMask('x',"%s Removed Z-line on %s.",user->nick,parameters[0]);
}
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 8311ad58e..7c6f784f4 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -1983,7 +1983,7 @@ bool DoneELine(ServerConfig* conf, const char* tag)
u->exempt = false;
}
- conf->GetInstance()->XLines->CheckELines(conf->GetInstance()->XLines->lookup_lines['E']);
+ conf->GetInstance()->XLines->CheckELines();
return true;
}
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 095787376..f62e2a74b 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -437,7 +437,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
Config->Read(true, NULL);
// Get XLine to do it's thing.
- this->XLines->CheckELines(this->XLines->lookup_lines['E']);
+ this->XLines->CheckELines();
this->XLines->ApplyLines();
this->Modules->modules.resize(255);
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp
index 5468be25b..914de861f 100644
--- a/src/modules/m_spanningtree/treesocket2.cpp
+++ b/src/modules/m_spanningtree/treesocket2.cpp
@@ -523,7 +523,7 @@ bool TreeSocket::AddLine(const std::string &prefix, std::deque<std::string> &par
if (params.size() < 6)
return true;
- XLineFactory* xlf = Instance->XLines->GetFactory(params[0][0]);
+ XLineFactory* xlf = Instance->XLines->GetFactory(params[0]);
if (!xlf)
return false;
@@ -534,11 +534,13 @@ bool TreeSocket::AddLine(const std::string &prefix, std::deque<std::string> &par
{
if (xl->expiry)
{
- this->Instance->SNO->WriteToSnoMask('x',"%s Added %cLINE on %s to expire on %s (%s).",prefix.c_str(),*(params[0].c_str()),params[1].c_str(),Instance->TimeString(xl->expiry).c_str(),params[5].c_str());
+ this->Instance->SNO->WriteToSnoMask('x',"%s Added %s%s on %s to expire on %s (%s).",prefix.c_str(),params[0].c_str(),params[0].length() == 1 ? "LINE" : "",
+ params[1].c_str(),Instance->TimeString(xl->expiry).c_str(),params[5].c_str());
}
else
{
- this->Instance->SNO->WriteToSnoMask('x',"%s Added permenant %cLINE on %s (%s).",prefix.c_str(),*(params[0].c_str()),params[1].c_str(),params[5].c_str());
+ this->Instance->SNO->WriteToSnoMask('x',"%s Added permenant %s%s on %s (%s).",prefix.c_str(),params[0].c_str(),params[0].length() == 1 ? "LINE" : "",
+ params[1].c_str(),params[5].c_str());
}
params[5] = ":" + params[5];
Utils->DoOneToAllButSender(prefix,"ADDLINE",params,prefix);
diff --git a/src/users.cpp b/src/users.cpp
index 0f451d2a9..3803a7a9e 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -830,10 +830,10 @@ void User::AddClient(InspIRCd* Instance, int socket, int port, bool iscached, in
}
#endif
- New->exempt = (Instance->XLines->MatchesLine('E',New) != NULL);
+ New->exempt = (Instance->XLines->MatchesLine("E",New) != NULL);
if (!New->exempt)
{
- XLine* r = Instance->XLines->MatchesLine('Z',New);
+ XLine* r = Instance->XLines->MatchesLine("Z",New);
if (r)
{
@@ -942,7 +942,7 @@ void User::FullConnect()
if (!this->exempt)
{
- XLine* r = ServerInstance->XLines->MatchesLine('G',this);
+ XLine* r = ServerInstance->XLines->MatchesLine("G",this);
if (r)
{
@@ -955,7 +955,7 @@ void User::FullConnect()
return;
}
- XLine* n = ServerInstance->XLines->MatchesLine('K',this);
+ XLine* n = ServerInstance->XLines->MatchesLine("K",this);
if (n)
{
@@ -1065,7 +1065,7 @@ bool User::ForceNickChange(const char* newnick)
return false;
}
- if (ServerInstance->XLines->MatchesLine('Q',newnick))
+ if (ServerInstance->XLines->MatchesLine("Q",newnick))
{
ServerInstance->stats->statsCollisions++;
return false;
diff --git a/src/xline.cpp b/src/xline.cpp
index a26ca7f01..47522f77d 100644
--- a/src/xline.cpp
+++ b/src/xline.cpp
@@ -57,8 +57,15 @@ bool XLine::Matches(User *u)
/*
* Checks what users match a given vector of ELines and sets their ban exempt flag accordingly.
*/
-void XLineManager::CheckELines(std::map<std::string, XLine *> &ELines)
+void XLineManager::CheckELines()
{
+ ContainerIter n = ServerInstance->XLines->lookup_lines.find("E");
+
+ if (n == ServerInstance->XLines->lookup_lines.end())
+ return;
+
+ XLineLookup& ELines = n->second;
+
if (ELines.empty())
return;
@@ -66,7 +73,7 @@ void XLineManager::CheckELines(std::map<std::string, XLine *> &ELines)
{
User* u = (User*)(*u2);
- for (std::map<std::string, XLine *>::iterator i = ELines.begin(); i != ELines.end(); i++)
+ for (LookupIter i = ELines.begin(); i != ELines.end(); i++)
{
XLine *e = i->second;
u->exempt = e->Matches(u);
@@ -74,19 +81,6 @@ void XLineManager::CheckELines(std::map<std::string, XLine *> &ELines)
}
}
-// this should probably be moved to configreader, but atm it relies on CheckELines above.
-bool DoneELine(ServerConfig* conf, const char* tag)
-{
- for (std::vector<User*>::const_iterator u2 = conf->GetInstance()->local_users.begin(); u2 != conf->GetInstance()->local_users.end(); u2++)
- {
- User* u = (User*)(*u2);
- u->exempt = false;
- }
-
- conf->GetInstance()->XLines->CheckELines(conf->GetInstance()->XLines->lookup_lines['E']);
- return true;
-}
-
IdentHostPair XLineManager::IdentSplit(const std::string &ident_and_host)
{
@@ -109,9 +103,8 @@ IdentHostPair XLineManager::IdentSplit(const std::string &ident_and_host)
return n;
}
-// adds a g:line
+// adds a line
-/*bool XLineManager::AddELine(long duration, const char* source, const char* reason, const char* hostmask)*/
bool XLineManager::AddLine(XLine* line, User* user)
{
/*IdentHostPair ih = IdentSplit(hostmask);*/
@@ -131,14 +124,14 @@ bool XLineManager::AddLine(XLine* line, User* user)
// deletes a line, returns true if the line existed and was removed
-bool XLineManager::DelLine(const char* hostmask, char type, User* user, bool simulate)
+bool XLineManager::DelLine(const char* hostmask, const std::string &type, User* user, bool simulate)
{
- std::map<char, std::map<std::string, XLine*> >::iterator x = lookup_lines.find(type);
+ ContainerIter x = lookup_lines.find(type);
if (x == lookup_lines.end())
return false;
- std::map<std::string, XLine*>::iterator y = x->second.find(hostmask);
+ LookupIter y = x->second.find(hostmask);
if (y == x->second.end())
return false;
@@ -170,23 +163,23 @@ void ELine::Unset()
u->exempt = false;
}
- std::map<char, std::map<std::string, XLine*> >::iterator x = ServerInstance->XLines->lookup_lines.find('E');
+ ContainerIter x = ServerInstance->XLines->lookup_lines.find("E");
if (x != ServerInstance->XLines->lookup_lines.end())
- ServerInstance->XLines->CheckELines(x->second);
+ ServerInstance->XLines->CheckELines();
}
// returns a pointer to the reason if a nickname matches a qline, NULL if it didnt match
-XLine* XLineManager::MatchesLine(const char type, User* user)
+XLine* XLineManager::MatchesLine(const std::string &type, User* user)
{
- std::map<char, std::map<std::string, XLine*> >::iterator x = lookup_lines.find(type);
+ ContainerIter x = lookup_lines.find(type);
if (x == lookup_lines.end())
return NULL;
const time_t current = ServerInstance->Time();
- for (std::map<std::string, XLine*>::iterator i = x->second.begin(); i != x->second.end(); i++)
+ for (LookupIter i = x->second.begin(); i != x->second.end(); i++)
{
if (i->second->Matches(user))
{
@@ -203,16 +196,16 @@ XLine* XLineManager::MatchesLine(const char type, User* user)
return NULL;
}
-XLine* XLineManager::MatchesLine(const char type, const std::string &pattern)
+XLine* XLineManager::MatchesLine(const std::string &type, const std::string &pattern)
{
- std::map<char, std::map<std::string, XLine*> >::iterator x = lookup_lines.find(type);
+ ContainerIter x = lookup_lines.find(type);
if (x == lookup_lines.end())
return NULL;
const time_t current = ServerInstance->Time();
- for (std::map<std::string, XLine*>::iterator i = x->second.begin(); i != x->second.end(); i++)
+ for (LookupIter i = x->second.begin(); i != x->second.end(); i++)
{
if (i->second->Matches(pattern))
{
@@ -230,7 +223,7 @@ XLine* XLineManager::MatchesLine(const char type, const std::string &pattern)
}
// removes lines that have expired
-void XLineManager::ExpireLine(std::map<char, std::map<std::string, XLine*> >::iterator container, std::map<std::string, XLine*>::iterator item)
+void XLineManager::ExpireLine(ContainerIter container, LookupIter item)
{
item->second->DisplayExpiry();
item->second->Unset();
@@ -273,16 +266,16 @@ void XLineManager::ApplyLines()
* e: 223
*/
-void XLineManager::InvokeStats(const char type, int numeric, User* user, string_list &results)
+void XLineManager::InvokeStats(const std::string &type, int numeric, User* user, string_list &results)
{
std::string sn = ServerInstance->Config->ServerName;
- std::map<const char, std::map<std::string, XLine*> >::iterator n = lookup_lines.find(type);
+ ContainerIter n = lookup_lines.find(type);
if (n != lookup_lines.end())
{
- std::map<std::string, XLine*>& list = n->second;
- for (std::map<std::string, XLine*>::iterator i = list.begin(); i != list.end(); i++)
+ XLineLookup& list = n->second;
+ for (LookupIter i = list.begin(); i != list.end(); i++)
results.push_back(sn+" "+ConvToStr(numeric)+" "+user->nick+" :"+i->second->Displayable()+" "+
ConvToStr(i->second->set_time)+" "+ConvToStr(i->second->duration)+" "+std::string(i->second->source)+" :"+(i->second->reason));
}
@@ -323,14 +316,14 @@ void XLine::Apply(User* u)
{
}
-void XLine::DefaultApply(User* u, char line)
+void XLine::DefaultApply(User* u, const std::string &line)
{
char reason[MAXBUF];
- snprintf(reason, MAXBUF, "%c-Lined: %s", line, this->reason);
+ snprintf(reason, MAXBUF, "%s-Lined: %s", line.c_str(), this->reason);
if (*ServerInstance->Config->MoronBanner)
u->WriteServ("NOTICE %s :*** %s", u->nick, ServerInstance->Config->MoronBanner);
if (ServerInstance->Config->HideBans)
- User::QuitUser(ServerInstance, u, line + std::string("-Lined"), reason);
+ User::QuitUser(ServerInstance, u, line + "-Lined", reason);
else
User::QuitUser(ServerInstance, u, reason);
}
@@ -353,7 +346,7 @@ bool KLine::Matches(User *u)
void KLine::Apply(User* u)
{
- DefaultApply(u, 'K');
+ DefaultApply(u, "K");
}
bool GLine::Matches(User *u)
@@ -374,7 +367,7 @@ bool GLine::Matches(User *u)
void GLine::Apply(User* u)
{
- DefaultApply(u, 'G');
+ DefaultApply(u, "G");
}
bool ELine::Matches(User *u)
@@ -406,7 +399,7 @@ bool ZLine::Matches(User *u)
void ZLine::Apply(User* u)
{
- DefaultApply(u, 'Z');
+ DefaultApply(u, "Z");
}
@@ -424,7 +417,7 @@ bool QLine::Matches(User *u)
void QLine::Apply(User* u)
{
/* Can we force the user to their uid here instead? */
- DefaultApply(u, 'Q');
+ DefaultApply(u, "Q");
}
@@ -459,31 +452,6 @@ bool GLine::Matches(const std::string &str)
return ((match(str.c_str(), matchtext.c_str(), true)));
}
-bool ELine::MatchesLiteral(const std::string &str)
-{
- return (assign(str) == matchtext);
-}
-
-bool ZLine::MatchesLiteral(const std::string &str)
-{
- return (assign(str) == this->ipaddr);
-}
-
-bool GLine::MatchesLiteral(const std::string &str)
-{
- return (assign(str) == matchtext);
-}
-
-bool KLine::MatchesLiteral(const std::string &str)
-{
- return (assign(str) == matchtext);
-}
-
-bool QLine::MatchesLiteral(const std::string &str)
-{
- return (assign(str) == this->nick);
-}
-
void ELine::OnAdd()
{
/* When adding one eline, only check the one eline */
@@ -547,7 +515,7 @@ const char* QLine::Displayable()
bool XLineManager::RegisterFactory(XLineFactory* xlf)
{
- std::map<char, XLineFactory*>::iterator n = line_factory.find(xlf->GetType());
+ XLineFactMap::iterator n = line_factory.find(xlf->GetType());
if (n != line_factory.end())
return false;
@@ -559,7 +527,7 @@ bool XLineManager::RegisterFactory(XLineFactory* xlf)
bool XLineManager::UnregisterFactory(XLineFactory* xlf)
{
- std::map<char, XLineFactory*>::iterator n = line_factory.find(xlf->GetType());
+ XLineFactMap::iterator n = line_factory.find(xlf->GetType());
if (n == line_factory.end())
return false;
@@ -569,9 +537,9 @@ bool XLineManager::UnregisterFactory(XLineFactory* xlf)
return true;
}
-XLineFactory* XLineManager::GetFactory(const char type)
+XLineFactory* XLineManager::GetFactory(const std::string &type)
{
- std::map<char, XLineFactory*>::iterator n = line_factory.find(type);
+ XLineFactMap::iterator n = line_factory.find(type);
if (n != line_factory.end())
return NULL;