File diff r25826:89dc24729f74 → r25827:5a9ded1a0c1a
src/network/core/tcp_listen.h
Show inline comments
 
@@ -30,6 +30,42 @@ class TCPListenHandler {
 
	static SocketList sockets;
 

	
 
public:
 
	static bool ValidateClient(SOCKET s, NetworkAddress &address)
 
	{
 
		/* Check if the client is banned. */
 
		for (const auto &entry : _network_ban_list) {
 
			if (address.IsInNetmask(entry)) {
 
				Packet p(Tban_packet);
 
				p.PrepareToSend();
 

	
 
				Debug(net, 2, "[{}] Banned ip tried to join ({}), refused", Tsocket::GetName(), entry);
 

	
 
				if (p.TransferOut<int>(send, s, 0) < 0) {
 
					Debug(net, 0, "[{}] send failed: {}", Tsocket::GetName(), NetworkError::GetLast().AsString());
 
				}
 
				closesocket(s);
 
				return false;
 
			}
 
		}
 

	
 
		/* Can we handle a new client? */
 
		if (!Tsocket::AllowConnection()) {
 
			/* No more clients allowed?
 
			 * Send to the client that we are full! */
 
			Packet p(Tfull_packet);
 
			p.PrepareToSend();
 

	
 
			if (p.TransferOut<int>(send, s, 0) < 0) {
 
				Debug(net, 0, "[{}] send failed: {}", Tsocket::GetName(), NetworkError::GetLast().AsString());
 
			}
 
			closesocket(s);
 

	
 
			return false;
 
		}
 

	
 
		return true;
 
	}
 

	
 
	/**
 
	 * Accepts clients from the sockets.
 
	 * @param ls Socket to accept clients from.
 
@@ -53,41 +89,7 @@ public:
 

	
 
			SetNoDelay(s); // XXX error handling?
 

	
 
			/* Check if the client is banned */
 
			bool banned = false;
 
			for (const auto &entry : _network_ban_list) {
 
				banned = address.IsInNetmask(entry);
 
				if (banned) {
 
					Packet p(Tban_packet);
 
					p.PrepareToSend();
 

	
 
					Debug(net, 2, "[{}] Banned ip tried to join ({}), refused", Tsocket::GetName(), entry);
 

	
 
					if (p.TransferOut<int>(send, s, 0) < 0) {
 
						Debug(net, 0, "[{}] send failed: {}", Tsocket::GetName(), NetworkError::GetLast().AsString());
 
					}
 
					closesocket(s);
 
					break;
 
				}
 
			}
 
			/* If this client is banned, continue with next client */
 
			if (banned) continue;
 

	
 
			/* Can we handle a new client? */
 
			if (!Tsocket::AllowConnection()) {
 
				/* no more clients allowed?
 
				 * Send to the client that we are full! */
 
				Packet p(Tfull_packet);
 
				p.PrepareToSend();
 

	
 
				if (p.TransferOut<int>(send, s, 0) < 0) {
 
					Debug(net, 0, "[{}] send failed: {}", Tsocket::GetName(), NetworkError::GetLast().AsString());
 
				}
 
				closesocket(s);
 

	
 
				continue;
 
			}
 

	
 
			if (!Tsocket::ValidateClient(s, address)) continue;
 
			Tsocket::AcceptConnection(s, address);
 
		}
 
	}