From 8a14552e56c4ddffeb01f5042ce55e1dc92c10f6 Mon Sep 17 00:00:00 2001 From: TheLastRar Date: Sat, 6 Apr 2024 19:16:32 +0100 Subject: [PATCH] DEV9: Move and fix GetDelta Function --- .../DEV9/Sessions/TCP_Session/TCP_Session.cpp | 18 ++++++++++++++++++ pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h | 2 +- .../Sessions/TCP_Session/TCP_Session_Out.cpp | 13 ++----------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp index ee57d04867..2185ab9a14 100644 --- a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp +++ b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.cpp @@ -68,6 +68,24 @@ namespace Sessions { } + s32 TCP_Session::GetDelta(u32 a, u32 b) + { + s64 delta = static_cast(a) - static_cast(b); + if (delta > 0.5 * UINT_MAX) + { + delta = -static_cast(UINT_MAX) + a - b - 1; + Console.Error("DEV9: TCP: [PS2] SequenceNumber Overflow Detected"); + Console.Error("DEV9: TCP: [PS2] New Data Offset: %d bytes", delta); + } + if (delta < -0.5 * UINT_MAX) + { + delta = UINT_MAX - b + a + 1; + Console.Error("DEV9: TCP: [PS2] SequenceNumber Overflow Detected"); + Console.Error("DEV9: TCP: [PS2] New Data Offset: %d bytes", delta); + } + return delta; + } + TCP_Packet* TCP_Session::CreateBasePacket(PayloadData* data) { //DevCon.WriteLn("Creating Base Packet"); diff --git a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h index 1437e50356..765574fdca 100644 --- a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h +++ b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session.h @@ -95,7 +95,7 @@ namespace Sessions NumCheckResult CheckRepeatSYNNumbers(PacketReader::IP::TCP::TCP_Packet* tcp); NumCheckResult CheckNumbers(PacketReader::IP::TCP::TCP_Packet* tcp); - u32 GetDelta(u32 parExpectedSeq, u32 parGotSeq); + s32 GetDelta(u32 a, u32 b); //Returns a - b //Returns true if errored bool ErrorOnNonEmptyPacket(PacketReader::IP::TCP::TCP_Packet* tcp); diff --git a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_Out.cpp b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_Out.cpp index db1fce3168..9eed93ca27 100644 --- a/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_Out.cpp +++ b/pcsx2/DEV9/Sessions/TCP_Session/TCP_Session_Out.cpp @@ -308,7 +308,9 @@ namespace Sessions windowSize.store(tcp->windowSize << windowScale); const NumCheckResult Result = CheckNumbers(tcp); + //Check if we already have some of the data sent const uint delta = GetDelta(expectedSeqNumber, tcp->sequenceNumber); + pxAssert(delta >= 0); //if (Result == NumCheckResult::GotOldData) //{ // DevCon.WriteLn("[PS2] New Data Offset: %d bytes", delta); @@ -464,17 +466,6 @@ namespace Sessions return NumCheckResult::OK; } - u32 TCP_Session::GetDelta(u32 parExpectedSeq, u32 parGotSeq) - { - u32 delta = parExpectedSeq - parGotSeq; - if (delta > 0.5 * UINT_MAX) - { - delta = UINT_MAX - parExpectedSeq + parGotSeq; - Console.Error("DEV9: TCP: [PS2] SequenceNumber Overflow Detected"); - Console.Error("DEV9: TCP: [PS2] New Data Offset: %d bytes", delta); - } - return delta; - } bool TCP_Session::ErrorOnNonEmptyPacket(TCP_Packet* tcp) { NumCheckResult ResultFIN = CheckNumbers(tcp);