diff options
| author | oy <Tom_Adams@web.de> | 2013-02-24 19:13:45 +0100 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2013-02-24 19:13:45 +0100 |
| commit | ea2898e94a6d50e326cb68976d9fabbc378a3b9d (patch) | |
| tree | 9df7cd31ad80b3d5b569686f7cad62d30fe74d94 | |
| parent | 313a0949b0c4d077e61051fd773208d889649c37 (diff) | |
| download | zcatch-ea2898e94a6d50e326cb68976d9fabbc378a3b9d.tar.gz zcatch-ea2898e94a6d50e326cb68976d9fabbc378a3b9d.zip | |
prevent quick join/quit flood. #1070
| -rw-r--r-- | src/engine/shared/network.h | 1 | ||||
| -rw-r--r-- | src/engine/shared/network_server.cpp | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/engine/shared/network.h b/src/engine/shared/network.h index fbe4d391..259d600f 100644 --- a/src/engine/shared/network.h +++ b/src/engine/shared/network.h @@ -188,6 +188,7 @@ public: // Needed for GotProblems in NetClient int64 LastRecvTime() const { return m_LastRecvTime; } + int64 ConnectTime() const { return m_LastUpdateTime; } int AckSequence() const { return m_Ack; } }; diff --git a/src/engine/shared/network_server.cpp b/src/engine/shared/network_server.cpp index add51c9b..bdc10935 100644 --- a/src/engine/shared/network_server.cpp +++ b/src/engine/shared/network_server.cpp @@ -69,11 +69,17 @@ int CNetServer::Drop(int ClientID, const char *pReason) int CNetServer::Update() { + int64 Now = time_get(); for(int i = 0; i < MaxClients(); i++) { m_aSlots[i].m_Connection.Update(); if(m_aSlots[i].m_Connection.State() == NET_CONNSTATE_ERROR) - Drop(i, m_aSlots[i].m_Connection.ErrorString()); + { + if(Now - m_aSlots[i].m_Connection.ConnectTime() < time_freq()/2 && NetBan()) + NetBan()->BanAddr(ClientAddr(i), 60, "Stressing network"); + else + Drop(i, m_aSlots[i].m_Connection.ErrorString()); + } } return 0; |