Core/Session: proper client timeout detection (#1232)

* Core/Session: proper client timeout detection

- Properly detect client timeout when logged into a character after a configurable time (default 60s) has passed without the client sending any packets.
- Fixes issues with crashed clients leaving characters in the world for a very long time (default 15 minutes), as well as edge case exploits involving intentionally pausing client execution for some amount of time.
This commit is contained in:
Viste(Кирилл)
2019-01-08 09:33:24 +03:00
committed by GitHub
parent 09fa4c515b
commit f852a87f9c
6 changed files with 27 additions and 8 deletions

View File

@@ -355,9 +355,12 @@ class WorldSession
else
m_timeOutTime -= diff;
}
void ResetTimeOutTime()
void ResetTimeOutTime(bool onlyActive)
{
m_timeOutTime = sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME);
if (GetPlayer())
m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME_ACTIVE));
else if (!onlyActive)
m_timeOutTime = int32(sWorld->getIntConfig(CONFIG_SOCKET_TIMEOUTTIME));
}
bool IsConnectionIdle() const
{