aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_spanningtree/compat.cpp
diff options
context:
space:
mode:
authorGravatar attilamolnar2013-04-13 17:41:22 +0200
committerGravatar attilamolnar2013-04-13 17:41:22 +0200
commit2f17664ea13fe8f0983080d69886a46b58e5e266 (patch)
tree5b563e7d6b2b796aefbb028ed6af7c2df1f28391 /src/modules/m_spanningtree/compat.cpp
parentm_spanningtree Ignore hopcount in incoming SERVER command, always send 0 at b... (diff)
downloadinspircd++-2f17664ea13fe8f0983080d69886a46b58e5e266.tar.gz
inspircd++-2f17664ea13fe8f0983080d69886a46b58e5e266.tar.bz2
inspircd++-2f17664ea13fe8f0983080d69886a46b58e5e266.zip
m_spanningtree Remove redundant first parameter of PING/PONG
Diffstat (limited to 'src/modules/m_spanningtree/compat.cpp')
-rw-r--r--src/modules/m_spanningtree/compat.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp
index 30b7ba8bb..433da9847 100644
--- a/src/modules/m_spanningtree/compat.cpp
+++ b/src/modules/m_spanningtree/compat.cpp
@@ -20,6 +20,7 @@
#include "inspircd.h"
#include "main.h"
#include "treesocket.h"
+#include "treeserver.h"
static std::string newline("\n");
@@ -130,6 +131,15 @@ void TreeSocket::WriteLine(std::string line)
line.erase(c, d-c);
}
+ else if ((command == "PING") || (command == "PONG"))
+ {
+ // :22D PING 20D
+ if (line.length() < 13)
+ return;
+
+ // Insert the source SID (and a space) between the command and the first parameter
+ line.insert(10, line.substr(1, 4));
+ }
}
}
}
@@ -165,6 +175,37 @@ bool TreeSocket::PreProcessOldProtocolMessage(User*& who, std::string& cmd, std:
// :20D FTOPIC #channel 100 Attila :topic text
return InsertCurrentChannelTS(params);
}
+ else if ((cmd == "PING") || (cmd == "PONG"))
+ {
+ if (params.size() == 1)
+ {
+ // If it's a PING with 1 parameter, reply with a PONG now, if it's a PONG with 1 parameter (weird), do nothing
+ if (cmd[1] == 'I')
+ this->WriteData(":" + ServerInstance->Config->GetSID() + " PONG " + params[0] + newline);
+
+ // Don't process this message further
+ return false;
+ }
+
+ // :20D PING 20D 22D
+ // :20D PONG 20D 22D
+ // Drop the first parameter
+ params.erase(params.begin());
+
+ // If the target is a server name, translate it to a SID
+ if (!InspIRCd::IsSID(params[0]))
+ {
+ TreeServer* server = Utils->FindServer(params[0]);
+ if (!server)
+ {
+ // We've no idea what this is, log and stop processing
+ ServerInstance->Logs->Log("m_spanningtree", LOG_DEFAULT, "Received a " + cmd + " with an unknown target: \"" + params[0] + "\", command dropped");
+ return false;
+ }
+
+ params[0] = server->GetID();
+ }
+ }
return true; // Passthru
}