From e6687be4933e5115d31ade014300648051af5047 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 4 Aug 2013 08:17:07 +0300 Subject: Fix server getting completely choked up on even a little of DoS * If client count is unbearable, immediately delete denied clients * Re-prioritize the checking order of things about incoming clients * Remove a huge CPU-wasting exception in ReliablePacketBuffer --- src/server.h | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/server.h') diff --git a/src/server.h b/src/server.h index 4d8d0ca67..d49ecdf7b 100644 --- a/src/server.h +++ b/src/server.h @@ -250,6 +250,8 @@ public: bool definitions_sent; + bool denied; + RemoteClient(): m_time_from_building(9999), m_excess_gotblocks(0) @@ -259,6 +261,7 @@ public: net_proto_version = 0; pending_serialization_version = SER_FMT_VER_INVALID; definitions_sent = false; + denied = false; m_nearest_unsent_d = 0; m_nearest_unsent_reset_timer = 0.0; m_nothing_to_send_counter = 0; @@ -589,7 +592,7 @@ private: void SendHUDChange(u16 peer_id, u32 id, HudElementStat stat, void *value); void SendHUDSetFlags(u16 peer_id, u32 flags, u32 mask); void SendHUDSetParam(u16 peer_id, u16 param, const std::string &value); - + /* Send a node removal/addition event to all clients except ignore_id. Additionally, if far_players!=NULL, players further away than @@ -658,11 +661,20 @@ private: void DiePlayer(u16 peer_id); void RespawnPlayer(u16 peer_id); + void DenyAccess(u16 peer_id, const std::wstring &reason); + + enum ClientDeletionReason { + CDR_LEAVE, + CDR_TIMEOUT, + CDR_DENY + }; + void DeleteClient(u16 peer_id, ClientDeletionReason reason); void UpdateCrafting(u16 peer_id); // When called, connection mutex should be locked RemoteClient* getClient(u16 peer_id); + RemoteClient* getClientNoEx(u16 peer_id); // When called, environment mutex should be locked std::string getPlayerName(u16 peer_id) @@ -737,7 +749,7 @@ private: std::map m_clients; u16 m_clients_number; //for announcing masterserver - // Bann checking + // Ban checking BanManager m_banmanager; // Rollback manager (behind m_env_mutex) -- cgit v1.2.3