Add Connection.EndPoint property.
This commit is contained in:
@@ -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 }
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user