Release 1.10.5.0 - Autumn Update 2025

This commit is contained in:
Regalis11
2025-09-17 13:44:21 +03:00
parent d13836ce87
commit caa0326cf8
120 changed files with 2584 additions and 635 deletions
@@ -59,11 +59,11 @@ namespace Barotrauma.Networking
ServerConnection = ServerEndpoint.MakeConnectionFromEndpoint();
var socketCallbacks = new P2PSocket.Callbacks(OnIncomingConnection, OnConnectionClosed, OnP2PData);
var socketCallbacks = new P2PSocket.Callbacks(OnIncomingConnection, OnConnectionClosed, OnExcessivePackets, OnP2PData);
var socketCreateResult = ServerEndpoint switch
{
EosP2PEndpoint => EosP2PSocket.Create(socketCallbacks),
SteamP2PEndpoint steamP2PEndpoint => SteamConnectSocket.Create(steamP2PEndpoint, socketCallbacks),
EosP2PEndpoint => EosP2PSocket.Create(socketCallbacks, P2PSocket.OwnerOrClient.Client),
SteamP2PEndpoint steamP2PEndpoint => SteamConnectSocket.Create(steamP2PEndpoint, socketCallbacks, P2PSocket.OwnerOrClient.Client),
_ => throw new Exception($"Invalid server endpoint: {ServerEndpoint.GetType()} {ServerEndpoint}")
};
socket = socketCreateResult.TryUnwrapSuccess(out var s)
@@ -97,6 +97,11 @@ namespace Barotrauma.Networking
isActive = true;
}
private void OnExcessivePackets(P2PEndpoint endpoint, bool shouldBan)
{
// do nothing
}
private bool OnIncomingConnection(P2PEndpoint remoteEndpoint)
{
if (remoteEndpoint == ServerEndpoint)
@@ -163,7 +168,7 @@ namespace Barotrauma.Networking
int completeMessageLengthBits = completeMessage.Length * 8;
incomingDataMessages.Add(new ReadWriteMessage(completeMessage.ToArray(), 0, completeMessageLengthBits, copyBuf: false));
}
else if (packetHeader.IsHeartbeatMessage())
else if (packetHeader.IsHeartbeatMessage() || packetHeader.IsDoSProtectionMessage())
{
return; //TODO: implement heartbeats
}
@@ -88,8 +88,8 @@ namespace Barotrauma.Networking
remotePeers.Clear();
var socketCallbacks = new P2PSocket.Callbacks(OnIncomingConnection, OnConnectionClosed, OnP2PData);
var socketCreateResult = DualStackP2PSocket.Create(socketCallbacks);
var socketCallbacks = new P2PSocket.Callbacks(OnIncomingConnection, OnConnectionClosed, OnExcessivePackets, OnP2PData);
var socketCreateResult = DualStackP2PSocket.Create(socketCallbacks, type: P2PSocket.OwnerOrClient.Owner);
socket = socketCreateResult.TryUnwrapSuccess(out var s)
? s
: throw new Exception($"Failed to create dual-stack socket: {socketCreateResult}");
@@ -187,6 +187,29 @@ namespace Barotrauma.Networking
}
}
private void OnExcessivePackets(P2PEndpoint endpoint, bool shouldBan)
{
IWriteMessage msg = new WriteOnlyMessage();
msg.WriteNetSerializableStruct(new P2POwnerToServerHeader
{
EndpointStr = selfPrimaryEndpoint.StringRepresentation,
AccountInfo = selfAccountInfo
});
msg.WriteNetSerializableStruct(new PeerPacketHeaders
{
DeliveryMethod = DeliveryMethod.Reliable,
PacketHeader = PacketHeader.IsDoSProtectionMessage
});
msg.WriteNetSerializableStruct(new DoSProtectionPacket(endpoint.StringRepresentation, shouldBan));
string dcMsg = TextManager.Get(shouldBan ? "DoSProtectionBanned" : "DoSProtectionKicked")
.Fallback(TextManager.Get("DoSProtectionKicked")).Value;
msg.WriteNetSerializableStruct(shouldBan
? PeerDisconnectPacket.Banned(dcMsg)
: PeerDisconnectPacket.Kicked(dcMsg));
ForwardToServerProcess(msg);
}
private void StartAuthTask(IReadMessage inc, RemotePeer remotePeer)
{
remotePeer.AuthStatus = RemotePeer.AuthenticationStatus.AuthenticationPending;