Don't freak out when a client sends multiple TOSERVER_INIT packets; also log one...
authorPerttu Ahola <celeron55@gmail.com>
Thu, 8 Aug 2013 03:10:45 +0000 (06:10 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Thu, 8 Aug 2013 03:11:43 +0000 (06:11 +0300)
src/server.cpp

index 1fea8afe5ac9bc5fe9ce65cf777ffc7825065673..7926b879fb7815fa9185e57db7192bfd18e38f78 100644 (file)
@@ -1810,7 +1810,15 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
                if(datasize < 2+1+PLAYERNAME_SIZE)
                        return;
 
-               verbosestream<<"Server: Got TOSERVER_INIT from "<<addr_s<<std::endl;
+               // If net_proto_version is set, this client has already been handled
+               if(getClient(peer_id)->net_proto_version != 0){
+                       verbosestream<<"Server: Ignoring multiple TOSERVER_INITs from "
+                                       <<addr_s<<" (peer_id="<<peer_id<<")"<<std::endl;
+                       return;
+               }
+
+               verbosestream<<"Server: Got TOSERVER_INIT from "<<addr_s<<" (peer_id="
+                               <<peer_id<<")"<<std::endl;
 
                // Do not allow multiple players in simple singleplayer mode.
                // This isn't a perfect way to do it, but will suffice for now.
@@ -4651,6 +4659,8 @@ void Server::DenyAccess(u16 peer_id, const std::wstring &reason)
 
        // If there are way too many clients, get rid of denied new ones immediately
        if(m_clients.size() > 2 * g_settings->getU16("max_users")){
+               verbosestream<<"Server: DenyAccess: Too many clients; getting rid of "
+                               <<"peer_id="<<peer_id<<" immediately"<<std::endl;
                // Delete peer to stop sending it data
                m_con.DeletePeer(peer_id);
                // Delete client also to stop block sends and other stuff