aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-05-09 22:45:40 +0100
committerGravatar Sadie Powell2021-05-10 01:46:51 +0100
commitecabf153d01b4cb48944155a638e1cf4c1d80d98 (patch)
tree8a1b2773847c0a9bf6ffefff2ae1b8ef4ff95df5 /src/modules
parentSwitch Channel::ChanModes to use the channel mode map. (diff)
Add a new map-based method for building link data.
The new link data is not currently used but will be in the near future.
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/m_cban.cpp6
-rw-r--r--src/modules/m_chanfilter.cpp8
-rw-r--r--src/modules/m_cloaking.cpp32
-rw-r--r--src/modules/m_codepage.cpp30
-rw-r--r--src/modules/m_filter.cpp8
-rw-r--r--src/modules/m_kicknorejoin.cpp12
-rw-r--r--src/modules/m_repeat.cpp17
-rw-r--r--src/modules/m_rline.cpp6
-rw-r--r--src/modules/m_spanningtree/capab.cpp3
-rw-r--r--src/modules/m_spanningtree/main.cpp19
10 files changed, 85 insertions, 56 deletions
diff --git a/src/modules/m_cban.cpp b/src/modules/m_cban.cpp
index 70c01109d..6afba34e4 100644
--- a/src/modules/m_cban.cpp
+++ b/src/modules/m_cban.cpp
@@ -211,9 +211,11 @@ class ModuleCBan : public Module, public Stats::EventListener
return MOD_RES_PASSTHRU;
}
- void GetLinkData(std::string& data) override
+ void GetLinkData(LinkData& data, std::string& compatdata) override
{
- data = "glob";
+ // It is assumed that if a server can speak the v4 protocol it can also
+ // handle glob patterns for channel bans.
+ compatdata.assign("glob");
}
};
diff --git a/src/modules/m_chanfilter.cpp b/src/modules/m_chanfilter.cpp
index dd47f4df1..6310a4eaf 100644
--- a/src/modules/m_chanfilter.cpp
+++ b/src/modules/m_chanfilter.cpp
@@ -163,11 +163,13 @@ class ModuleChanFilter : public Module
return MOD_RES_PASSTHRU;
}
- void GetLinkData(std::string& data) override
+ void GetLinkData(LinkData& data, std::string& compatdata) override
{
- // We don't send any link data if the length is 35 for compatibility with the 2.0 branch.
+ data["max-length"] = ConvToStr(cf.maxlen);
+
+ // We don't send any link data if the length is 35 for compatibility with v3 and earlier..
if (cf.maxlen != 35)
- data.assign(ConvToStr(cf.maxlen));
+ compatdata = ConvToStr(cf.maxlen);
}
};
diff --git a/src/modules/m_cloaking.cpp b/src/modules/m_cloaking.cpp
index 6462a1ef3..f665ce3dc 100644
--- a/src/modules/m_cloaking.cpp
+++ b/src/modules/m_cloaking.cpp
@@ -411,12 +411,11 @@ class ModuleCloaking : public Module
cu.active = false;
}
- void GetLinkData(std::string& data) override
+ std::string GetCompatLinkData(const CloakInfo& info)
{
- data = "broken";
- if (Hash && !cloaks.empty())
+ std::string data = "broken";
+ if (Hash)
{
- const CloakInfo& info = cloaks.front();
switch (info.mode)
{
case MODE_HALF_CLOAK:
@@ -434,6 +433,31 @@ class ModuleCloaking : public Module
data = info.prefix + SegmentCloak(info, "*", 4, 8) + info.suffix + (info.ignorecase ? "-ci" : "");
}
}
+ return data;
+ }
+
+ void GetLinkData(LinkData& data, std::string& compatdata) override
+ {
+ if (cloaks.empty())
+ return;
+
+ const CloakInfo& info = cloaks.front();
+ switch (info.mode)
+ {
+ case MODE_HALF_CLOAK:
+ data["mode"] = "half";
+ break;
+ case MODE_OPAQUE:
+ data["mode"] = "full";
+ break;
+ }
+ data["domain-parts"] = ConvToStr(info.domainparts);
+ data["hash"] = Hash ? Hash->name : "broken";
+ data["ignore-case"] = info.ignorecase ? "yes" : "no";
+ data["key"] = info.key;
+ data["prefix"] = info.prefix;
+ data["suffix"] = info.suffix;
+ compatdata = GetCompatLinkData(info);
}
void ReadConfig(ConfigStatus& status) override
diff --git a/src/modules/m_codepage.cpp b/src/modules/m_codepage.cpp
index fae2398c5..a2df8cf7e 100644
--- a/src/modules/m_codepage.cpp
+++ b/src/modules/m_codepage.cpp
@@ -77,7 +77,7 @@ class Codepage
virtual bool IsValidNick(const std::string& nick) = 0;
// Retrieves the link data for this codepage.
- virtual std::string LinkData() const = 0;
+ virtual void GetLinkData(Module::LinkData& data, std::string& compatdata) const = 0;
// Maps an upper case character to a lower case character.
virtual bool Map(unsigned long upper, unsigned long lower) = 0;
@@ -134,26 +134,28 @@ class SingleByteCodepage final
return true;
}
- std::string LinkData() const override
+ void GetLinkData(Module::LinkData& data, std::string& compatdata) const override
{
- std::stringstream linkdata;
-
- linkdata << "front=";
for (size_t i = 0; i < allowedfrontchars.size(); ++i)
if (allowedfrontchars[i])
- linkdata << static_cast<unsigned char>(i);
+ data["front"].push_back(static_cast<unsigned char>(i));
- linkdata << "&middle=";
for (size_t i = 0; i < allowedchars.size(); ++i)
if (allowedchars[i])
- linkdata << static_cast<unsigned char>(i);
+ data["middle"].push_back(static_cast<unsigned char>(i));
- linkdata << "&map=";
for (size_t i = 0; i < sizeof(casemap); ++i)
- if (casemap[i] != i)
- linkdata << static_cast<unsigned char>(i) << casemap[i] << ',';
+ {
+ if (casemap[i] == i)
+ continue;
+
+ data["map"].push_back(static_cast<unsigned char>(i));
+ data["map"].push_back(casemap[i]);
+ data["map"].push_back(',');
+ }
- return linkdata.str();
+ compatdata = InspIRCd::Format("front=%s&middle=%s&map=%s", data["front"].c_str(),
+ data["middle"].c_str(), data["map"].c_str());
}
bool Map(unsigned long upper, unsigned long lower) override
@@ -313,9 +315,9 @@ class ModuleCodepage final
CheckRehash(newcodepage->casemap);
}
- void GetLinkData(std::string& data) override
+ void GetLinkData(LinkData& data, std::string& compatdata) override
{
- data.assign(codepage ? codepage->LinkData() : "");
+ codepage->GetLinkData(data, compatdata);
}
};
diff --git a/src/modules/m_filter.cpp b/src/modules/m_filter.cpp
index 4759f42a1..7678b539e 100644
--- a/src/modules/m_filter.cpp
+++ b/src/modules/m_filter.cpp
@@ -220,7 +220,7 @@ class ModuleFilter
bool DeleteFilter(const std::string& freeform, std::string& reason);
std::pair<bool, std::string> AddFilter(const std::string& freeform, FilterAction type, const std::string& reason, unsigned long duration, const std::string& flags, bool config = false);
void ReadConfig(ConfigStatus& status) override;
- void GetLinkData(std::string& data) override;
+ void GetLinkData(LinkData& data, std::string& compatdata) override;
std::string EncodeFilter(const FilterResult& filter);
FilterResult DecodeFilter(const std::string &data);
void OnSyncNetwork(ProtocolInterface::Server& server) override;
@@ -667,10 +667,12 @@ void ModuleFilter::ReadConfig(ConfigStatus& status)
ReadFilters();
}
-void ModuleFilter::GetLinkData(std::string& data)
+void ModuleFilter::GetLinkData(LinkData& data, std::string& compatdata)
{
if (RegexEngine)
- data = RegexEngine->name;
+ data["regex"] = compatdata = RegexEngine->name;
+ else
+ data["regex"] = "broken";
}
std::string ModuleFilter::EncodeFilter(const FilterResult& filter)
diff --git a/src/modules/m_kicknorejoin.cpp b/src/modules/m_kicknorejoin.cpp
index 8b194b8e1..78a5031e4 100644
--- a/src/modules/m_kicknorejoin.cpp
+++ b/src/modules/m_kicknorejoin.cpp
@@ -94,8 +94,9 @@ class KickRejoinData
*/
class KickRejoin : public ParamMode<KickRejoin, SimpleExtItem<KickRejoinData> >
{
- const unsigned int max = 60;
public:
+ const unsigned int max = 60;
+
KickRejoin(Module* Creator)
: ParamMode<KickRejoin, SimpleExtItem<KickRejoinData> >(Creator, "kicknorejoin", 'J')
{
@@ -122,11 +123,6 @@ class KickRejoin : public ParamMode<KickRejoin, SimpleExtItem<KickRejoinData> >
{
out.append(ConvToStr(krd->delay));
}
-
- std::string GetModuleSettings() const
- {
- return ConvToStr(max);
- }
};
class ModuleKickNoRejoin : public Module
@@ -168,9 +164,9 @@ public:
}
}
- void GetLinkData(std::string& data) override
+ void GetLinkData(LinkData& data, std::string& compatdata) override
{
- data = kr.GetModuleSettings();
+ data["max-time"] = compatdata = kr.max;
}
};
diff --git a/src/modules/m_repeat.cpp b/src/modules/m_repeat.cpp
index 507b23293..bcbe18a5a 100644
--- a/src/modules/m_repeat.cpp
+++ b/src/modules/m_repeat.cpp
@@ -95,7 +95,6 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
};
std::vector<unsigned int> mx[2];
- ModuleSettings ms;
bool CompareLines(const std::string& message, const std::string& historyline, unsigned int trigger)
{
@@ -126,6 +125,7 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
}
public:
+ ModuleSettings ms;
SimpleExtItem<MemberInfo> MemberInfoExt;
RepeatMode(Module* Creator)
@@ -255,11 +255,6 @@ class RepeatMode : public ParamMode<RepeatMode, SimpleExtItem<ChannelSettings> >
ms.KickMessage = conf->getString("kickmessage", "Repeat flood");
}
- std::string GetModuleSettings() const
- {
- return ConvToStr(ms.MaxLines) + ":" + ConvToStr(ms.MaxSecs) + ":" + ConvToStr(ms.MaxDiff) + ":" + ConvToStr(ms.MaxBacklog);
- }
-
std::string GetKickMessage() const
{
return ms.KickMessage;
@@ -421,9 +416,15 @@ class RepeatModule : public Module
ServerInstance->Modules.SetPriority(this, I_OnUserPreMessage, PRIORITY_LAST);
}
- void GetLinkData(std::string& data) override
+ void GetLinkData(LinkData& data, std::string& compatdata) override
{
- data = rm.GetModuleSettings();
+ data["max-lines"] = ConvToStr(rm.ms.MaxLines);
+ data["max-secs"] = ConvToStr(rm.ms.MaxSecs);
+ data["max-diff"] = ConvToStr(rm.ms.MaxDiff);
+ data["max-backlog"] = ConvToStr(rm.ms.MaxBacklog);
+
+ compatdata = InspIRCd::Format("%u:%u:%u:%u", rm.ms.MaxLines, rm.ms.MaxSecs,
+ rm.ms.MaxDiff, rm.ms.MaxBacklog);
}
};
diff --git a/src/modules/m_rline.cpp b/src/modules/m_rline.cpp
index a59eb00b0..aa7b94e8f 100644
--- a/src/modules/m_rline.cpp
+++ b/src/modules/m_rline.cpp
@@ -238,10 +238,12 @@ class ModuleRLine
ServerInstance->XLines->UnregisterFactory(&f);
}
- void GetLinkData(std::string& data) override
+ void GetLinkData(LinkData& data, std::string& compatdata) override
{
if (rxfactory)
- data = rxfactory->name;
+ data["regex"] = compatdata = rxfactory->name;
+ else
+ data["regex"] = "broken";
}
ModResult OnUserRegister(LocalUser* user) override
diff --git a/src/modules/m_spanningtree/capab.cpp b/src/modules/m_spanningtree/capab.cpp
index f7c5df891..aa80d4f37 100644
--- a/src/modules/m_spanningtree/capab.cpp
+++ b/src/modules/m_spanningtree/capab.cpp
@@ -61,7 +61,8 @@ namespace
modname.assign(name.substr(startpos, endpos - startpos));
}
- module->GetLinkData(modules[modname]);
+ Module::LinkData data;
+ module->GetLinkData(data, modules[modname]);
}
return modules;
}
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp
index b59b74099..19a0fc332 100644
--- a/src/modules/m_spanningtree/main.cpp
+++ b/src/modules/m_spanningtree/main.cpp
@@ -680,19 +680,16 @@ void ModuleSpanningTree::ReadConfig(ConfigStatus& status)
void ModuleSpanningTree::OnLoadModule(Module* mod)
{
- std::string data;
- data.push_back('+');
- data.append(mod->ModuleSourceFile);
+ std::stringstream buffer;
+ buffer << '+' << mod->ModuleSourceFile;
- std::string link_data;
- mod->GetLinkData(link_data);
- if (!link_data.empty())
- {
- data.push_back('=');
- data.append(link_data);
- }
+ Module::LinkData data;
+ std::string compatdata;
+ mod->GetLinkData(data, compatdata);
+ if (!compatdata.empty())
+ buffer << '=' << compatdata;
- ServerInstance->PI->SendMetaData("modules", data);
+ ServerInstance->PI->SendMetaData("modules", buffer.str());
}
void ModuleSpanningTree::OnUnloadModule(Module* mod)