aboutsummaryrefslogtreecommitdiffstats
path: root/modules/spanningtree/capab.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2026-02-26 22:57:18 +0000
committerGravatar Sadie Powell2026-02-26 22:57:18 +0000
commite00f2a976debc62e7dec4a1dc42410b964c75ee9 (patch)
tree59ae2da5e670fac96775ae65bc2250510fb5994f /modules/spanningtree/capab.cpp
parentRemove the c_ prefix from the c_registered mode. (diff)
downloadinspircd++-e00f2a976debc62e7dec4a1dc42410b964c75ee9.tar.gz
inspircd++-e00f2a976debc62e7dec4a1dc42410b964c75ee9.tar.bz2
inspircd++-e00f2a976debc62e7dec4a1dc42410b964c75ee9.zip
Fix link compatibility with v4 after the sacommand merge.
Diffstat (limited to 'modules/spanningtree/capab.cpp')
-rw-r--r--modules/spanningtree/capab.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/modules/spanningtree/capab.cpp b/modules/spanningtree/capab.cpp
index 8bb7448b5..61f1f0e61 100644
--- a/modules/spanningtree/capab.cpp
+++ b/modules/spanningtree/capab.cpp
@@ -40,7 +40,7 @@ namespace
typedef std::map<std::string, std::pair<std::optional<std::string>, std::optional<std::string>>, irc::insensitive_swo> TokenDiff;
// Builds a list of the local modules with the specified property.
- CapabData::ModuleMap BuildModuleList(ModuleFlags property)
+ CapabData::ModuleMap BuildModuleList(ModuleFlags property, uint16_t protocol)
{
CapabData::ModuleMap modules;
for (const auto& [name, module] : ServerInstance->Modules.GetModules())
@@ -53,6 +53,19 @@ namespace
auto endpos = name.length() - strlen(DLL_EXTENSION);
auto modname = name.substr(startpos, endpos - startpos);
+
+ if (protocol < PROTO_NEWEST)
+ {
+ // BEGIN COMPATIBILITY CODE
+ if (irc::equals(modname, "sacommands"))
+ {
+ // These modules were combined in v5.
+ modules["sajoin"] = modules["sakick"] = modules["sanick"] =
+ modules["sapart"] = modules["saquit"];
+ continue;
+ }
+ // END COMPATIBILITY CODE.
+ }
modules[modname] = SpanningTreeUtilities::BuildLinkString(module);
}
return modules;
@@ -221,10 +234,10 @@ namespace
}
// Generates a module list in the format "m_foo.so=bar m_bar.so=baz".
- std::string FormatModules(ModuleFlags property)
+ std::string FormatModules(ModuleFlags property, uint16_t protocol)
{
std::ostringstream modules;
- CapabData::ModuleMap mymodules = BuildModuleList(property);
+ CapabData::ModuleMap mymodules = BuildModuleList(property, protocol);
for (const auto& [module, linkdata] : mymodules)
{
modules << module;
@@ -352,8 +365,8 @@ void TreeSocket::SendCapabilities(int phase)
return;
WriteLine("CAPAB CAPABILITIES :" + FormatCapabilities(this));
- WriteLine("CAPAB MODULES :" + FormatModules(VF_COMMON));
- WriteLine("CAPAB MODSUPPORT :" + FormatModules(VF_OPTCOMMON));
+ WriteLine("CAPAB MODULES :" + FormatModules(VF_COMMON, proto_version));
+ WriteLine("CAPAB MODSUPPORT :" + FormatModules(VF_OPTCOMMON, proto_version));
WriteLine("CAPAB CHANMODES :" + BuildModeList(MODETYPE_CHANNEL));
WriteLine("CAPAB USERMODES :" + BuildModeList(MODETYPE_USER));