diff options
| author | 2021-05-09 22:45:40 +0100 | |
|---|---|---|
| committer | 2021-05-10 01:46:51 +0100 | |
| commit | ecabf153d01b4cb48944155a638e1cf4c1d80d98 (patch) | |
| tree | 8a1b2773847c0a9bf6ffefff2ae1b8ef4ff95df5 /src/modules | |
| parent | Switch 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.cpp | 6 | ||||
| -rw-r--r-- | src/modules/m_chanfilter.cpp | 8 | ||||
| -rw-r--r-- | src/modules/m_cloaking.cpp | 32 | ||||
| -rw-r--r-- | src/modules/m_codepage.cpp | 30 | ||||
| -rw-r--r-- | src/modules/m_filter.cpp | 8 | ||||
| -rw-r--r-- | src/modules/m_kicknorejoin.cpp | 12 | ||||
| -rw-r--r-- | src/modules/m_repeat.cpp | 17 | ||||
| -rw-r--r-- | src/modules/m_rline.cpp | 6 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/capab.cpp | 3 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/main.cpp | 19 |
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) |
