~ruther/NosSmooth

9c2100f0256ebc5a9384e6d175cf5a427a93c092 — František Boháček 3 years ago efc96d1
fix: correctly intercept packets
M Local/NosSmooth.LocalClient/NostaleLocalClient.cs => Local/NosSmooth.LocalClient/NostaleLocalClient.cs +2 -18
@@ 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

M Local/NosSmooth.LocalCore/Network.cpp => Local/NosSmooth.LocalCore/Network.cpp +2 -1
@@ 7,7 7,8 @@ using namespace System;

Network::Network(ModuleHook moduleHook)
{
    NetworkUnmanaged::GetInstance()->Setup(moduleHook);
    _networkUnmanaged = NetworkUnmanaged::GetInstance();
    _networkUnmanaged->Setup(moduleHook);
}

void Network::ResetHooks()

M Local/NosSmooth.LocalCore/Network.h => Local/NosSmooth.LocalCore/Network.h +2 -0
@@ 37,6 37,8 @@ namespace NosSmoothCore
		/// Resets all the function hooks.
		/// </summary>
		void ResetHooks();
	private:
		NetworkUnmanaged* _networkUnmanaged;
	};
}


M Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp => Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp +10 -2
@@ 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)

Do not follow this link