aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Sadie Powell2019-08-13 18:59:24 +0100
committerGravatar Sadie Powell2019-08-13 19:08:17 +0100
commiteeb6dcec601271badd27ad1c0558764ca5789d64 (patch)
treee5cde71a4cf061076a217a67d48b59830e84c223
parentRewrite and merge LocalStringExt, StringExtItem. (diff)
Replace LocalIntExt with IntExtItem.
-rw-r--r--include/extensible.h54
-rw-r--r--include/modules/cap.h2
-rw-r--r--src/base.cpp36
-rw-r--r--src/coremods/core_channel/cmode_l.cpp2
-rw-r--r--src/coremods/core_channel/core_channel.h2
-rw-r--r--src/coremods/core_hostname_lookup.cpp6
-rw-r--r--src/extensible.cpp49
-rw-r--r--src/modules/m_cap.cpp4
-rw-r--r--src/modules/m_delayjoin.cpp25
-rw-r--r--src/modules/m_delaymsg.cpp8
-rw-r--r--src/modules/m_dnsbl.cpp6
-rw-r--r--src/modules/m_ident.cpp2
-rw-r--r--src/modules/m_ircv3_batch.cpp4
-rw-r--r--src/modules/m_ldapauth.cpp4
-rw-r--r--src/modules/m_nicklock.cpp13
-rw-r--r--src/modules/m_sqlauth.cpp6
-rw-r--r--src/modules/m_sslinfo.cpp2
-rw-r--r--src/modules/m_swhois.cpp8
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