From 7c02b4d264773fce9f9825fca9104188eb15ea3c Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 23 May 2021 15:01:30 +0100 Subject: [PATCH] Add Connection.EndPoint property. --- OpenRA.Game/Server/Connection.cs | 3 ++ OpenRA.Game/Server/Server.cs | 45 +++++++++---------- .../ServerTraits/LobbyCommands.cs | 4 +- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/OpenRA.Game/Server/Connection.cs b/OpenRA.Game/Server/Connection.cs index c3971cc850..4f43cd3557 100644 --- a/OpenRA.Game/Server/Connection.cs +++ b/OpenRA.Game/Server/Connection.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Net.Sockets; namespace OpenRA.Server @@ -130,6 +131,8 @@ namespace OpenRA.Server } } } + + public EndPoint EndPoint => Socket.RemoteEndPoint; } public enum ReceiveState { Header, Data } diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 80aa2a83ba..427b5f47cb 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -421,8 +421,7 @@ namespace OpenRA.Server { if (State == ServerState.GameStarted) { - Log.Write("server", "Rejected connection from {0}; game is already started.", - newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; game is already started.", newConn.EndPoint); SendOrderTo(newConn, "ServerError", "The game has already started"); DropClient(newConn); @@ -439,7 +438,7 @@ namespace OpenRA.Server return; } - var ipAddress = ((IPEndPoint)newConn.Socket.RemoteEndPoint).Address; + var ipAddress = ((IPEndPoint)newConn.EndPoint).Address; var client = new Session.Client { Name = OpenRA.Settings.SanitizedPlayerName(handshake.Client.Name), @@ -459,7 +458,7 @@ namespace OpenRA.Server if (ModData.Manifest.Id != handshake.Mod) { Log.Write("server", "Rejected connection from {0}; mods do not match.", - newConn.Socket.RemoteEndPoint); + newConn.EndPoint); SendOrderTo(newConn, "ServerError", "Server is running an incompatible mod"); DropClient(newConn); @@ -468,8 +467,7 @@ namespace OpenRA.Server if (ModData.Manifest.Metadata.Version != handshake.Version) { - Log.Write("server", "Rejected connection from {0}; Not running the same version.", - newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; Not running the same version.", newConn.EndPoint); SendOrderTo(newConn, "ServerError", "Server is running an incompatible version"); DropClient(newConn); @@ -479,7 +477,7 @@ namespace OpenRA.Server if (handshake.OrdersProtocol != ProtocolVersion.Orders) { Log.Write("server", "Rejected connection from {0}; incompatible Orders protocol version {1}.", - newConn.Socket.RemoteEndPoint, handshake.OrdersProtocol); + newConn.EndPoint, handshake.OrdersProtocol); SendOrderTo(newConn, "ServerError", "Server is running an incompatible protocol"); DropClient(newConn); @@ -490,7 +488,7 @@ namespace OpenRA.Server var bans = Settings.Ban.Union(TempBans); if (bans.Contains(client.IPAddress)) { - Log.Write("server", "Rejected connection from {0}; Banned.", newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; Banned.", newConn.EndPoint); SendOrderTo(newConn, "ServerError", $"You have been {(Settings.Ban.Contains(client.IPAddress) ? "banned" : "temporarily banned")} from the server"); DropClient(newConn); return; @@ -524,20 +522,17 @@ namespace OpenRA.Server var clientPing = new Session.ClientPing { Index = client.Index }; LobbyInfo.ClientPings.Add(clientPing); - Log.Write("server", "Client {0}: Accepted connection from {1}.", - newConn.PlayerIndex, newConn.Socket.RemoteEndPoint); + Log.Write("server", "Client {0}: Accepted connection from {1}.", newConn.PlayerIndex, newConn.EndPoint); if (client.Fingerprint != null) - Log.Write("server", "Client {0}: Player fingerprint is {1}.", - newConn.PlayerIndex, client.Fingerprint); + Log.Write("server", "Client {0}: Player fingerprint is {1}.", newConn.PlayerIndex, client.Fingerprint); foreach (var t in serverTraits.WithInterface()) t.ClientJoined(this, newConn); SyncLobbyInfo(); - Log.Write("server", "{0} ({1}) has joined the game.", - client.Name, newConn.Socket.RemoteEndPoint); + Log.Write("server", "{0} ({1}) has joined the game.", client.Name, newConn.EndPoint); // Report to all other players SendMessage($"{client.Name} has joined the game.", newConn); @@ -595,29 +590,29 @@ namespace OpenRA.Server if (!profile.KeyRevoked && CryptoUtil.VerifySignature(parameters, newConn.AuthToken, handshake.AuthSignature)) { client.Fingerprint = handshake.Fingerprint; - Log.Write("server", "{0} authenticated as {1} (UID {2})", newConn.Socket.RemoteEndPoint, + Log.Write("server", "{0} authenticated as {1} (UID {2})", newConn.EndPoint, profile.ProfileName, profile.ProfileID); } else if (profile.KeyRevoked) { profile = null; - Log.Write("server", "{0} failed to authenticate as {1} (key revoked)", newConn.Socket.RemoteEndPoint, handshake.Fingerprint); + Log.Write("server", "{0} failed to authenticate as {1} (key revoked)", newConn.EndPoint, handshake.Fingerprint); } else { profile = null; Log.Write("server", "{0} failed to authenticate as {1} (signature verification failed)", - newConn.Socket.RemoteEndPoint, handshake.Fingerprint); + newConn.EndPoint, handshake.Fingerprint); } } else Log.Write("server", "{0} failed to authenticate as {1} (invalid server response: `{2}` is not `Player`)", - newConn.Socket.RemoteEndPoint, handshake.Fingerprint, yaml.Key); + newConn.EndPoint, handshake.Fingerprint, yaml.Key); } catch (Exception ex) { Log.Write("server", "{0} failed to authenticate as {1} (exception occurred)", - newConn.Socket.RemoteEndPoint, handshake.Fingerprint); + newConn.EndPoint, handshake.Fingerprint); Log.Write("server", ex.ToString()); } @@ -630,16 +625,16 @@ namespace OpenRA.Server if (notAuthenticated) { - Log.Write("server", "Rejected connection from {0}; Not authenticated.", newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; Not authenticated.", newConn.EndPoint); SendOrderTo(newConn, "ServerError", "Server requires players to have an OpenRA forum account"); DropClient(newConn); } else if (blacklisted || notWhitelisted) { if (blacklisted) - Log.Write("server", "Rejected connection from {0}; In server blacklist.", newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; In server blacklist.", newConn.EndPoint); else - Log.Write("server", "Rejected connection from {0}; Not in server whitelist.", newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; Not in server whitelist.", newConn.EndPoint); SendOrderTo(newConn, "ServerError", "You do not have permission to join this server"); DropClient(newConn); @@ -655,7 +650,7 @@ namespace OpenRA.Server { if (Type == ServerType.Dedicated && (Settings.RequireAuthentication || Settings.ProfileIDWhitelist.Any())) { - Log.Write("server", "Rejected connection from {0}; Not authenticated.", newConn.Socket.RemoteEndPoint); + Log.Write("server", "Rejected connection from {0}; Not authenticated.", newConn.EndPoint); SendOrderTo(newConn, "ServerError", "Server requires players to have an OpenRA forum account"); DropClient(newConn); } @@ -665,7 +660,7 @@ namespace OpenRA.Server } catch (Exception ex) { - Log.Write("server", "Dropping connection {0} because an error occurred:", newConn.Socket.RemoteEndPoint); + Log.Write("server", "Dropping connection {0} because an error occurred:", newConn.EndPoint); Log.Write("server", ex.ToString()); DropClient(newConn); } @@ -873,7 +868,7 @@ namespace OpenRA.Server else { Log.Write("server", "Rejected connection from {0}; Order `{1}` is not a `HandshakeResponse`.", - conn.Socket.RemoteEndPoint, o.OrderString); + conn.EndPoint, o.OrderString); DropClient(conn); } diff --git a/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs index f2bd8a397a..af9caf8675 100644 --- a/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.Common/ServerTraits/LobbyCommands.cs @@ -144,7 +144,7 @@ namespace OpenRA.Mods.Common.Server } client.State = state; - Log.Write("server", "Player @{0} is {1}", conn.Socket.RemoteEndPoint, client.State); + Log.Write("server", "Player @{0} is {1}", conn.EndPoint, client.State); server.SyncLobbyClients(); CheckAutoStart(server); @@ -759,7 +759,7 @@ namespace OpenRA.Mods.Common.Server if (sanitizedName == client.Name) return true; - Log.Write("server", "Player@{0} is now known as {1}.", conn.Socket.RemoteEndPoint, sanitizedName); + Log.Write("server", "Player@{0} is now known as {1}.", conn.EndPoint, sanitizedName); server.SendMessage($"{client.Name} is now known as {sanitizedName}."); client.Name = sanitizedName; server.SyncLobbyClients();