public static void OnLoginError(IRealmClient client, AccountStatus error, bool silent) { if (!silent) { s_log.Debug("Client {0} failed to login: {1}", client, error); } LoginFailInfo failInfo; if (!failedLogins.TryGetValue(client.ClientAddress, out failInfo)) { failedLogins.Add(client.ClientAddress, failInfo = new LoginFailInfo(DateTime.Now)); } else { failInfo.LastAttempt = DateTime.Now; failInfo.Count++; // TODO: Ban, if trying too often? } // delay the reply ThreadPool.RegisterWaitForSingleObject(failInfo.Handle, (state, timedOut) => { if (client.IsConnected) { var evt = LoginFailed; if (evt != null) { evt(client, error); } SendAuthChallengeFailReply(client, error); } }, null, FailedLoginDelay, true); }
public static void OnLoginError(IRealmClient client, AccountStatus error, bool silent) { if (!silent) { AuthenticationHandler.s_log.Debug("Client {0} failed to login: {1}", (object)client, (object)error); } LoginFailInfo loginFailInfo; if (!AuthenticationHandler.failedLogins.TryGetValue(client.ClientAddress, out loginFailInfo)) { AuthenticationHandler.failedLogins.Add(client.ClientAddress, loginFailInfo = new LoginFailInfo(DateTime.Now)); } else { loginFailInfo.LastAttempt = DateTime.Now; ++loginFailInfo.Count; } ThreadPool.RegisterWaitForSingleObject(loginFailInfo.Handle, (WaitOrTimerCallback)((state, timedOut) => { if (!client.IsConnected) { return; } AuthenticationHandler.LoginFailedHandler loginFailed = AuthenticationHandler.LoginFailed; if (loginFailed != null) { loginFailed(client, error); } AuthenticationHandler.SendAuthChallengeFailReply(client, error); }), (object)null, AuthenticationHandler.FailedLoginDelay, true); }