From 9c2100f0256ebc5a9384e6d175cf5a427a93c092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Mon, 20 Dec 2021 19:13:47 +0100 Subject: [PATCH] fix: correctly intercept packets --- .../NostaleLocalClient.cs | 20 ++----------------- Local/NosSmooth.LocalCore/Network.cpp | 3 ++- Local/NosSmooth.LocalCore/Network.h | 2 ++ .../NosSmooth.LocalCore/NetworkUnmanaged.cpp | 12 +++++++++-- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/Local/NosSmooth.LocalClient/NostaleLocalClient.cs b/Local/NosSmooth.LocalClient/NostaleLocalClient.cs index ca74e2b..3af319b 100644 --- a/Local/NosSmooth.LocalClient/NostaleLocalClient.cs +++ b/Local/NosSmooth.LocalClient/NostaleLocalClient.cs @@ -112,15 +112,7 @@ public class NostaleLocalClient : BaseNostaleClient throw new InvalidOperationException("The interceptor cannot be null if interception is allowed."); } - var process = _interceptor.InterceptReceive(ref packet); - if (process) - { - ReceivePacket(packet); - } - } - else - { - ReceivePacket(packet); + return _interceptor.InterceptReceive(ref packet); } // TODO: handlers @@ -138,15 +130,7 @@ public class NostaleLocalClient : BaseNostaleClient throw new InvalidOperationException("The interceptor cannot be null if interception is allowed."); } - var process = _interceptor.InterceptSend(ref packet); - if (process) - { - SendPacket(packet); - } - } - else - { - SendPacket(packet); + return _interceptor.InterceptSend(ref packet); } // TODO: handlers diff --git a/Local/NosSmooth.LocalCore/Network.cpp b/Local/NosSmooth.LocalCore/Network.cpp index da953e0..6be4e0f 100644 --- a/Local/NosSmooth.LocalCore/Network.cpp +++ b/Local/NosSmooth.LocalCore/Network.cpp @@ -7,7 +7,8 @@ using namespace System; Network::Network(ModuleHook moduleHook) { - NetworkUnmanaged::GetInstance()->Setup(moduleHook); + _networkUnmanaged = NetworkUnmanaged::GetInstance(); + _networkUnmanaged->Setup(moduleHook); } void Network::ResetHooks() diff --git a/Local/NosSmooth.LocalCore/Network.h b/Local/NosSmooth.LocalCore/Network.h index d1d308f..ca13a62 100644 --- a/Local/NosSmooth.LocalCore/Network.h +++ b/Local/NosSmooth.LocalCore/Network.h @@ -37,6 +37,8 @@ namespace NosSmoothCore /// Resets all the function hooks. /// void ResetHooks(); + private: + NetworkUnmanaged* _networkUnmanaged; }; } diff --git a/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp b/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp index e572080..c0cac02 100644 --- a/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp +++ b/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp @@ -28,13 +28,17 @@ void PacketSendDetour() mov packet, edx } - NetworkUnmanaged::GetInstance()->ExecuteSendCallback(packet); + bool isAccepted = NetworkUnmanaged::GetInstance()->ExecuteSendCallback(packet); __asm { popfd popad } + + if (isAccepted) { + NetworkUnmanaged::GetInstance()->SendPacket(packet); + } } void PacketReceiveDetour() @@ -49,13 +53,17 @@ void PacketReceiveDetour() mov packet, edx } - NetworkUnmanaged::GetInstance()->ExecuteReceiveCallback(packet); + bool isAccepted = NetworkUnmanaged::GetInstance()->ExecuteReceiveCallback(packet); __asm { popfd popad } + + if (isAccepted) { + NetworkUnmanaged::GetInstance()->ReceivePacket(packet); + } } void NetworkUnmanaged::Setup(ModuleHook moduleHook) -- 2.48.1