aboutsummaryrefslogtreecommitdiffstats
path: root/src/usermanager.cpp
diff options
context:
space:
mode:
authorGravatar Peter Powell2019-07-21 13:44:32 +0100
committerGravatar Peter Powell2019-07-21 13:50:01 +0100
commit850b7a3ace862101a944a9332d72b6bd597c17cc (patch)
treea5b5e204de40f29942795cdffaec18037ccf16f1 /src/usermanager.cpp
parentAdd an event for adding tags to S2S messages. (diff)
Allow modules to prevent a failed connection from being closed.
Diffstat (limited to 'src/usermanager.cpp')
-rw-r--r--src/usermanager.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/usermanager.cpp b/src/usermanager.cpp
index 6acd25ac5..4f65994aa 100644
--- a/src/usermanager.cpp
+++ b/src/usermanager.cpp
@@ -58,6 +58,16 @@ namespace
// This user didn't answer the last ping, remove them.
if (!user->lastping)
{
+ ModResult res;
+ FIRST_MOD_RESULT(OnConnectionFail, res, (user, I_ERR_TIMEOUT));
+ if (res == MOD_RES_ALLOW)
+ {
+ // A module is preventing this user from being timed out.
+ user->lastping = 1;
+ user->nextping = ServerInstance->Time() + user->MyClass->GetPingTime();
+ return;
+ }
+
time_t secs = ServerInstance->Time() - (user->nextping - user->MyClass->GetPingTime());
const std::string message = "Ping timeout: " + ConvToStr(secs) + (secs != 1 ? " seconds" : " second");
ServerInstance->Users.QuitUser(user, message);