Add Connection.EndPoint property.

This commit is contained in:
Paul Chote
2021-05-23 15:01:30 +01:00
committed by reaperrr
parent 7e79e69eae
commit 7c02b4d264
3 changed files with 25 additions and 27 deletions

View File

@@ -12,6 +12,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
namespace OpenRA.Server namespace OpenRA.Server
@@ -130,6 +131,8 @@ namespace OpenRA.Server
} }
} }
} }
public EndPoint EndPoint => Socket.RemoteEndPoint;
} }
public enum ReceiveState { Header, Data } public enum ReceiveState { Header, Data }

View File

@@ -421,8 +421,7 @@ namespace OpenRA.Server
{ {
if (State == ServerState.GameStarted) if (State == ServerState.GameStarted)
{ {
Log.Write("server", "Rejected connection from {0}; game is already started.", Log.Write("server", "Rejected connection from {0}; game is already started.", newConn.EndPoint);
newConn.Socket.RemoteEndPoint);
SendOrderTo(newConn, "ServerError", "The game has already started"); SendOrderTo(newConn, "ServerError", "The game has already started");
DropClient(newConn); DropClient(newConn);
@@ -439,7 +438,7 @@ namespace OpenRA.Server
return; return;
} }
var ipAddress = ((IPEndPoint)newConn.Socket.RemoteEndPoint).Address; var ipAddress = ((IPEndPoint)newConn.EndPoint).Address;
var client = new Session.Client var client = new Session.Client
{ {
Name = OpenRA.Settings.SanitizedPlayerName(handshake.Client.Name), Name = OpenRA.Settings.SanitizedPlayerName(handshake.Client.Name),
@@ -459,7 +458,7 @@ namespace OpenRA.Server
if (ModData.Manifest.Id != handshake.Mod) if (ModData.Manifest.Id != handshake.Mod)
{ {
Log.Write("server", "Rejected connection from {0}; mods do not match.", 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"); SendOrderTo(newConn, "ServerError", "Server is running an incompatible mod");
DropClient(newConn); DropClient(newConn);
@@ -468,8 +467,7 @@ namespace OpenRA.Server
if (ModData.Manifest.Metadata.Version != handshake.Version) if (ModData.Manifest.Metadata.Version != handshake.Version)
{ {
Log.Write("server", "Rejected connection from {0}; Not running the same version.", Log.Write("server", "Rejected connection from {0}; Not running the same version.", newConn.EndPoint);
newConn.Socket.RemoteEndPoint);
SendOrderTo(newConn, "ServerError", "Server is running an incompatible version"); SendOrderTo(newConn, "ServerError", "Server is running an incompatible version");
DropClient(newConn); DropClient(newConn);
@@ -479,7 +477,7 @@ namespace OpenRA.Server
if (handshake.OrdersProtocol != ProtocolVersion.Orders) if (handshake.OrdersProtocol != ProtocolVersion.Orders)
{ {
Log.Write("server", "Rejected connection from {0}; incompatible Orders protocol version {1}.", 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"); SendOrderTo(newConn, "ServerError", "Server is running an incompatible protocol");
DropClient(newConn); DropClient(newConn);
@@ -490,7 +488,7 @@ namespace OpenRA.Server
var bans = Settings.Ban.Union(TempBans); var bans = Settings.Ban.Union(TempBans);
if (bans.Contains(client.IPAddress)) 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"); SendOrderTo(newConn, "ServerError", $"You have been {(Settings.Ban.Contains(client.IPAddress) ? "banned" : "temporarily banned")} from the server");
DropClient(newConn); DropClient(newConn);
return; return;
@@ -524,20 +522,17 @@ namespace OpenRA.Server
var clientPing = new Session.ClientPing { Index = client.Index }; var clientPing = new Session.ClientPing { Index = client.Index };
LobbyInfo.ClientPings.Add(clientPing); LobbyInfo.ClientPings.Add(clientPing);
Log.Write("server", "Client {0}: Accepted connection from {1}.", Log.Write("server", "Client {0}: Accepted connection from {1}.", newConn.PlayerIndex, newConn.EndPoint);
newConn.PlayerIndex, newConn.Socket.RemoteEndPoint);
if (client.Fingerprint != null) if (client.Fingerprint != null)
Log.Write("server", "Client {0}: Player fingerprint is {1}.", Log.Write("server", "Client {0}: Player fingerprint is {1}.", newConn.PlayerIndex, client.Fingerprint);
newConn.PlayerIndex, client.Fingerprint);
foreach (var t in serverTraits.WithInterface<IClientJoined>()) foreach (var t in serverTraits.WithInterface<IClientJoined>())
t.ClientJoined(this, newConn); t.ClientJoined(this, newConn);
SyncLobbyInfo(); SyncLobbyInfo();
Log.Write("server", "{0} ({1}) has joined the game.", Log.Write("server", "{0} ({1}) has joined the game.", client.Name, newConn.EndPoint);
client.Name, newConn.Socket.RemoteEndPoint);
// Report to all other players // Report to all other players
SendMessage($"{client.Name} has joined the game.", newConn); 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)) if (!profile.KeyRevoked && CryptoUtil.VerifySignature(parameters, newConn.AuthToken, handshake.AuthSignature))
{ {
client.Fingerprint = handshake.Fingerprint; 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); profile.ProfileName, profile.ProfileID);
} }
else if (profile.KeyRevoked) else if (profile.KeyRevoked)
{ {
profile = null; 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 else
{ {
profile = null; profile = null;
Log.Write("server", "{0} failed to authenticate as {1} (signature verification failed)", Log.Write("server", "{0} failed to authenticate as {1} (signature verification failed)",
newConn.Socket.RemoteEndPoint, handshake.Fingerprint); newConn.EndPoint, handshake.Fingerprint);
} }
} }
else else
Log.Write("server", "{0} failed to authenticate as {1} (invalid server response: `{2}` is not `Player`)", 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) catch (Exception ex)
{ {
Log.Write("server", "{0} failed to authenticate as {1} (exception occurred)", 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()); Log.Write("server", ex.ToString());
} }
@@ -630,16 +625,16 @@ namespace OpenRA.Server
if (notAuthenticated) 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"); SendOrderTo(newConn, "ServerError", "Server requires players to have an OpenRA forum account");
DropClient(newConn); DropClient(newConn);
} }
else if (blacklisted || notWhitelisted) else if (blacklisted || notWhitelisted)
{ {
if (blacklisted) 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 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"); SendOrderTo(newConn, "ServerError", "You do not have permission to join this server");
DropClient(newConn); DropClient(newConn);
@@ -655,7 +650,7 @@ namespace OpenRA.Server
{ {
if (Type == ServerType.Dedicated && (Settings.RequireAuthentication || Settings.ProfileIDWhitelist.Any())) 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"); SendOrderTo(newConn, "ServerError", "Server requires players to have an OpenRA forum account");
DropClient(newConn); DropClient(newConn);
} }
@@ -665,7 +660,7 @@ namespace OpenRA.Server
} }
catch (Exception ex) 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()); Log.Write("server", ex.ToString());
DropClient(newConn); DropClient(newConn);
} }
@@ -873,7 +868,7 @@ namespace OpenRA.Server
else else
{ {
Log.Write("server", "Rejected connection from {0}; Order `{1}` is not a `HandshakeResponse`.", Log.Write("server", "Rejected connection from {0}; Order `{1}` is not a `HandshakeResponse`.",
conn.Socket.RemoteEndPoint, o.OrderString); conn.EndPoint, o.OrderString);
DropClient(conn); DropClient(conn);
} }

View File

@@ -144,7 +144,7 @@ namespace OpenRA.Mods.Common.Server
} }
client.State = state; 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(); server.SyncLobbyClients();
CheckAutoStart(server); CheckAutoStart(server);
@@ -759,7 +759,7 @@ namespace OpenRA.Mods.Common.Server
if (sanitizedName == client.Name) if (sanitizedName == client.Name)
return true; 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}."); server.SendMessage($"{client.Name} is now known as {sanitizedName}.");
client.Name = sanitizedName; client.Name = sanitizedName;
server.SyncLobbyClients(); server.SyncLobbyClients();