From 75de6e0d5c28d0a4f798a02be024e45f148bc52c Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 27 Dec 2022 17:57:54 +0000 Subject: Add the ListExtItem extension type. --- src/modules/m_account.cpp | 45 ++------------------------------------------- src/modules/m_cloaking.cpp | 19 ++----------------- src/modules/m_dnsbl.cpp | 8 ++++---- 3 files changed, 8 insertions(+), 64 deletions(-) (limited to 'src/modules') diff --git a/src/modules/m_account.cpp b/src/modules/m_account.cpp index 33ca64929..3e1795ed5 100644 --- a/src/modules/m_account.cpp +++ b/src/modules/m_account.cpp @@ -83,54 +83,13 @@ public: } }; - -class AccountNicksExtItem final - : public SimpleExtItem -{ -public: - AccountNicksExtItem(Module* mod) - : SimpleExtItem(mod, "accountnicks", ExtensionType::USER, true) - { - } - - void FromInternal(Extensible* container, const std::string& value) noexcept override - { - if (container->extype != this->extype) - return; - - auto list = new Account::NickList(); - irc::spacesepstream nickstream(value); - for (std::string nick; nickstream.GetToken(nick); ) - list->insert(nick); - - if (list->empty()) - { - // The remote sent an empty list of nicknames for some reason. - delete list; - Unset(container); - } - else - { - // The remote sent a non-zero list of nicks; set it. - Set(container, list); - } - } - - std::string ToInternal(const Extensible* container, void* item) const noexcept override - { - auto list = static_cast(item); - return stdalgo::string::join(*list); - } -}; - - class AccountAPIImpl final : public Account::APIBase { private: AccountExtItemImpl accountext; StringExtItem accountidext; - AccountNicksExtItem accountnicksext; + ListExtItem accountnicksext; UserModeReference identifiedmode; public: @@ -138,7 +97,7 @@ public: : Account::APIBase(mod) , accountext(mod) , accountidext(mod, "accountid", ExtensionType::USER, true) - , accountnicksext(mod) + , accountnicksext(mod, "accountnicks", ExtensionType::USER, true) , identifiedmode(mod, "u_registered") { } diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp index 0cb209ea7..d70979972 100644 --- a/src/modules/m_cloaking.cpp +++ b/src/modules/m_cloaking.cpp @@ -84,34 +84,19 @@ struct CloakInfo final typedef std::vector CloakList; -class CloakExtItem final - : public SimpleExtItem -{ -public: - CloakExtItem(Module* Creator) - : SimpleExtItem(Creator, "cloaks", ExtensionType::USER) - { - } - - std::string ToHuman(const Extensible* container, void* item) const noexcept override - { - return stdalgo::string::join(*static_cast(item), ' '); - } -}; - class CloakUser final : public ModeHandler { public: bool active = false; - CloakExtItem ext; + ListExtItem ext; std::string debounce_uid; time_t debounce_ts = 0; int debounce_count = 0; CloakUser(Module* source) : ModeHandler(source, "cloak", 'x', PARAM_NONE, MODETYPE_USER) - , ext(source) + , ext(source, "cloaks", ExtensionType::USER) { } diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp index 3dafbb486..bfa72d39b 100644 --- a/src/modules/m_dnsbl.cpp +++ b/src/modules/m_dnsbl.cpp @@ -163,7 +163,7 @@ public: } }; -typedef SimpleExtItem > MarkExtItem; +typedef ListExtItem> MarkExtItem; class DNSBLResolver final : public DNS::Request @@ -296,10 +296,10 @@ public: them->ChangeDisplayedHost(ConfEntry->markhost); } - std::vector* marks = nameExt.Get(them); + MarkExtItem::List* marks = nameExt.Get(them); if (!marks) { - marks = new std::vector(); + marks = new MarkExtItem::List(); nameExt.Set(them, marks); } marks->push_back(ConfEntry->name); @@ -475,7 +475,7 @@ public: if (!myclass->config->readString("dnsbl", dnsbl)) return MOD_RES_PASSTHRU; - std::vector* match = nameExt.Get(user); + MarkExtItem::List* match = nameExt.Get(user); if (!match) { ServerInstance->Logs.Debug("CONNECTCLASS", "The %s connect class is not suitable as it requires a DNSBL mark", -- cgit v1.3.1-10-gc9f91