diff --git a/OpenRA.Game/GameRules/Settings.cs b/OpenRA.Game/GameRules/Settings.cs index 1c1bf93213..49fa8918f4 100644 --- a/OpenRA.Game/GameRules/Settings.cs +++ b/OpenRA.Game/GameRules/Settings.cs @@ -31,6 +31,7 @@ namespace OpenRA.GameRules public string MasterServer = "http://master.open-ra.org/"; public bool AllowCheats = false; public string Map = null; + public string[] Ban = null; public ServerSettings() { } @@ -43,6 +44,7 @@ namespace OpenRA.GameRules MasterServer = other.MasterServer; AllowCheats = other.AllowCheats; Map = other.Map; + Ban = other.Ban; } } diff --git a/OpenRA.Game/Network/Session.cs b/OpenRA.Game/Network/Session.cs index 38447a5a51..686bed1306 100644 --- a/OpenRA.Game/Network/Session.cs +++ b/OpenRA.Game/Network/Session.cs @@ -70,6 +70,7 @@ namespace OpenRA.Network { public string ServerName; public string Map; + public string[] Ban; public string[] Mods = { "ra" }; // mod names public int OrderLatency = 3; public int RandomSeed = 0; diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index e50101bb5b..cae7be0f56 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -71,6 +71,7 @@ namespace OpenRA.Server lobbyInfo.GlobalSettings.RandomSeed = randomSeed; lobbyInfo.GlobalSettings.Map = settings.Map; lobbyInfo.GlobalSettings.ServerName = settings.Name; + lobbyInfo.GlobalSettings.Ban = settings.Ban; foreach (var t in ServerTraits.WithInterface()) t.ServerStarted(this); @@ -205,6 +206,21 @@ namespace OpenRA.Server return; } + // Check if IP is banned + if (lobbyInfo.GlobalSettings.Ban != null) + { + var remote_addr = ((IPEndPoint)newConn.socket.RemoteEndPoint).Address.ToString(); + if (lobbyInfo.GlobalSettings.Ban.Contains(remote_addr)) + { + Console.WriteLine("Rejected connection from "+client.Name+"("+newConn.socket.RemoteEndPoint+"); Banned."); + Log.Write("server", "Rejected connection from {0}; Banned.", + newConn.socket.RemoteEndPoint); + SendOrderTo(newConn, "ServerError", "You are banned from the server!"); + DropClient(newConn); + return; + } + } + // Promote connection to a valid client preConns.Remove(newConn); conns.Add(newConn); @@ -406,6 +422,9 @@ namespace OpenRA.Server public void StartGame() { GameStarted = true; + listener.Stop(); + Console.WriteLine("Game started"); + foreach( var c in conns ) foreach( var d in conns ) DispatchOrdersToClient( c, d.PlayerIndex, 0x7FFFFFFF, new byte[] { 0xBF } );