From a30e1d230f481468e1aff910b1d0e308653f3630 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 28 Sep 2022 20:30:47 -0400 Subject: [PATCH] Fixes disconnect when trying to login with a higher ping. Client will send multi proto packets in same packet. --- CypherCore.sln | 4 ++-- Source/BNetServer/Networking/Session.cs | 16 ++++++++++++---- Source/Framework/Framework.csproj | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CypherCore.sln b/CypherCore.sln index a1defa9bd..bbaa315b1 100644 --- a/CypherCore.sln +++ b/CypherCore.sln @@ -63,8 +63,8 @@ Global {3B8C9AB8-2DC3-4655-BF67-AE2001D3B4F6}.Release|mac-x64.Build.0 = Release|mac-x64 {3B8C9AB8-2DC3-4655-BF67-AE2001D3B4F6}.Release|win-x64.ActiveCfg = Release|win-x64 {3B8C9AB8-2DC3-4655-BF67-AE2001D3B4F6}.Release|win-x64.Build.0 = Release|win-x64 - {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|linux-x64.ActiveCfg = Debug|x64 - {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|linux-x64.Build.0 = Debug|x64 + {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|linux-x64.ActiveCfg = Debug|linux-x64 + {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|linux-x64.Build.0 = Debug|linux-x64 {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|mac-x64.ActiveCfg = Debug|mac-x64 {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|mac-x64.Build.0 = Debug|mac-x64 {1899C17C-1FA4-4807-B90E-0336C5748C1A}.Debug|win-x64.ActiveCfg = Debug|win-x64 diff --git a/Source/BNetServer/Networking/Session.cs b/Source/BNetServer/Networking/Session.cs index 44bedd543..d1bb540c6 100644 --- a/Source/BNetServer/Networking/Session.cs +++ b/Source/BNetServer/Networking/Session.cs @@ -10,6 +10,7 @@ using Framework.Realm; using Google.Protobuf; using System; using System.Collections.Generic; +using System.Net; using System.Net.Sockets; namespace BNetServer.Networking @@ -92,11 +93,18 @@ namespace BNetServer.Networking if (!IsOpen()) return; - var stream = new CodedInputStream(data, 0, receivedLength); - while (!stream.IsAtEnd) + int readPos = 0; + while (readPos < receivedLength) { - var header = new Header(); - stream.ReadMessage(header); + var headerLength = (ushort)IPAddress.HostToNetworkOrder(BitConverter.ToInt16(data, readPos)); + readPos += 2; + + Header header = new(); + header.MergeFrom(data, readPos, headerLength); + readPos += headerLength; + + var stream = new CodedInputStream(data, readPos, (int)header.Size); + readPos += (int)header.Size; if (header.ServiceId != 0xFE && header.ServiceHash != 0) { diff --git a/Source/Framework/Framework.csproj b/Source/Framework/Framework.csproj index 77916d4b9..6ced4276d 100644 --- a/Source/Framework/Framework.csproj +++ b/Source/Framework/Framework.csproj @@ -5,7 +5,7 @@ - +