1
0
mirror of https://github.com/anope/anope.git synced 2026-07-05 16:43:12 +02:00

Deduplicate InspIRCd CAPAB parsing.

This commit is contained in:
Sadie Powell
2024-02-26 19:26:21 +00:00
parent d3b4a4bd05
commit 2fd4b45f81
+25 -26
View File
@@ -923,6 +923,19 @@ struct IRCDMessageCapab final
Anope::string type;
};
static std::pair<Anope::string, size_t> ParseCapability(const Anope::string &token)
{
auto sep = token.find(':');
if (sep == Anope::string::npos)
return { token, 0 };
auto value = token.substr(sep);
if (!value.is_pos_number_only())
return { token, 0 };
return { token.substr(0, sep), convertTo<size_t>(value) };
}
static bool ParseMode(const Anope::string &token, ModeInfo &mode)
{
// list:ban=b param-set:limit=l param:key=k prefix:30000:op=@o simple:noextmsg=n
@@ -1258,33 +1271,19 @@ struct IRCDMessageCapab final
Anope::string capab;
while (ssep.GetToken(capab))
{
if (capab == "GLOBOPS=1")
auto [tokname, tokvalue] = ParseCapability(capab);
if (tokname == "CHANMAX")
maxchannel = tokvalue;
else if (tokname == "GLOBOPS" && tokvalue)
Servers::Capab.insert("GLOBOPS");
else if (capab.find("CHANMAX=") != Anope::string::npos)
{
Anope::string value(capab.begin() + 8, capab.end());
maxchannel = value.is_pos_number_only() ? convertTo<unsigned>(value) : 0;
}
else if (capab.find("IDENTMAX=") != Anope::string::npos)
{
Anope::string value(capab.begin() + 9, capab.end());
maxuser = value.is_pos_number_only() ? convertTo<unsigned>(value) : 0;
}
else if (capab.find("MAXMODES=") != Anope::string::npos)
{
Anope::string value(capab.begin() + 9, capab.end());
IRCD->MaxModes = value.is_pos_number_only() ? convertTo<unsigned>(value) : 3;
}
else if (capab.find("MAXHOST=") != Anope::string::npos)
{
Anope::string value(capab.begin() + 8, capab.end());
maxhost = value.is_pos_number_only() ? convertTo<unsigned>(value) : 0;
}
else if (capab.find("NICKMAX=") != Anope::string::npos)
{
Anope::string value(capab.begin() + 8, capab.end());
maxnick = value.is_pos_number_only() ? convertTo<unsigned>(value) : 0;
}
else if (tokname == "IDENTMAX")
maxuser = tokvalue;
else if (tokname == "MAXMODES")
IRCD->MaxModes = tokvalue;
else if (tokname == "MAXHOST")
maxhost = tokvalue;
else if (tokname == "MAXNICK")
maxnick = tokvalue;
}
}
else if (params[0].equals_cs("END"))