From 9cb15ad9e2c79b6da366989c66b078d2f353ee9a Mon Sep 17 00:00:00 2001 From: neckfire Date: Thu, 16 Jul 2026 23:53:52 +0200 Subject: [PATCH] =?UTF-8?q?fix(netcode):=20Incoming=20en=20sens=20inverse?= =?UTF-8?q?=20d'Outgoing=20(couche=20chiffrement=20externe=20retir=C3=A9e?= =?UTF-8?q?=20en=20premier)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avec >1 composant actif (stateless + AES), Incoming et Outgoing doivent être en sens opposés. Les deux étaient en avant -> le stateless tentait de parser des octets chiffrés. Incoming itère désormais en inverse. --- src/Prospect.Unreal/Net/PacketHandler.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Prospect.Unreal/Net/PacketHandler.cs b/src/Prospect.Unreal/Net/PacketHandler.cs index 5f380aa..8d656e4 100644 --- a/src/Prospect.Unreal/Net/PacketHandler.cs +++ b/src/Prospect.Unreal/Net/PacketHandler.cs @@ -192,8 +192,14 @@ public class PacketHandler UpdateInitialState(); } - foreach (var component in _handlerComponents) + // Incoming = sens INVERSE d'Outgoing (Outgoing itère en avant). Indispensable + // dès qu'il y a >1 composant actif : la couche ajoutée en dernier à l'émission + // (ex. chiffrement AES, la plus externe) doit être retirée en premier à la + // réception. Sans ça, le stateless tenterait de parser des octets chiffrés. + for (var idx = _handlerComponents.Count - 1; idx >= 0; idx--) { + var component = _handlerComponents[idx]; + if (processPacketReader.GetPosBits() != 0 && !component.CanReadUnaligned()) { RealignPacket(processPacketReader);