diff --git a/OpenRA.Game/Network/GameSave.cs b/OpenRA.Game/Network/GameSave.cs index d0851a4c13..a6b60ae019 100644 --- a/OpenRA.Game/Network/GameSave.cs +++ b/OpenRA.Game/Network/GameSave.cs @@ -188,7 +188,7 @@ namespace OpenRA.Network public void DispatchOrders(Connection conn, int frame, byte[] data) { // Sync packet - we only care about the last value - if (data.Length > 0 && data[0] == (byte)OrderType.SyncHash && frame > LastSyncFrame) + if (data.Length == Order.SyncHashOrderLength && data[0] == (byte)OrderType.SyncHash && frame > LastSyncFrame) { LastSyncFrame = frame; lastSyncPacket = data; diff --git a/OpenRA.Game/Network/Order.cs b/OpenRA.Game/Network/Order.cs index 5b891f7759..1ad80898ae 100644 --- a/OpenRA.Game/Network/Order.cs +++ b/OpenRA.Game/Network/Order.cs @@ -49,6 +49,9 @@ namespace OpenRA public sealed class Order { + // Length of orders with type OrderType.SyncHash + public const int SyncHashOrderLength = 13; + public readonly string OrderString; public readonly Actor Subject; public readonly bool Queued; diff --git a/OpenRA.Game/Network/OrderIO.cs b/OpenRA.Game/Network/OrderIO.cs index 41baf3d4bd..ce69dc76e9 100644 --- a/OpenRA.Game/Network/OrderIO.cs +++ b/OpenRA.Game/Network/OrderIO.cs @@ -33,7 +33,7 @@ namespace OpenRA.Network public static byte[] SerializeSync(int sync, ulong defeatState) { - var ms = new MemoryStream(1 + 4 + 8); + var ms = new MemoryStream(Order.SyncHashOrderLength); using (var writer = new BinaryWriter(ms)) { writer.Write((byte)OrderType.SyncHash); diff --git a/OpenRA.Game/Network/OrderManager.cs b/OpenRA.Game/Network/OrderManager.cs index 5445c34512..3963feba81 100644 --- a/OpenRA.Game/Network/OrderManager.cs +++ b/OpenRA.Game/Network/OrderManager.cs @@ -123,7 +123,7 @@ namespace OpenRA.Network var frame = BitConverter.ToInt32(packet, 0); if (packet.Length == 5 && packet[4] == (byte)OrderType.Disconnect) frameData.ClientQuit(clientId, frame); - else if (packet.Length == 4 + 1 + 4 + 8 && packet[4] == (byte)OrderType.SyncHash) + else if (packet.Length == 4 + Order.SyncHashOrderLength && packet[4] == (byte)OrderType.SyncHash) CheckSync(packet); else if (frame == 0) immediatePackets.Add((clientId, packet)); diff --git a/OpenRA.Game/Network/ReplayConnection.cs b/OpenRA.Game/Network/ReplayConnection.cs index a79eaf8103..c57925a219 100644 --- a/OpenRA.Game/Network/ReplayConnection.cs +++ b/OpenRA.Game/Network/ReplayConnection.cs @@ -74,7 +74,7 @@ namespace OpenRA.Network if (packet.Length == 5 && packet[4] == (byte)OrderType.Disconnect) continue; // disconnect - else if (packet.Length >= 5 && packet[4] == (byte)OrderType.SyncHash) + else if (packet.Length == 4 + Order.SyncHashOrderLength && packet[4] == (byte)OrderType.SyncHash) continue; // sync else if (frame == 0) { diff --git a/OpenRA.Game/Network/ReplayRecorder.cs b/OpenRA.Game/Network/ReplayRecorder.cs index 47657435ae..2407b8fe48 100644 --- a/OpenRA.Game/Network/ReplayRecorder.cs +++ b/OpenRA.Game/Network/ReplayRecorder.cs @@ -28,7 +28,7 @@ namespace OpenRA.Network { if (data.Length == 5 && data[4] == (byte)OrderType.Disconnect) return false; - if (data.Length >= 5 && data[4] == (byte)OrderType.SyncHash) + if (data.Length == 4 + Order.SyncHashOrderLength && data[4] == (byte)OrderType.SyncHash) return false; var frame = BitConverter.ToInt32(data, 0); diff --git a/OpenRA.Game/Server/Server.cs b/OpenRA.Game/Server/Server.cs index 705bea821c..3a87d9fdeb 100644 --- a/OpenRA.Game/Server/Server.cs +++ b/OpenRA.Game/Server/Server.cs @@ -784,7 +784,7 @@ namespace OpenRA.Server { recorder.ReceiveFrame(from, frame, data); - if (data.Length == 1 + 4 + 8 && data[0] == (byte)OrderType.SyncHash) + if (data.Length == Order.SyncHashOrderLength && data[0] == (byte)OrderType.SyncHash) HandleSyncOrder(frame, data); } }