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.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp
index a9e48a10c..02e11c849 100644
--- a/src/modules/m_spanningtree/compat.cpp
+++ b/src/modules/m_spanningtree/compat.cpp
@@ -123,8 +123,10 @@ void TreeSocket::WriteLine(const std::string& original_line)
else if (command == "FTOPIC")
{
// Drop channel TS for FTOPIC
- // :sid FTOPIC #target TS TopicTS ...
- // A B C D
+ // :sid FTOPIC #target TS TopicTS setter :newtopic
+ // A B C D E F
+ // :uid FTOPIC #target TS TopicTS :newtopic
+ // A B C D E
if (b == std::string::npos)
return;
@@ -136,7 +138,14 @@ void TreeSocket::WriteLine(const std::string& original_line)
if (d == std::string::npos)
return;
- line.erase(c, d-c);
+ std::string::size_type e = line.find(' ', d + 1);
+ if (line[e+1] == ':')
+ {
+ line.erase(c, e-c);
+ line.erase(a+1, 1);
+ }
+ else
+ line.erase(c, d-c);
}
else if ((command == "PING") || (command == "PONG"))
{
@@ -268,6 +277,15 @@ bool TreeSocket::PreProcessOldProtocolMessage(User*& who, std::string& cmd, std:
params.insert(params.begin()+1, "operquit");
who = MyRoot->ServerUser;
}
+ else if ((cmd == "TOPIC") && (params.size() >= 2))
+ {
+ // :20DAAAAAC TOPIC #chan :new topic
+ cmd = "FTOPIC";
+ if (!InsertCurrentChannelTS(params))
+ return false;
+
+ params.insert(params.begin()+2, ConvToStr(ServerInstance->Time()));
+ }
return true; // Passthru
}