about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2013-02-24 19:13:45 +0100
committeroy <Tom_Adams@web.de>2013-02-24 19:13:45 +0100
commitea2898e94a6d50e326cb68976d9fabbc378a3b9d (patch)
tree9df7cd31ad80b3d5b569686f7cad62d30fe74d94 /src
parent313a0949b0c4d077e61051fd773208d889649c37 (diff)
downloadzcatch-ea2898e94a6d50e326cb68976d9fabbc378a3b9d.tar.gz
zcatch-ea2898e94a6d50e326cb68976d9fabbc378a3b9d.zip
prevent quick join/quit flood. #1070
Diffstat (limited to 'src')
-rw-r--r--src/engine/shared/network.h1
-rw-r--r--src/engine/shared/network_server.cpp8
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;