summaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/compat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/m_spanningtree/compat.cpp')
-rw-r--r--src/modules/m_spanningtree/compat.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp
index 41cabbc93..0fc837beb 100644
--- a/src/modules/m_spanningtree/compat.cpp
+++ b/src/modules/m_spanningtree/compat.cpp
@@ -93,7 +93,7 @@ void TreeSocket::WriteLine(std::string line)
return;
else if (command == "METADATA")
{
- // Drop TS for channel METADATA
+ // Drop TS for channel METADATA, translate METADATA operquit into an OPERQUIT command
// :sid METADATA #target TS extname ...
// A B C D
if (b == std::string::npos)
@@ -103,15 +103,20 @@ void TreeSocket::WriteLine(std::string line)
if (c == std::string::npos)
return;
+ std::string::size_type d = line.find(' ', c + 1);
+ if (d == std::string::npos)
+ return;
+
if (line[b + 1] == '#')
{
// We're sending channel metadata
- std::string::size_type d = line.find(' ', c + 1);
- if (d == std::string::npos)
- return;
-
line.erase(c, d-c);
}
+ else if (line.substr(c, d-c) == " operquit")
+ {
+ // ":22D METADATA 22DAAAAAX operquit :message" -> ":22DAAAAAX OPERQUIT :message"
+ line = ":" + line.substr(b+1, c-b) + "OPERQUIT" + line.substr(d);
+ }
}
else if (command == "FTOPIC")
{
@@ -246,6 +251,17 @@ bool TreeSocket::PreProcessOldProtocolMessage(User*& who, std::string& cmd, std:
{
cmd = "MODE";
}
+ else if (cmd == "OPERQUIT")
+ {
+ // Translate OPERQUIT into METADATA
+ if (params.empty())
+ return false;
+
+ cmd = "METADATA";
+ params.insert(params.begin(), who->uuid);
+ params.insert(params.begin()+1, "operquit");
+ who = MyRoot->ServerUser;
+ }
return true; // Passthru
}