diff options
| author | 2020-11-03 14:48:54 +0000 | |
|---|---|---|
| committer | 2020-11-03 19:54:13 +0000 | |
| commit | 89a21202de35eeec8ef464ada5e9fbb97fd83ba5 (patch) | |
| tree | b70c242c58bae562bef1d42c34c9d5d628d81208 /src | |
| parent | Clean up a bunch of contructors and destructors. (diff) | |
| download | inspircd++-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.cpp | 16 | ||||
| -rw-r--r-- | src/coremods/core_stats.cpp | 6 | ||||
| -rw-r--r-- | src/modules.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_cgiirc.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_dnsbl.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_geoclass.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_ident.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_services_account.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_sslinfo.cpp | 2 | ||||
| -rw-r--r-- | src/users.cpp | 22 |
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; |
