diff options
| author | 2019-08-13 18:59:24 +0100 | |
|---|---|---|
| committer | 2019-08-13 19:08:17 +0100 | |
| commit | eeb6dcec601271badd27ad1c0558764ca5789d64 (patch) | |
| tree | e5cde71a4cf061076a217a67d48b59830e84c223 | |
| parent | Rewrite and merge LocalStringExt, StringExtItem. (diff) | |
Replace LocalIntExt with IntExtItem.
| -rw-r--r-- | include/extensible.h | 54 | ||||
| -rw-r--r-- | include/modules/cap.h | 2 | ||||
| -rw-r--r-- | src/base.cpp | 36 | ||||
| -rw-r--r-- | src/coremods/core_channel/cmode_l.cpp | 2 | ||||
| -rw-r--r-- | src/coremods/core_channel/core_channel.h | 2 | ||||
| -rw-r--r-- | src/coremods/core_hostname_lookup.cpp | 6 | ||||
| -rw-r--r-- | src/extensible.cpp | 49 | ||||
| -rw-r--r-- | src/modules/m_cap.cpp | 4 | ||||
| -rw-r--r-- | src/modules/m_delayjoin.cpp | 25 | ||||
| -rw-r--r-- | src/modules/m_delaymsg.cpp | 8 | ||||
| -rw-r--r-- | src/modules/m_dnsbl.cpp | 6 | ||||
| -rw-r--r-- | src/modules/m_ident.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_ircv3_batch.cpp | 4 | ||||
| -rw-r--r-- | src/modules/m_ldapauth.cpp | 4 | ||||
| -rw-r--r-- | src/modules/m_nicklock.cpp | 13 | ||||
| -rw-r--r-- | src/modules/m_sqlauth.cpp | 6 | ||||
| -rw-r--r-- | src/modules/m_sslinfo.cpp | 2 | ||||
| -rw-r--r-- | src/modules/m_swhois.cpp | 8 |
18 files changed, 147 insertions, 86 deletions
diff --git a/include/extensible.h b/include/extensible.h index 3759b13b9..296ae7518 100644 --- a/include/extensible.h +++ b/include/extensible.h @@ -252,15 +252,53 @@ class CoreExport StringExtItem : public SimpleExtItem<std::string> std::string ToNetwork(const Extensible* container, void* item) const override; }; -class CoreExport LocalIntExt : public ExtensionItem +/** Encapsulates an ExtensionItem which has a integer value. */ +class CoreExport IntExtItem : public ExtensionItem { + protected: + /** Whether to sync this IntExtItem across the network. */ + bool synced; + public: - LocalIntExt(Module* owner, const std::string& key, ExtensibleType exttype); - virtual ~LocalIntExt(); - std::string ToInternal(const Extensible* container, void* item) const override; - void FromInternal(Extensible* container, const std::string& value) override; - intptr_t get(const Extensible* container) const; - intptr_t set(Extensible* container, intptr_t value); - void unset(Extensible* container) { set(container, 0); } + /** Initializes an instance of the IntExtItem class. + * @param owner The module which created this IntExtItem. + * @param key The name of the extension item (e.g. ssl_cert). + * @param exttype The type of Extensible that this IntExtItem applies to. + * @param sync Whether this IntExtItem should be broadcast to other servers. + */ + IntExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync = false); + + /** Destroys an instance of the IntExtItem class. */ + virtual ~IntExtItem() = default; + + /** @copydoc ExtensionItem::Delete */ void Delete(Extensible* container, void* item) override; + + /** Retrieves the value for this IntExtItem. + * @param container The container that the IntExtItem is set on. + * @return Either the value of this IntExtItem or NULL if it is not set. + */ + intptr_t get(const Extensible* container) const; + + /** @copydoc ExtensionItem::FromInternal */ + void FromInternal(Extensible* container, const std::string& value) override; + + /** @copydoc ExtensionItem::FromNetwork */ + void FromNetwork(Extensible* container, const std::string& value) override; + + /** Sets a value for this IntExtItem. + * @param container A container that the IntExtItem should be set on. + */ + void set(Extensible* container, intptr_t value); + + /** @copydoc ExtensionItem::ToInternal */ + std::string ToInternal(const Extensible* container, void* item) const override; + + /** @copydoc ExtensionItem::ToNetwork */ + std::string ToNetwork(const Extensible* container, void* item) const override; + + /** Removes the value for this IntExtItem. + * @param container A container the ExtensionItem should be removed from. + */ + void unset(Extensible* container); }; diff --git a/include/modules/cap.h b/include/modules/cap.h index 6d1ad633c..3bfd6d8bc 100644 --- a/include/modules/cap.h +++ b/include/modules/cap.h @@ -28,7 +28,7 @@ namespace Cap static const unsigned int MAX_VALUE_LENGTH = 100; typedef intptr_t Ext; - class ExtItem : public LocalIntExt + class ExtItem : public IntExtItem { public: ExtItem(Module* mod); diff --git a/src/base.cpp b/src/base.cpp index 27ed03d1a..71a17b6df 100644 --- a/src/base.cpp +++ b/src/base.cpp @@ -246,42 +246,6 @@ std::string ExtensionItem::ToNetwork(const Extensible* container, void* item) co return std::string(); } -LocalIntExt::LocalIntExt(Module* mod, const std::string& Key, ExtensibleType exttype) - : ExtensionItem(mod, Key, exttype) -{ -} - -LocalIntExt::~LocalIntExt() -{ -} - -std::string LocalIntExt::ToInternal(const Extensible* container, void* item) const -{ - return ConvToStr(reinterpret_cast<intptr_t>(item)); -} - -void LocalIntExt::FromInternal(Extensible* container, const std::string& value) -{ - set(container, ConvToNum<intptr_t>(value)); -} - -intptr_t LocalIntExt::get(const Extensible* container) const -{ - return reinterpret_cast<intptr_t>(get_raw(container)); -} - -intptr_t LocalIntExt::set(Extensible* container, intptr_t value) -{ - if (value) - return reinterpret_cast<intptr_t>(set_raw(container, reinterpret_cast<void*>(value))); - else - return reinterpret_cast<intptr_t>(unset_raw(container)); -} - -void LocalIntExt::Delete(Extensible* container, void* item) -{ -} - ModuleException::ModuleException(const std::string &message, Module* who) : CoreException(message, who ? who->ModuleSourceFile : "A Module") { diff --git a/src/coremods/core_channel/cmode_l.cpp b/src/coremods/core_channel/cmode_l.cpp index 05db6e5b7..1db390bab 100644 --- a/src/coremods/core_channel/cmode_l.cpp +++ b/src/coremods/core_channel/cmode_l.cpp @@ -23,7 +23,7 @@ #include "core_channel.h" ModeChannelLimit::ModeChannelLimit(Module* Creator) - : ParamMode<ModeChannelLimit, LocalIntExt>(Creator, "limit", 'l') + : ParamMode<ModeChannelLimit, IntExtItem>(Creator, "limit", 'l') { syntax = "<limit>"; } diff --git a/src/coremods/core_channel/core_channel.h b/src/coremods/core_channel/core_channel.h index 8ee7ad781..5cdbc4ce4 100644 --- a/src/coremods/core_channel/core_channel.h +++ b/src/coremods/core_channel/core_channel.h @@ -187,7 +187,7 @@ class ModeChannelKey : public ParamMode<ModeChannelKey, StringExtItem> /** Channel mode +l */ -class ModeChannelLimit : public ParamMode<ModeChannelLimit, LocalIntExt> +class ModeChannelLimit : public ParamMode<ModeChannelLimit, IntExtItem> { public: ModeChannelLimit(Module* Creator); diff --git a/src/coremods/core_hostname_lookup.cpp b/src/coremods/core_hostname_lookup.cpp index 64a601425..300264044 100644 --- a/src/coremods/core_hostname_lookup.cpp +++ b/src/coremods/core_hostname_lookup.cpp @@ -22,7 +22,7 @@ namespace { - LocalIntExt* dl; + IntExtItem* dl; StringExtItem* ph; } @@ -177,7 +177,7 @@ class UserResolver : public DNS::Request class ModuleHostnameLookup : public Module { - LocalIntExt dnsLookup; + IntExtItem dnsLookup; StringExtItem ptrHosts; dynamic_reference<DNS::Manager> DNS; @@ -215,7 +215,7 @@ class ModuleHostnameLookup : public Module } catch (DNS::Exception& e) { - this->dnsLookup.set(user, 0); + this->dnsLookup.unset(user); delete res_reverse; ServerInstance->Logs.Log(MODNAME, LOG_DEBUG, "Error in resolver: " + e.GetReason()); } diff --git a/src/extensible.cpp b/src/extensible.cpp index 7cf0006f4..2b657e1a3 100644 --- a/src/extensible.cpp +++ b/src/extensible.cpp @@ -19,6 +19,55 @@ #include "inspircd.h" +IntExtItem::IntExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync) + : ExtensionItem(owner, key, exttype) + , synced(sync) +{ +} + +void IntExtItem::Delete(Extensible* container, void* item) +{ + // Intentionally left blank. +} + +void IntExtItem::FromInternal(Extensible* container, const std::string& value) +{ + set(container, ConvToNum<intptr_t>(value)); +} + +void IntExtItem::FromNetwork(Extensible* container, const std::string& value) +{ + if (synced) + FromInternal(container, value); +} + +intptr_t IntExtItem::get(const Extensible* container) const +{ + return reinterpret_cast<intptr_t>(get_raw(container)); +} + +void IntExtItem::set(Extensible* container, intptr_t value) +{ + if (value) + set_raw(container, reinterpret_cast<void*>(value)); + else + unset_raw(container); +} + +std::string IntExtItem::ToInternal(const Extensible* container, void* item) const +{ + return ConvToStr(reinterpret_cast<intptr_t>(item)); +} + +std::string IntExtItem::ToNetwork(const Extensible* container, void* item) const +{ + return synced ? ToInternal(container, item) : std::string(); +} + +void IntExtItem::unset(Extensible* container) +{ + unset_raw(container); +} StringExtItem::StringExtItem(Module* owner, const std::string& key, ExtensibleType exttype, bool sync) : SimpleExtItem(owner, key, exttype) diff --git a/src/modules/m_cap.cpp b/src/modules/m_cap.cpp index c0fe12c0d..ac752f80a 100644 --- a/src/modules/m_cap.cpp +++ b/src/modules/m_cap.cpp @@ -321,7 +321,7 @@ namespace } Cap::ExtItem::ExtItem(Module* mod) - : LocalIntExt(mod, "caps", ExtensionItem::EXT_USER) + : IntExtItem(mod, "caps", ExtensionItem::EXT_USER) { } @@ -383,7 +383,7 @@ class CommandCap : public SplitCommand } public: - LocalIntExt holdext; + IntExtItem holdext; CommandCap(Module* mod) : SplitCommand(mod, "CAP", 1) diff --git a/src/modules/m_delayjoin.cpp b/src/modules/m_delayjoin.cpp index 8730fc4b4..3c3cc4e0c 100644 --- a/src/modules/m_delayjoin.cpp +++ b/src/modules/m_delayjoin.cpp @@ -27,10 +27,10 @@ class DelayJoinMode : public ModeHandler { private: - LocalIntExt& unjoined; + IntExtItem& unjoined; public: - DelayJoinMode(Module* Parent, LocalIntExt& ext) + DelayJoinMode(Module* Parent, IntExtItem& ext) : ModeHandler(Parent, "delayjoin", 'D', PARAM_NONE, MODETYPE_CHANNEL) , unjoined(ext) { @@ -52,10 +52,10 @@ namespace */ class JoinHook : public ClientProtocol::EventHook { - const LocalIntExt& unjoined; + const IntExtItem& unjoined; public: - JoinHook(Module* mod, const LocalIntExt& unjoinedref) + JoinHook(Module* mod, const IntExtItem& unjoinedref) : ClientProtocol::EventHook(mod, "JOIN", 10) , unjoined(unjoinedref) { @@ -80,7 +80,7 @@ class ModuleDelayJoin , public Names::EventListener { public: - LocalIntExt unjoined; + IntExtItem unjoined; JoinHook joinhook; DelayJoinMode djm; @@ -162,14 +162,20 @@ void ModuleDelayJoin::OnUserJoin(Membership* memb, bool sync, bool created, CULi void ModuleDelayJoin::OnUserPart(Membership* memb, std::string &partmessage, CUList& except) { - if (unjoined.set(memb, 0)) + if (unjoined.get(memb)) + { + unjoined.unset(memb); populate(except, memb); + } } void ModuleDelayJoin::OnUserKick(User* source, Membership* memb, const std::string &reason, CUList& except) { - if (unjoined.set(memb, 0)) + if (unjoined.get(memb)) + { + unjoined.unset(memb); populate(except, memb); + } } void ModuleDelayJoin::OnBuildNeighborList(User* source, IncludeChanList& include, std::map<User*, bool>& exception) @@ -205,10 +211,13 @@ void ModuleDelayJoin::OnUserMessage(User* user, const MessageTarget& target, con void DelayJoinMode::RevealUser(User* user, Channel* chan) { Membership* memb = chan->GetUser(user); - if (!memb || !unjoined.set(memb, 0)) + if (!memb || !unjoined.get(memb)) + { return; + } /* Display the join to everyone else (the user who joined got it earlier) */ + unjoined.unset(memb); CUList except_list; except_list.insert(user); ClientProtocol::Events::Join joinevent(memb); diff --git a/src/modules/m_delaymsg.cpp b/src/modules/m_delaymsg.cpp index 8d745616b..3206d9b08 100644 --- a/src/modules/m_delaymsg.cpp +++ b/src/modules/m_delaymsg.cpp @@ -20,12 +20,12 @@ #include "inspircd.h" #include "modules/ctctags.h" -class DelayMsgMode : public ParamMode<DelayMsgMode, LocalIntExt> +class DelayMsgMode : public ParamMode<DelayMsgMode, IntExtItem> { public: - LocalIntExt jointime; + IntExtItem jointime; DelayMsgMode(Module* Parent) - : ParamMode<DelayMsgMode, LocalIntExt>(Parent, "delaymsg", 'd') + : ParamMode<DelayMsgMode, IntExtItem>(Parent, "delaymsg", 'd') , jointime(Parent, "delaymsg", ExtensionItem::EXT_MEMBERSHIP) { ranktoset = ranktounset = OP_VALUE; @@ -145,7 +145,7 @@ ModResult ModuleDelayMsg::HandleMessage(User* user, const MessageTarget& target, else { /* Timer has expired, we can stop checking now */ - djm.jointime.set(memb, 0); + djm.jointime.unset(memb); } return MOD_RES_PASSTHRU; } diff --git a/src/modules/m_dnsbl.cpp b/src/modules/m_dnsbl.cpp index b04e2a54b..b49fb09e3 100644 --- a/src/modules/m_dnsbl.cpp +++ b/src/modules/m_dnsbl.cpp @@ -49,12 +49,12 @@ class DNSBLResolver : public DNS::Request { std::string theiruid; StringExtItem& nameExt; - LocalIntExt& countExt; + IntExtItem& countExt; reference<DNSBLConfEntry> ConfEntry; public: - DNSBLResolver(DNS::Manager *mgr, Module *me, StringExtItem& match, LocalIntExt& ctr, const std::string &hostname, LocalUser* u, reference<DNSBLConfEntry> conf) + DNSBLResolver(DNS::Manager *mgr, Module *me, StringExtItem& match, IntExtItem& ctr, const std::string &hostname, LocalUser* u, reference<DNSBLConfEntry> conf) : DNS::Request(mgr, me, hostname, DNS::QUERY_A, true), theiruid(u->uuid), nameExt(match), countExt(ctr), ConfEntry(conf) { } @@ -235,7 +235,7 @@ class ModuleDNSBL : public Module, public Stats::EventListener DNSBLConfList DNSBLConfEntries; dynamic_reference<DNS::Manager> DNS; StringExtItem nameExt; - LocalIntExt countExt; + IntExtItem countExt; /* * Convert a string to EnumBanaction diff --git a/src/modules/m_ident.cpp b/src/modules/m_ident.cpp index c5fe7a3bc..f828343dd 100644 --- a/src/modules/m_ident.cpp +++ b/src/modules/m_ident.cpp @@ -276,7 +276,7 @@ class ModuleIdent : public Module unsigned int timeout; bool prefixunqueried; SimpleExtItem<IdentRequestSocket, stdalgo::culldeleter> socket; - LocalIntExt state; + IntExtItem state; static void PrefixIdent(LocalUser* user) { diff --git a/src/modules/m_ircv3_batch.cpp b/src/modules/m_ircv3_batch.cpp index 0bc834378..adcaad74e 100644 --- a/src/modules/m_ircv3_batch.cpp +++ b/src/modules/m_ircv3_batch.cpp @@ -62,7 +62,7 @@ class IRCv3::Batch::ManagerImpl : public Manager Cap::Capability cap; ClientProtocol::EventProvider protoevprov; - LocalIntExt batchbits; + IntExtItem batchbits; BatchList active_batches; bool unloading; @@ -112,7 +112,7 @@ class IRCv3::Batch::ManagerImpl : public Manager for (UserManager::LocalList::const_iterator i = users.begin(); i != users.end(); ++i) { LocalUser* const user = *i; - batchbits.set(user, 0); + batchbits.unset(user); } } diff --git a/src/modules/m_ldapauth.cpp b/src/modules/m_ldapauth.cpp index 52b652f49..9162f17b8 100644 --- a/src/modules/m_ldapauth.cpp +++ b/src/modules/m_ldapauth.cpp @@ -31,7 +31,7 @@ namespace { Module* me; std::string killreason; - LocalIntExt* authed; + IntExtItem* authed; bool verbose; std::string vhost; StringExtItem* vhosts; @@ -296,7 +296,7 @@ class AdminBindInterface : public LDAPInterface class ModuleLDAPAuth : public Module { dynamic_reference<LDAPProvider> LDAP; - LocalIntExt ldapAuthed; + IntExtItem ldapAuthed; StringExtItem ldapVhost; std::string base; std::string attribute; diff --git a/src/modules/m_nicklock.cpp b/src/modules/m_nicklock.cpp index 6311df15f..626de10b1 100644 --- a/src/modules/m_nicklock.cpp +++ b/src/modules/m_nicklock.cpp @@ -35,8 +35,8 @@ enum class CommandNicklock : public Command { public: - LocalIntExt& locked; - CommandNicklock (Module* Creator, LocalIntExt& ext) : Command(Creator,"NICKLOCK", 2), + IntExtItem& locked; + CommandNicklock (Module* Creator, IntExtItem& ext) : Command(Creator,"NICKLOCK", 2), locked(ext) { flags_needed = 'o'; @@ -95,8 +95,8 @@ class CommandNicklock : public Command class CommandNickunlock : public Command { public: - LocalIntExt& locked; - CommandNickunlock (Module* Creator, LocalIntExt& ext) : Command(Creator,"NICKUNLOCK", 1), + IntExtItem& locked; + CommandNickunlock (Module* Creator, IntExtItem& ext) : Command(Creator,"NICKUNLOCK", 1), locked(ext) { flags_needed = 'o'; @@ -116,8 +116,9 @@ class CommandNickunlock : public Command if (IS_LOCAL(target)) { - if (locked.set(target, 0)) + if (locked.get(target)) { + locked.unset(target); ServerInstance->SNO.WriteGlobalSno('a', user->nick+" used NICKUNLOCK on "+target->nick); user->WriteRemoteNumeric(RPL_NICKLOCKOFF, target->nick, "Nickname now unlocked."); } @@ -139,7 +140,7 @@ class CommandNickunlock : public Command class ModuleNickLock : public Module { - LocalIntExt locked; + IntExtItem locked; CommandNicklock cmd1; CommandNickunlock cmd2; public: diff --git a/src/modules/m_sqlauth.cpp b/src/modules/m_sqlauth.cpp index 17c5c2b3b..9e72a793a 100644 --- a/src/modules/m_sqlauth.cpp +++ b/src/modules/m_sqlauth.cpp @@ -32,12 +32,12 @@ class AuthQuery : public SQL::Query { public: const std::string uid; - LocalIntExt& pendingExt; + IntExtItem& pendingExt; bool verbose; const std::string& kdf; const std::string& pwcolumn; - AuthQuery(Module* me, const std::string& u, LocalIntExt& e, bool v, const std::string& kd, const std::string& pwcol) + AuthQuery(Module* me, const std::string& u, IntExtItem& e, bool v, const std::string& kd, const std::string& pwcol) : SQL::Query(me) , uid(u) , pendingExt(e) @@ -114,7 +114,7 @@ class AuthQuery : public SQL::Query class ModuleSQLAuth : public Module { - LocalIntExt pendingExt; + IntExtItem pendingExt; dynamic_reference<SQL::Provider> SQL; UserCertificateAPI sslapi; diff --git a/src/modules/m_sslinfo.cpp b/src/modules/m_sslinfo.cpp index 7edfe972a..5e9c86a82 100644 --- a/src/modules/m_sslinfo.cpp +++ b/src/modules/m_sslinfo.cpp @@ -99,7 +99,7 @@ class SSLCertExt : public ExtensionItem class UserCertificateAPIImpl : public UserCertificateAPIBase { public: - LocalIntExt nosslext; + IntExtItem nosslext; SSLCertExt sslext; UserCertificateAPIImpl(Module* mod) diff --git a/src/modules/m_swhois.cpp b/src/modules/m_swhois.cpp index 3af8f6565..446af180e 100644 --- a/src/modules/m_swhois.cpp +++ b/src/modules/m_swhois.cpp @@ -37,7 +37,7 @@ enum class CommandSwhois : public Command { public: - LocalIntExt operblock; + IntExtItem operblock; StringExtItem swhois; CommandSwhois(Module* Creator) : Command(Creator, "SWHOIS", 2, 2) @@ -72,7 +72,7 @@ class CommandSwhois : public Command ServerInstance->SNO.WriteGlobalSno('a', "%s used SWHOIS to set %s's extra whois to '%s'", user->nick.c_str(), dest->nick.c_str(), parameters[1].c_str()); } - operblock.set(user, 0); + operblock.unset(user); if (parameters[1].empty()) swhois.unset(dest); else @@ -144,7 +144,7 @@ class ModuleSWhois : public Module, public Whois::LineEventListener if (!cmd.operblock.get(user)) return; - cmd.operblock.set(user, 0); + cmd.operblock.unset(user); cmd.swhois.unset(user); ServerInstance->PI->SendMetaData(user, "swhois", ""); } @@ -153,7 +153,7 @@ class ModuleSWhois : public Module, public Whois::LineEventListener { User* dest = static_cast<User*>(target); if (dest && (extname == "swhois")) - cmd.operblock.set(dest, 0); + cmd.operblock.unset(dest); } Version GetVersion() override |
