diff options
| author | 2026-06-24 13:41:06 +0100 | |
|---|---|---|
| committer | 2026-06-24 21:22:25 +0100 | |
| commit | d1695ff82dd85eecaeb56bd47cc4c2333e1abcf3 (patch) | |
| tree | b0c93c1a2cbe4140719ce383525dba034d57f303 /modules | |
| parent | Deduplicate mismatch error messages. (diff) | |
Parse module link data when we receive it.
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/spanningtree/capab.cpp | 19 | ||||
| -rw-r--r-- | modules/spanningtree/main.cpp | 7 | ||||
| -rw-r--r-- | modules/spanningtree/treesocket.h | 2 | ||||
| -rw-r--r-- | modules/spanningtree/utils.cpp | 8 | ||||
| -rw-r--r-- | modules/spanningtree/utils.h | 3 |
5 files changed, 15 insertions, 24 deletions
diff --git a/modules/spanningtree/capab.cpp b/modules/spanningtree/capab.cpp index 161565843..86be748ac 100644 --- a/modules/spanningtree/capab.cpp +++ b/modules/spanningtree/capab.cpp @@ -123,7 +123,7 @@ namespace } // END COMPATIBILITY CODE. } - modules[modname] = SpanningTreeUtilities::BuildLinkString(module); + module->GetLinkData(modules[modname]); } return modules; } @@ -208,7 +208,7 @@ namespace std::ostringstream diffconfig; std::ostringstream localmissing; std::ostringstream remotemissing; - for (const auto& [name, linkdata] : *remote) + for (const auto& [name, otherdata] : *remote) { auto moditer = local.find(name); if (moditer == local.end()) @@ -220,7 +220,6 @@ namespace } // Parse and compare the link data. - Module::LinkData otherdata = Percent::DecodeQuery(linkdata); if (!CompareModuleData(moditer->second, otherdata, diffconfig)) okay = false; local.erase(moditer); @@ -262,12 +261,11 @@ namespace std::string FormatModules(ModuleFlags property, uint16_t protocol) { std::ostringstream modules; - CapabData::ModuleMap mymodules = BuildModuleList(property, protocol); - for (const auto& [module, linkdata] : mymodules) + for (const auto& [module, linkdata] : BuildModuleList(property, protocol)) { modules << module; if (!linkdata.empty()) - modules << '=' << linkdata; + modules << '=' << Percent::EncodeQuery(linkdata); modules << ' '; } return modules.str(); @@ -339,11 +337,14 @@ namespace StringSplitter modstream(modlist); for (std::string mod; modstream.GetToken(mod); ) { - size_t split = mod.find('='); + const auto split = mod.find('='); if (split == std::string::npos) - map.emplace(mod, ""); + map.emplace(mod, Module::LinkData()); // No link data. else - map.emplace(mod.substr(0, split), mod.substr(split + 1)); + { + const auto linkdata = Percent::DecodeQuery(mod.substr(split + 1)); + map.emplace(mod.substr(0, split), linkdata); + } } } } diff --git a/modules/spanningtree/main.cpp b/modules/spanningtree/main.cpp index 6a3bf5495..bb940fad4 100644 --- a/modules/spanningtree/main.cpp +++ b/modules/spanningtree/main.cpp @@ -731,9 +731,10 @@ namespace if (loading) { - const std::string linkstring = SpanningTreeUtilities::BuildLinkString(mod); - if (!linkstring.empty()) - buffer << '=' << linkstring; + Module::LinkData data; + mod->GetLinkData(data); + if (!data.empty()) + buffer << '=' << Percent::EncodeQuery(data); } CommandMetadata::Builder("modules", buffer.str()).Broadcast(); diff --git a/modules/spanningtree/treesocket.h b/modules/spanningtree/treesocket.h index 2eb0791ff..5f43c0068 100644 --- a/modules/spanningtree/treesocket.h +++ b/modules/spanningtree/treesocket.h @@ -93,7 +93,7 @@ struct CapabData final using CapabilityMap = insp::casemapped_map<std::string>; // A map of module names to their link data. - using ModuleMap = insp::casemapped_map<std::string>; + using ModuleMap = insp::casemapped_map<Module::LinkData>; // The capabilities (settings) configured by the remote server. CapabilityMap capabilities; diff --git a/modules/spanningtree/utils.cpp b/modules/spanningtree/utils.cpp index 5feae89c6..449a33d35 100644 --- a/modules/spanningtree/utils.cpp +++ b/modules/spanningtree/utils.cpp @@ -382,14 +382,6 @@ void SpanningTreeUtilities::SendChannelMessage(const User* source, const Channel } } -std::string SpanningTreeUtilities::BuildLinkString(const ModulePtr& mod) -{ - Module::LinkData data; - mod->GetLinkData(data); - - return Percent::EncodeQuery(data); -} - void SpanningTreeUtilities::SendListLimits(Channel* chan, TreeSocket* sock) { std::stringstream buffer; diff --git a/modules/spanningtree/utils.h b/modules/spanningtree/utils.h index bc9a26fe8..3ea58957f 100644 --- a/modules/spanningtree/utils.h +++ b/modules/spanningtree/utils.h @@ -170,9 +170,6 @@ public: */ void SendChannelMessage(const User* source, const Channel* target, const std::string& text, char status, const ClientProtocol::TagMap& tags, const User::List& exempt_list, const char* message_type, const TreeSocket* omit = nullptr) const; - // Builds link data to be sent to another server. - static std::string BuildLinkString(const ModulePtr& mod); - /** Send the channel list mode limits to either the specified server or all servers if nullptr. */ static void SendListLimits(Channel* chan, TreeSocket* sock = nullptr); }; |
