/*
* InspIRCd -- Internet Relay Chat Daemon
*
+ * Copyright (C) 2019 linuxdaemon <linuxdaemon.irc@gmail.com>
+ * Copyright (C) 2014, 2017-2019 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2014 Daniel Vassdal <shutter@canternet.org>
+ * Copyright (C) 2012-2016 Attila Molnar <attilamolnar@hush.com>
+ * Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
+ * Copyright (C) 2008, 2010 Craig Edwards <brain@inspircd.org>
+ * Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
* Copyright (C) 2008 Robin Burchell <robin+git@viroteck.net>
- * Copyright (C) 2008 Craig Edwards <craigedwards@brainbox.cc>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
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++)
{
}
}
- Version v = i->second->GetVersion();
+ Version v = mod->GetVersion();
if ((!do_compat_include) && (!(v.Flags & filter)))
continue;
- if (i != modlist.begin())
- capabilities.push_back(' ');
+ capabilities.push_back(' ');
capabilities.append(i->first);
if (!v.link_data.empty())
{
// 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 (!capabilities.empty())
- capabilities += "m_ascii.so";
- }
+ if ((filter & VF_COMMON) && ServerInstance->Config->CaseMapping == "ascii" && proto_version == PROTO_INSPIRCD_20)
+ capabilities.append(" m_ascii.so");
+
+ if (capabilities.empty())
+ return capabilities;
- return capabilities;
+ return capabilities.substr(1);
}
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(':');
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)
}
// 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))
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;
}
}
}
- else if (proto_version == 1202)
+ else if (proto_version == PROTO_INSPIRCD_20)
{
if (this->capab->CapKeys.find("CHANMODES") != this->capab->CapKeys.end())
{
}
}
}
- 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.";