aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2020-11-03 14:48:54 +0000
committerGravatar Sadie Powell2020-11-03 19:54:13 +0000
commit89a21202de35eeec8ef464ada5e9fbb97fd83ba5 (patch)
treeb70c242c58bae562bef1d42c34c9d5d628d81208 /src
parentClean up a bunch of contructors and destructors. (diff)
downloadinspircd++-89a21202de35eeec8ef464ada5e9fbb97fd83ba5.tar.gz
inspircd++-89a21202de35eeec8ef464ada5e9fbb97fd83ba5.tar.bz2
inspircd++-89a21202de35eeec8ef464ada5e9fbb97fd83ba5.zip
Convert ConnectClass from reference<> to std::shared_ptr<>.
Diffstat (limited to 'src')
-rw-r--r--src/configreader.cpp16
-rw-r--r--src/coremods/core_stats.cpp6
-rw-r--r--src/modules.cpp2
-rw-r--r--src/modules/m_cgiirc.cpp2
-rw-r--r--src/modules/m_dnsbl.cpp2
-rw-r--r--src/modules/m_geoclass.cpp2
-rw-r--r--src/modules/m_ident.cpp2
-rw-r--r--src/modules/m_services_account.cpp2
-rw-r--r--src/modules/m_sslinfo.cpp2
-rw-r--r--src/users.cpp22
10 files changed, 26 insertions, 32 deletions
diff --git a/src/configreader.cpp b/src/configreader.cpp
index eb28ddef3..78a21eec7 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -158,13 +158,12 @@ void ServerConfig::CrossCheckOperClassType()
void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
{
- typedef std::map<std::string, ConnectClass*> ClassMap;
+ typedef std::map<std::string, std::shared_ptr<ConnectClass>> ClassMap;
ClassMap oldBlocksByMask;
if (current)
{
- for(ClassVector::iterator i = current->Classes.begin(); i != current->Classes.end(); ++i)
+ for (auto& c : current->Classes)
{
- ConnectClass* c = *i;
if (c->name.compare(0, 8, "unnamed-", 8))
{
oldBlocksByMask["n" + c->name] = c;
@@ -205,7 +204,7 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
continue;
}
- ConnectClass* parent = NULL;
+ std::shared_ptr<ConnectClass> parent;
std::string parentName = tag->getString("parent");
if (!parentName.empty())
{
@@ -261,9 +260,9 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
throw CoreException("Two connect classes with name \"" + name + "\" defined!");
names[name] = i;
- ConnectClass* me = parent ?
- new ConnectClass(tag, type, mask, *parent) :
- new ConnectClass(tag, type, mask);
+ auto me = parent
+ ? std::make_shared<ConnectClass>(tag, type, mask, parent)
+ : std::make_shared<ConnectClass>(tag, type, mask);
me->name = name;
@@ -312,10 +311,9 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
ClassMap::iterator oldMask = oldBlocksByMask.find(typeMask);
if (oldMask != oldBlocksByMask.end())
{
- ConnectClass* old = oldMask->second;
+ std::shared_ptr<ConnectClass> old = oldMask->second;
oldBlocksByMask.erase(oldMask);
old->Update(me);
- delete me;
me = old;
}
Classes[i] = me;
diff --git a/src/coremods/core_stats.cpp b/src/coremods/core_stats.cpp
index 68bfe9f7b..fb2d85fad 100644
--- a/src/coremods/core_stats.cpp
+++ b/src/coremods/core_stats.cpp
@@ -132,9 +132,8 @@ void CommandStats::DoStats(Stats::Context& stats)
case 'i':
{
- for (ServerConfig::ClassVector::const_iterator i = ServerInstance->Config->Classes.begin(); i != ServerInstance->Config->Classes.end(); ++i)
+ for (const auto& c : ServerInstance->Config->Classes)
{
- ConnectClass* c = *i;
Stats::Row row(215);
row.push("I").push(c->name);
@@ -165,9 +164,8 @@ void CommandStats::DoStats(Stats::Context& stats)
case 'Y':
{
int idx = 0;
- for (ServerConfig::ClassVector::const_iterator i = ServerInstance->Config->Classes.begin(); i != ServerInstance->Config->Classes.end(); i++)
+ for (const auto& c : ServerInstance->Config->Classes)
{
- ConnectClass* c = *i;
stats.AddRow(215, 'i', "NOMATCH", '*', c->GetHost(), (c->limit ? c->limit : SocketEngine::GetMaxFds()), idx, ServerInstance->Config->ServerName, '*');
stats.AddRow(218, 'Y', idx, c->GetPingTime(), '0', c->GetSendqHardMax(), ConvToStr(c->GetRecvqMax())+" "+ConvToStr(c->GetRegTimeout()));
idx++;
diff --git a/src/modules.cpp b/src/modules.cpp
index a3ce3cc15..71e893866 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -142,7 +142,7 @@ ModResult Module::OnChannelPreDelete(Channel*) { DetachEvent(I_OnChannelPreDelet
void Module::OnChannelDelete(Channel*) { DetachEvent(I_OnChannelDelete); }
void Module::OnBuildNeighborList(User*, IncludeChanList&, std::map<User*,bool>&) { DetachEvent(I_OnBuildNeighborList); }
void Module::OnGarbageCollect() { DetachEvent(I_OnGarbageCollect); }
-ModResult Module::OnSetConnectClass(LocalUser* user, ConnectClass* myclass) { DetachEvent(I_OnSetConnectClass); return MOD_RES_PASSTHRU; }
+ModResult Module::OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) { DetachEvent(I_OnSetConnectClass); return MOD_RES_PASSTHRU; }
void Module::OnUserMessage(User*, const MessageTarget&, const MessageDetails&) { DetachEvent(I_OnUserMessage); }
ModResult Module::OnNumeric(User*, const Numeric::Numeric&) { DetachEvent(I_OnNumeric); return MOD_RES_PASSTHRU; }
ModResult Module::OnAcceptConnection(int, ListenSocket*, irc::sockets::sockaddrs*, irc::sockets::sockaddrs*) { DetachEvent(I_OnAcceptConnection); return MOD_RES_PASSTHRU; }
diff --git a/src/modules/m_cgiirc.cpp b/src/modules/m_cgiirc.cpp
index 72566b460..ea6c22e9c 100644
--- a/src/modules/m_cgiirc.cpp
+++ b/src/modules/m_cgiirc.cpp
@@ -333,7 +333,7 @@ class ModuleCgiIRC
cmd.notify = ServerInstance->Config->ConfValue("cgiirc")->getBool("opernotice", true);
}
- ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) override
+ ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
{
// If <connect:webirc> is not set then we have nothing to do.
const std::string webirc = myclass->config->getString("webirc");
diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp
index 14e55b990..c05161232 100644
--- a/src/modules/m_dnsbl.cpp
+++ b/src/modules/m_dnsbl.cpp
@@ -411,7 +411,7 @@ class ModuleDNSBL : public Module, public Stats::EventListener
}
}
- ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) override
+ ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
{
std::string dnsbl;
if (!myclass->config->readString("dnsbl", dnsbl))
diff --git a/src/modules/m_geoclass.cpp b/src/modules/m_geoclass.cpp
index 2b13abf13..6d172440b 100644
--- a/src/modules/m_geoclass.cpp
+++ b/src/modules/m_geoclass.cpp
@@ -42,7 +42,7 @@ class ModuleGeoClass
{
}
- ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) override
+ ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
{
const std::string country = myclass->config->getString("country");
if (country.empty())
diff --git a/src/modules/m_ident.cpp b/src/modules/m_ident.cpp
index b53d970a8..7710d9dfa 100644
--- a/src/modules/m_ident.cpp
+++ b/src/modules/m_ident.cpp
@@ -403,7 +403,7 @@ class ModuleIdent : public Module
return MOD_RES_PASSTHRU;
}
- ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) override
+ ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
{
if (myclass->config->getBool("requireident") && state.get(user) != IDENT_FOUND)
return MOD_RES_DENY;
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp
index 35413ac21..e105d67f5 100644
--- a/src/modules/m_services_account.cpp
+++ b/src/modules/m_services_account.cpp
@@ -316,7 +316,7 @@ class ModuleServicesAccount
return MOD_RES_PASSTHRU;
}
- ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) override
+ ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
{
if (myclass->config->getBool("requireaccount") && !accountname.get(user))
return MOD_RES_DENY;
diff --git a/src/modules/m_sslinfo.cpp b/src/modules/m_sslinfo.cpp
index 5d3d04a24..566f9f786 100644
--- a/src/modules/m_sslinfo.cpp
+++ b/src/modules/m_sslinfo.cpp
@@ -310,7 +310,7 @@ class ModuleSSLInfo
}
}
- ModResult OnSetConnectClass(LocalUser* user, ConnectClass* myclass) override
+ ModResult OnSetConnectClass(LocalUser* user, std::shared_ptr<ConnectClass> myclass) override
{
ssl_cert* cert = cmd.sslapi.GetCertificate(user);
bool ok = true;
diff --git a/src/users.cpp b/src/users.cpp
index 2f41cf97c..cee201d0b 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -504,7 +504,7 @@ void User::UnOper()
*/
void LocalUser::CheckClass(bool clone_count)
{
- ConnectClass* a = this->MyClass;
+ std::shared_ptr<ConnectClass> a = this->MyClass;
if (!a)
{
@@ -1093,16 +1093,14 @@ bool User::ChangeIdent(const std::string& newident)
*/
void LocalUser::SetClass(const std::string &explicit_name)
{
- ConnectClass *found = NULL;
+ std::shared_ptr<ConnectClass> found;
ServerInstance->Logs.Log("CONNECTCLASS", LOG_DEBUG, "Setting connect class for UID %s", this->uuid.c_str());
if (!explicit_name.empty())
{
- for (ServerConfig::ClassVector::const_iterator i = ServerInstance->Config->Classes.begin(); i != ServerInstance->Config->Classes.end(); ++i)
+ for (const auto& c : ServerInstance->Config->Classes)
{
- ConnectClass* c = *i;
-
if (explicit_name == c->name)
{
ServerInstance->Logs.Log("CONNECTCLASS", LOG_DEBUG, "Explicitly set to %s", explicit_name.c_str());
@@ -1112,9 +1110,8 @@ void LocalUser::SetClass(const std::string &explicit_name)
}
else
{
- for (ServerConfig::ClassVector::const_iterator i = ServerInstance->Config->Classes.begin(); i != ServerInstance->Config->Classes.end(); ++i)
+ for (const auto& c : ServerInstance->Config->Classes)
{
- ConnectClass* c = *i;
ServerInstance->Logs.Log("CONNECTCLASS", LOG_DEBUG, "Checking %s", c->GetName().c_str());
ModResult MOD_RESULT;
@@ -1147,8 +1144,9 @@ void LocalUser::SetClass(const std::string &explicit_name)
* deny change if change will take class over the limit check it HERE, not after we found a matching class,
* because we should attempt to find another class if this one doesn't match us. -- w00t
*/
- if (c->limit && (c->GetReferenceCount() >= c->limit))
+ if (c->limit && (c.use_count() >= static_cast<long>(c->limit)))
{
+ // HACK: using use_count() is awful and should be removed before v4 is released.
ServerInstance->Logs.Log("CONNECTCLASS", LOG_DEBUG, "OOPS: Connect class limit (%lu) hit, denying", c->limit);
continue;
}
@@ -1231,9 +1229,9 @@ ConnectClass::ConnectClass(std::shared_ptr<ConfigTag> tag, char t, const std::st
{
}
-ConnectClass::ConnectClass(std::shared_ptr<ConfigTag> tag, char t, const std::string& mask, const ConnectClass& parent)
+ConnectClass::ConnectClass(std::shared_ptr<ConfigTag> tag, char t, const std::string& mask, std::shared_ptr<ConnectClass> parent)
{
- Update(&parent);
+ Update(parent);
name = "unnamed";
type = t;
host = mask;
@@ -1244,7 +1242,7 @@ ConnectClass::ConnectClass(std::shared_ptr<ConfigTag> tag, char t, const std::st
ConfigItems* items = NULL;
config = ConfigTag::create(tag->tag, tag->src_name, tag->src_line, items);
- const ConfigItems& parentkeys = parent.config->getItems();
+ const ConfigItems& parentkeys = parent->config->getItems();
for (ConfigItems::const_iterator piter = parentkeys.begin(); piter != parentkeys.end(); ++piter)
{
// The class name and parent name are not inherited
@@ -1264,7 +1262,7 @@ ConnectClass::ConnectClass(std::shared_ptr<ConfigTag> tag, char t, const std::st
}
}
-void ConnectClass::Update(const ConnectClass* src)
+void ConnectClass::Update(const std::shared_ptr<ConnectClass> src)
{
config = src->config;
type = src->type;