1
0
mirror of https://github.com/anope/anope.git synced 2026-06-26 11:36:38 +02:00

Improve the error diagnostics when the link fails.

This commit is contained in:
Sadie Powell
2025-08-03 13:15:01 +01:00
parent b2d40d4189
commit cd0f00a819
4 changed files with 26 additions and 8 deletions
+5 -1
View File
@@ -131,11 +131,15 @@ public:
/* The maximum length of a username. */
size_t MaxUser = 0;
/* Retrieves the next free UID or SID */
virtual Anope::string UID_Retrieve();
virtual Anope::string SID_Retrieve();
/** Retrieves advice on what might be the problem when a link fails.
* @param advice The location to store the advice.
*/
virtual void GetLinkAdvice(std::vector<Anope::string> &advice) { }
/** Extracts a timestamp from a string. */
virtual time_t ExtractTimestamp(const Anope::string &str);
+5
View File
@@ -192,6 +192,11 @@ public:
MaxLine = 0;
}
void GetLinkAdvice(std::vector<Anope::string> &advice) override
{
advice.push_back("You do not have the account, hidechans, services, and spanningtree modules loaded on InspIRCd.");
}
size_t GetMaxListFor(Channel *c, ChannelMode *cm) override
{
ListLimits *limits = maxlist.Get(c);
+2 -2
View File
@@ -46,9 +46,9 @@ void Capab::Run(MessageSource &source, const std::vector<Anope::string> &params,
void Error::Run(MessageSource &source, const std::vector<Anope::string> &params, const Anope::map<Anope::string> &tags)
{
Log(LOG_TERMINAL) << "ERROR: " << params[0];
Anope::QuitReason = "Received ERROR from uplink: " + params[0];
Anope::QuitReason = "Received an error from the uplink: " + params.back();
Anope::Quitting = true;
Log(LOG_TERMINAL) << Anope::QuitReason;
}
Ignore::Ignore(Module *creator, const Anope::string &mname)
+14 -5
View File
@@ -114,11 +114,20 @@ UplinkSocket::~UplinkSocket()
if (!error && !Anope::Quitting)
{
this->OnError("");
Module *protocol = ModuleManager::FindFirstOf(PROTOCOL);
if (protocol && !protocol->name.find("inspircd"))
Log(LOG_TERMINAL) << "Check that you have loaded m_spanningtree.so on InspIRCd, and are not connecting Anope to an SSL enabled port without configuring SSL in Anope (or vice versa)";
else
Log(LOG_TERMINAL) << "Check that you are not connecting Anope to an SSL enabled port without configuring SSL in Anope (or vice versa)";
std::vector<Anope::string> advice = {
"You are connecting Anope to an SSL-only port without configuring SSL (or vice versa).",
};
if (IRCD)
{
advice.push_back(Anope::Format("You are using the wrong protocol module (currently %s for %s).",
IRCD->owner->name.c_str(), IRCD->GetProtocolName().c_str()));
IRCD->GetLinkAdvice(advice);
}
Log(LOG_TERMINAL) << "Potential causes include:";
for (const auto &line : advice)
Log(LOG_TERMINAL) << "* " << line;
}
if (IRCD && Servers::GetUplink() && Servers::GetUplink()->IsSynced())