summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2019-05-14 00:30:56 +0100
committerPeter Powell <petpow@saberuk.com>2019-05-14 01:12:13 +0100
commit61b13aa89ecb38a24faadb0bdb085a8bb3c56d22 (patch)
treeea483f85917f13b6db1b4f9ec2e847c78a214576
parentb9e732f73b0cb8e1fde9181a8b5502927feaf339 (diff)
Add an enumeration for known protocol versions.
-rw-r--r--src/modules/m_spanningtree/capab.cpp33
-rw-r--r--src/modules/m_spanningtree/compat.cpp4
-rw-r--r--src/modules/m_spanningtree/main.h32
-rw-r--r--src/modules/m_spanningtree/treesocket2.cpp2
4 files changed, 43 insertions, 28 deletions
diff --git a/src/modules/m_spanningtree/capab.cpp b/src/modules/m_spanningtree/capab.cpp
index ea11a917e..ed94079ae 100644
--- a/src/modules/m_spanningtree/capab.cpp
+++ b/src/modules/m_spanningtree/capab.cpp
@@ -47,11 +47,11 @@ std::string TreeSocket::MyModules(int filter)
Module* const mod = i->second;
// 3.0 advertises its settings for the benefit of services
// 2.0 would bork on this
- if (proto_version < 1205 && i->second->ModuleSourceFile == "m_kicknorejoin.so")
+ if (proto_version < PROTO_INSPIRCD_30 && mod->ModuleSourceFile == "m_kicknorejoin.so")
continue;
bool do_compat_include = false;
- if (proto_version < 1205)
+ if (proto_version < PROTO_INSPIRCD_30)
{
for (size_t j = 0; j < sizeof(compatmods)/sizeof(compatmods[0]); j++)
{
@@ -63,7 +63,7 @@ std::string TreeSocket::MyModules(int filter)
}
}
- Version v = i->second->GetVersion();
+ Version v = mod->GetVersion();
if ((!do_compat_include) && (!(v.Flags & filter)))
continue;
@@ -79,7 +79,7 @@ std::string TreeSocket::MyModules(int filter)
// If we are linked in a 2.0 server and have an ascii casemapping
// advertise it as m_ascii.so from inspircd-extras
- if ((filter & VF_COMMON) && ServerInstance->Config->CaseMapping == "ascii" && proto_version == 1202)
+ if ((filter & VF_COMMON) && ServerInstance->Config->CaseMapping == "ascii" && proto_version == PROTO_INSPIRCD_20)
{
if (!capabilities.empty())
capabilities += "m_ascii.so";
@@ -97,7 +97,7 @@ std::string TreeSocket::BuildModeList(ModeType mtype)
const ModeHandler* const mh = i->second;
const PrefixMode* const pm = mh->IsPrefixMode();
std::string mdesc;
- if (proto_version != 1202)
+ if (proto_version >= PROTO_INSPIRCD_30)
{
if (pm)
mdesc.append("prefix:").append(ConvToStr(pm->GetPrefixRank())).push_back(':');
@@ -128,7 +128,7 @@ void TreeSocket::SendCapabilities(int phase)
return;
if (capab->capab_phase < 1 && phase >= 1)
- WriteLine("CAPAB START " + ConvToStr(ProtocolVersion));
+ WriteLine("CAPAB START " + ConvToStr(PROTO_NEWEST));
capab->capab_phase = phase;
if (phase < 2)
@@ -185,9 +185,9 @@ void TreeSocket::SendCapabilities(int phase)
}
// 2.0 needs these keys.
- if (proto_version == 1202)
+ if (proto_version == PROTO_INSPIRCD_20)
{
- extra.append(" PROTOCOL="+ConvToStr(ProtocolVersion))
+ extra.append(" PROTOCOL="+ConvToStr(proto_version))
.append(" MAXGECOS="+ConvToStr(ServerInstance->Config->Limits.MaxReal))
.append(" CHANMODES="+ServerInstance->Modes->GiveModeList(MODETYPE_CHANNEL))
.append(" USERMODES="+ServerInstance->Modes->GiveModeList(MODETYPE_USER))
@@ -260,16 +260,17 @@ bool TreeSocket::Capab(const CommandBase::Params& params)
if (params.size() > 1)
proto_version = ConvToNum<unsigned int>(params[1]);
- if (proto_version < MinCompatProtocol)
+ if (proto_version < PROTO_OLDEST)
{
- SendError("CAPAB negotiation failed: Server is using protocol version " + (proto_version ? ConvToStr(proto_version) : "1201 or older")
- + " which is too old to link with this server (version " + ConvToStr(ProtocolVersion)
- + (ProtocolVersion != MinCompatProtocol ? ", links with " + ConvToStr(MinCompatProtocol) + " and above)" : ")"));
+ SendError("CAPAB negotiation failed: Server is using protocol version "
+ + (proto_version ? ConvToStr(proto_version) : "1201 or older")
+ + " which is too old to link with this server (protocol versions "
+ + ConvToStr(PROTO_OLDEST) + " to " + ConvToStr(PROTO_NEWEST) + " are supported)");
return false;
}
- // Special case, may be removed in the future
- if (proto_version == 1203 || proto_version == 1204)
+ // We don't support the 2.1 protocol.
+ if (proto_version == PROTO_INSPIRCD_21_A0 || proto_version == PROTO_INSPIRCD_21_B2)
{
SendError("CAPAB negotiation failed: InspIRCd 2.1 beta is not supported");
return false;
@@ -339,7 +340,7 @@ bool TreeSocket::Capab(const CommandBase::Params& params)
}
}
}
- else if (proto_version == 1202)
+ else if (proto_version == PROTO_INSPIRCD_20)
{
if (this->capab->CapKeys.find("CHANMODES") != this->capab->CapKeys.end())
{
@@ -376,7 +377,7 @@ bool TreeSocket::Capab(const CommandBase::Params& params)
}
}
}
- else if (proto_version == 1202 && this->capab->CapKeys.find("USERMODES") != this->capab->CapKeys.end())
+ else if (proto_version == PROTO_INSPIRCD_20 && this->capab->CapKeys.find("USERMODES") != this->capab->CapKeys.end())
{
if (this->capab->CapKeys.find("USERMODES")->second != ServerInstance->Modes->GiveModeList(MODETYPE_USER))
reason = "One or more of the user modes on the remote server are invalid on this server.";
diff --git a/src/modules/m_spanningtree/compat.cpp b/src/modules/m_spanningtree/compat.cpp
index 8d24cfe90..fc9700740 100644
--- a/src/modules/m_spanningtree/compat.cpp
+++ b/src/modules/m_spanningtree/compat.cpp
@@ -35,7 +35,7 @@ void TreeSocket::WriteLine(const std::string& original_line)
{
if (LinkState == CONNECTED)
{
- if (proto_version != ProtocolVersion)
+ if (proto_version != PROTO_NEWEST)
{
std::string line = original_line;
std::string::size_type a = line.find(' ');
@@ -48,7 +48,7 @@ void TreeSocket::WriteLine(const std::string& original_line)
std::string::size_type b = line.find(' ', a + 1);
std::string command(line, a + 1, b-a-1);
// now try to find a translation entry
- if (proto_version < 1205)
+ if (proto_version < PROTO_INSPIRCD_30)
{
if (command == "IJOIN")
{
diff --git a/src/modules/m_spanningtree/main.h b/src/modules/m_spanningtree/main.h
index 5d6fd5d99..1186f072c 100644
--- a/src/modules/m_spanningtree/main.h
+++ b/src/modules/m_spanningtree/main.h
@@ -32,17 +32,31 @@
#include "commands.h"
#include "protocolinterface.h"
-/** If you make a change which breaks the protocol, increment this.
- * If you completely change the protocol, completely change the number.
+/** An enumeration of all known protocol versions.
*
- * IMPORTANT: If you make changes, document your changes here, without fail:
- * https://docs.inspircd.org/developer/spanningtree/
- *
- * Failure to document your protocol changes will result in a painfully
- * painful death by pain. You have been warned.
+ * If you introduce new protocol versions please document them here:
+ * https://docs.inspircd.org/spanningtree/changes
*/
-const unsigned int ProtocolVersion = 1205;
-const unsigned int MinCompatProtocol = 1202;
+enum ProtocolVersion
+{
+ /** The linking protocol version introduced in InspIRCd v2.0. */
+ PROTO_INSPIRCD_20 = 1202,
+
+ /** The linking protocol version introduced in InspIRCd v2.1 alpha 0. */
+ PROTO_INSPIRCD_21_A0 = 1203,
+
+ /** The linking protocol version introduced in InspIRCd v2.1 beta 2. */
+ PROTO_INSPIRCD_21_B2 = 1204,
+
+ /** The linking protocol version introduced in InspIRCd v3.0. */
+ PROTO_INSPIRCD_30 = 1205,
+
+ /** The oldest version of the protocol that we support. */
+ PROTO_OLDEST = PROTO_INSPIRCD_20,
+
+ /** The newest version of the protocol that we support. */
+ PROTO_NEWEST = PROTO_INSPIRCD_30
+};
/** Forward declarations
*/
diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp
index ca2e4ec80..d4acdc0c8 100644
--- a/src/modules/m_spanningtree/treesocket2.cpp
+++ b/src/modules/m_spanningtree/treesocket2.cpp
@@ -333,7 +333,7 @@ void TreeSocket::ProcessConnectedLine(std::string& taglist, std::string& prefix,
}
// Translate commands coming from servers using an older protocol
- if (proto_version < ProtocolVersion)
+ if (proto_version < PROTO_NEWEST)
{
if (!PreProcessOldProtocolMessage(who, command, params))
return;