summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-10-18 17:58:41 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-10-18 17:58:41 +0000
commit4fca1ffbc43dd0eda8e6df665dac0fa83512daf8 (patch)
tree06787715deb971b657d4580394818dd02ea13fa6 /src
parentfa452641bf37077fcda964d59e404a76e1fb13e5 (diff)
More classbase cleanup, hold ConfigTag reference in Autoconnect/Link
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11906 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp2
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp2
-rw-r--r--src/modules/m_alias.cpp48
-rw-r--r--src/modules/m_helpop.cpp22
-rw-r--r--src/modules/m_spanningtree/link.h4
-rw-r--r--src/modules/m_spanningtree/utils.cpp119
6 files changed, 80 insertions, 117 deletions
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index ec8993f4b..0267b6595 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -74,7 +74,7 @@ static ssize_t gnutls_push_wrapper(gnutls_transport_ptr_t user_wrap, const void*
/** Represents an SSL user's extra data
*/
-class issl_session : public classbase
+class issl_session
{
public:
issl_session()
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index cd648c1b4..0c01e4d08 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -48,7 +48,7 @@ static int error_callback(const char *str, size_t len, void *u);
/** Represents an SSL user's extra data
*/
-class issl_session : public classbase
+class issl_session
{
public:
SSL* sess;
diff --git a/src/modules/m_alias.cpp b/src/modules/m_alias.cpp
index 62c02396a..522259ebd 100644
--- a/src/modules/m_alias.cpp
+++ b/src/modules/m_alias.cpp
@@ -58,7 +58,7 @@ class ModuleAlias : public Module
* We can, however, use a fancy invention: the multimap. Maps a key to one or more values.
* -- w00t
*/
- std::multimap<std::string, Alias> Aliases;
+ std::multimap<irc::string, Alias> Aliases;
/* whether or not +B users are allowed to use fantasy commands */
bool AllowBots;
@@ -73,33 +73,33 @@ class ModuleAlias : public Module
fprefix = fpre.empty() ? '!' : fpre[0];
Aliases.clear();
- for (int i = 0; i < MyConf.Enumerate("alias"); i++)
+ for (int i = 0;; i++)
{
+ ConfigTag* tag = ServerInstance->Config->ConfValue("alias", i);
+ if (!tag)
+ break;
Alias a;
- std::string txt;
- txt = MyConf.ReadValue("alias", "text", i);
- a.AliasedCommand = txt.c_str();
- a.ReplaceFormat = MyConf.ReadValue("alias", "replace", i, true);
- a.RequiredNick = MyConf.ReadValue("alias", "requires", i);
- a.ULineOnly = MyConf.ReadFlag("alias", "uline", i);
- a.ChannelCommand = MyConf.ReadFlag("alias", "channelcommand", "no", i);
- a.UserCommand = MyConf.ReadFlag("alias", "usercommand", "yes", i);
- a.OperOnly = MyConf.ReadFlag("alias", "operonly", i);
- a.format = MyConf.ReadValue("alias", "format", i);
- a.CaseSensitive = MyConf.ReadFlag("alias", "matchcase", i);
- Aliases.insert(std::make_pair(txt, a));
+ a.AliasedCommand = tag->getString("text").c_str();
+ tag->readString("replace", a.ReplaceFormat, true);
+ a.RequiredNick = tag->getString("requires");
+ a.ULineOnly = tag->getBool("uline");
+ a.ChannelCommand = tag->getBool("channelcommand", "no");
+ a.UserCommand = tag->getBool("usercommand", "yes");
+ a.OperOnly = tag->getBool("operonly");
+ a.format = tag->getString("format");
+ a.CaseSensitive = tag->getBool("matchcase");
+ Aliases.insert(std::make_pair(a.AliasedCommand, a));
}
}
public:
ModuleAlias()
- {
+ {
ReadAliases();
ServerInstance->Modules->Attach(I_OnPreCommand, this);
ServerInstance->Modules->Attach(I_OnRehash, this);
ServerInstance->Modules->Attach(I_OnUserMessage, this);
-
}
virtual ~ModuleAlias()
@@ -138,7 +138,7 @@ class ModuleAlias : public Module
virtual ModResult OnPreCommand(std::string &command, std::vector<std::string> &parameters, User *user, bool validated, const std::string &original_line)
{
- std::multimap<std::string, Alias>::iterator i, upperbound;
+ std::multimap<irc::string, Alias>::iterator i, upperbound;
/* If theyre not registered yet, we dont want
* to know.
@@ -147,11 +147,11 @@ class ModuleAlias : public Module
return MOD_RES_PASSTHRU;
/* We dont have any commands looking like this? Stop processing. */
- i = Aliases.find(command);
+ i = Aliases.find(command.c_str());
if (i == Aliases.end())
return MOD_RES_PASSTHRU;
/* Avoid iterating on to different aliases if no patterns match. */
- upperbound = Aliases.upper_bound(command);
+ upperbound = Aliases.upper_bound(command.c_str());
irc::string c = command.c_str();
/* The parameters for the command in their original form, with the command stripped off */
@@ -196,11 +196,12 @@ class ModuleAlias : public Module
}
Channel *c = (Channel *)dest;
- std::string fcommand;
+ std::string scommand;
// text is like "!moo cows bite me", we want "!moo" first
irc::spacesepstream ss(text);
- ss.GetToken(fcommand);
+ ss.GetToken(scommand);
+ irc::string fcommand = scommand.c_str();
if (fcommand.empty())
{
@@ -215,15 +216,14 @@ class ModuleAlias : public Module
// nor do we give a shit about the prefix
fcommand.erase(fcommand.begin());
- std::transform(fcommand.begin(), fcommand.end(), fcommand.begin(), ::toupper);
- std::multimap<std::string, Alias>::iterator i = Aliases.find(fcommand);
+ std::multimap<irc::string, Alias>::iterator i = Aliases.find(fcommand);
if (i == Aliases.end())
return;
/* Avoid iterating on to other aliases if no patterns match */
- std::multimap<std::string, Alias>::iterator upperbound = Aliases.upper_bound(fcommand);
+ std::multimap<irc::string, Alias>::iterator upperbound = Aliases.upper_bound(fcommand);
/* The parameters for the command in their original form, with the command stripped off */
diff --git a/src/modules/m_helpop.cpp b/src/modules/m_helpop.cpp
index cba630bbc..8f19bd72b 100644
--- a/src/modules/m_helpop.cpp
+++ b/src/modules/m_helpop.cpp
@@ -104,11 +104,7 @@ class CommandHelpop : public Command
user->WriteServ("292 %s : -", user->nick.c_str());
user->WriteServ("292 %s :*** End of HELPOP", user->nick.c_str());
}
-
- /* We dont want these going out over the network, return CMD_FAILURE
- * to make sure the protocol module thinks theyre not worth sending.
- */
- return CMD_FAILURE;
+ return CMD_SUCCESS;
}
};
@@ -137,10 +133,14 @@ class ModuleHelpop : public Module
helpop_map.clear();
- for (int i = 0; i < MyConf.Enumerate("helpop"); i++)
+ for (int i = 0;; i++)
{
- irc::string key = assign(MyConf.ReadValue("helpop", "key", i));
- std::string value = MyConf.ReadValue("helpop", "value", i, true); /* Linefeeds allowed! */
+ ConfigTag* tag = ServerInstance->Config->ConfValue("helpop", i);
+ if (!tag)
+ break;
+ irc::string key = assign(tag->getString("key"));
+ std::string value;
+ tag->readString("value", value, true); /* Linefeeds allowed */
if (key == "index")
{
@@ -153,12 +153,12 @@ class ModuleHelpop : public Module
if (helpop_map.find("start") == helpop_map.end())
{
// error!
- throw ModuleException("m_helpop: Helpop file is missing important entries. Please check the example conf.");
+ throw ModuleException("m_helpop: Helpop file is missing important entry 'start'. Please check the example conf.");
}
else if (helpop_map.find("nohelp") == helpop_map.end())
{
// error!
- throw ModuleException("m_helpop: Helpop file is missing important entries. Please check the example conf.");
+ throw ModuleException("m_helpop: Helpop file is missing important entry 'nohelp'. Please check the example conf.");
}
}
@@ -183,7 +183,7 @@ class ModuleHelpop : public Module
virtual Version GetVersion()
{
- return Version("/helpop Command, Works like Unreal helpop", VF_COMMON | VF_VENDOR);
+ return Version("/helpop Command, Works like Unreal helpop", VF_VENDOR | VF_COMMON);
}
};
diff --git a/src/modules/m_spanningtree/link.h b/src/modules/m_spanningtree/link.h
index ae7655ebb..484569892 100644
--- a/src/modules/m_spanningtree/link.h
+++ b/src/modules/m_spanningtree/link.h
@@ -17,6 +17,7 @@
class Link : public refcountbase
{
public:
+ reference<ConfigTag> tag;
irc::string Name;
std::string IPAddr;
int Port;
@@ -29,16 +30,19 @@ class Link : public refcountbase
int Timeout;
std::string Bind;
bool Hidden;
+ Link(ConfigTag* Tag) : tag(tag) {}
};
class Autoconnect : public refcountbase
{
public:
+ reference<ConfigTag> tag;
std::vector<std::string> servers;
unsigned long Period;
time_t NextConnectTime;
/** Negative == inactive */
int position;
+ Autoconnect(ConfigTag* Tag) : tag(tag) {}
};
diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp
index c4d5755e6..b8560aaba 100644
--- a/src/modules/m_spanningtree/utils.cpp
+++ b/src/modules/m_spanningtree/utils.cpp
@@ -23,8 +23,6 @@
#include "treesocket.h"
#include "resolvers.h"
-/* $ModDep: m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h */
-
/* Create server sockets off a listener. */
void ServerSocketListener::OnAcceptReady(int newsock)
{
@@ -342,34 +340,19 @@ void SpanningTreeUtilities::RefreshIPCache()
continue;
}
- ValidIPs.push_back(L->IPAddr);
-
if (L->AllowMask.length())
ValidIPs.push_back(L->AllowMask);
- /* Needs resolving */
- bool ipvalid = true;
- QueryType start_type = DNS_QUERY_A;
- start_type = DNS_QUERY_AAAA;
- if (strchr(L->IPAddr.c_str(),':'))
- {
- in6_addr n;
- if (inet_pton(AF_INET6, L->IPAddr.c_str(), &n) < 1)
- ipvalid = false;
- }
+ irc::sockets::sockaddrs dummy;
+ bool ipvalid = irc::sockets::aptosa(L->IPAddr, L->Port, &dummy);
+ if (ipvalid)
+ ValidIPs.push_back(L->IPAddr);
else
{
- in_addr n;
- if (inet_aton(L->IPAddr.c_str(),&n) < 1)
- ipvalid = false;
- }
-
- if (!ipvalid)
- {
try
{
bool cached;
- SecurityIPResolver* sr = new SecurityIPResolver(Creator, this, L->IPAddr, L, cached, start_type);
+ SecurityIPResolver* sr = new SecurityIPResolver(Creator, this, L->IPAddr, L, cached, DNS_QUERY_AAAA);
ServerInstance->AddResolver(sr, cached);
}
catch (...)
@@ -385,12 +368,15 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
if (rebind)
{
- for (int j = 0; j < Conf.Enumerate("bind"); j++)
+ for (int j = 0; ; j++)
{
- std::string Type = Conf.ReadValue("bind","type",j);
- std::string IP = Conf.ReadValue("bind","address",j);
- std::string Port = Conf.ReadValue("bind","port",j);
- std::string ssl = Conf.ReadValue("bind","ssl",j);
+ ConfigTag* tag = ServerInstance->Config->ConfValue("bind", j);
+ if (!tag)
+ break;
+ std::string Type = tag->getString("type");
+ std::string IP = tag->getString("address");
+ std::string Port = tag->getString("port");
+ std::string ssl = tag->getString("ssl");
if (Type == "servers")
{
irc::portparser portrange(Port, false);
@@ -431,22 +417,24 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
AutoconnectBlocks.clear();
LinkBlocks.clear();
ValidIPs.clear();
- for (int j = 0; j < Conf.Enumerate("link"); ++j)
+ for (int j = 0;; ++j)
{
- reference<Link> L = new Link;
- std::string Allow = Conf.ReadValue("link", "allowmask", j);
- L->Name = (Conf.ReadValue("link", "name", j)).c_str();
- L->AllowMask = Allow;
- L->IPAddr = Conf.ReadValue("link", "ipaddr", j);
- L->Port = Conf.ReadInteger("link", "port", j, true);
- L->SendPass = Conf.ReadValue("link", "sendpass", j);
- L->RecvPass = Conf.ReadValue("link", "recvpass", j);
- L->Fingerprint = Conf.ReadValue("link", "fingerprint", j);
- L->HiddenFromStats = Conf.ReadFlag("link", "statshidden", j);
- L->Timeout = Conf.ReadInteger("link", "timeout", j, true);
- L->Hook = Conf.ReadValue("link", "ssl", j);
- L->Bind = Conf.ReadValue("link", "bind", j);
- L->Hidden = Conf.ReadFlag("link", "hidden", j);
+ ConfigTag* tag = ServerInstance->Config->ConfValue("link", j);
+ if (!tag)
+ break;
+ reference<Link> L = new Link(tag);
+ L->Name = tag->getString("name").c_str();
+ L->AllowMask = tag->getString("allowmask");
+ L->IPAddr = tag->getString("ipaddr");
+ L->Port = tag->getInt("port");
+ L->SendPass = tag->getString("sendpass");
+ L->RecvPass = tag->getString("recvpass");
+ L->Fingerprint = tag->getString("fingerprint");
+ L->HiddenFromStats = tag->getBool("statshidden");
+ L->Timeout = tag->getInt("timeout");
+ L->Hook = tag->getString("ssl");
+ L->Bind = tag->getString("bind");
+ L->Hidden = tag->getBool("hidden");
if (L->Name.find('.') == std::string::npos)
throw CoreException("The link name '"+assign(L->Name)+"' is invalid and must contain at least one '.' character");
@@ -456,40 +444,7 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
if ((!L->IPAddr.empty()) && (!L->RecvPass.empty()) && (!L->SendPass.empty()) && (!L->Name.empty()) && (L->Port))
{
- if (Allow.length())
- ValidIPs.push_back(Allow);
-
ValidIPs.push_back(L->IPAddr);
-
- /* Needs resolving */
- bool ipvalid = true;
- QueryType start_type = DNS_QUERY_A;
- start_type = DNS_QUERY_AAAA;
- if (strchr(L->IPAddr.c_str(),':'))
- {
- in6_addr n;
- if (inet_pton(AF_INET6, L->IPAddr.c_str(), &n) < 1)
- ipvalid = false;
- }
- else
- {
- in_addr n;
- if (inet_aton(L->IPAddr.c_str(),&n) < 1)
- ipvalid = false;
- }
-
- if (!ipvalid)
- {
- try
- {
- bool cached;
- SecurityIPResolver* sr = new SecurityIPResolver(Creator, this, L->IPAddr, L, cached, start_type);
- ServerInstance->AddResolver(sr, cached);
- }
- catch (...)
- {
- }
- }
}
else
{
@@ -524,14 +479,16 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
LinkBlocks.push_back(L);
}
- for (int j = 0; j < Conf.Enumerate("autoconnect"); ++j)
+ for (int j = 0;; ++j)
{
- reference<Autoconnect> A = new Autoconnect;
- A->Period = Conf.ReadInteger("autoconnect", "period", j, true);
+ ConfigTag* tag = ServerInstance->Config->ConfValue("autoconnect", j);
+ if (!tag)
+ break;
+ reference<Autoconnect> A = new Autoconnect(tag);
+ A->Period = tag->getInt("period");
A->NextConnectTime = ServerInstance->Time() + A->Period;
A->position = -1;
- std::string servers = Conf.ReadValue("autoconnect", "server", j);
- irc::spacesepstream ss(servers);
+ irc::spacesepstream ss(tag->getString("server"));
std::string server;
while (ss.GetToken(server))
{
@@ -550,6 +507,8 @@ void SpanningTreeUtilities::ReadConfiguration(bool rebind)
AutoconnectBlocks.push_back(A);
}
+
+ RefreshIPCache();
}
Link* SpanningTreeUtilities::FindLink(const std::string& name)