From 57fd7baaa97457a1c3776197254efe3fa8cc64c9 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sat, 11 Feb 2023 17:51:34 +0100 Subject: [PATCH] feat(pcap): allow passing encoding to the client to decode the packets with --- Pcap/NosSmooth.Pcap/PcapNostaleClient.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Pcap/NosSmooth.Pcap/PcapNostaleClient.cs b/Pcap/NosSmooth.Pcap/PcapNostaleClient.cs index c681b45aede1570ba68e4545d0be6bbcc52d6d3a..f84d30e12e339fd55c65fe7e336eb4bbdd751241 100644 --- a/Pcap/NosSmooth.Pcap/PcapNostaleClient.cs +++ b/Pcap/NosSmooth.Pcap/PcapNostaleClient.cs @@ -31,6 +31,7 @@ namespace NosSmooth.Pcap; public class PcapNostaleClient : BaseNostaleClient { private readonly Process _process; + private readonly Encoding _encoding; private readonly PcapNostaleManager _pcapManager; private readonly ProcessTcpManager _processTcpManager; private readonly IPacketHandler _handler; @@ -44,6 +45,7 @@ public class PcapNostaleClient : BaseNostaleClient /// /// The process to look for. /// The current encryption key of the world connection, if known. Zero if unknown. + /// The encoding. /// The pcap manager. /// The process manager. /// The packet handler. @@ -52,6 +54,7 @@ public class PcapNostaleClient : BaseNostaleClient ( Process process, int encryptionKey, + Encoding encoding, PcapNostaleManager pcapManager, ProcessTcpManager processTcpManager, IPacketHandler handler, @@ -60,6 +63,7 @@ public class PcapNostaleClient : BaseNostaleClient : base(commandProcessor) { _process = process; + _encoding = encoding; _pcapManager = pcapManager; _processTcpManager = processTcpManager; _handler = handler; @@ -179,7 +183,7 @@ public class PcapNostaleClient : BaseNostaleClient source = PacketSource.Client; if (_crypto.EncryptionKey == 0) { - var worldDecrypted = _crypto.ServerWorld.Decrypt(payloadData, Encoding.Default); + var worldDecrypted = _crypto.ServerWorld.Decrypt(payloadData, _encoding).Trim(); var splitted = worldDecrypted.Split(' '); if (splitted.Length == 2 && int.TryParse(splitted[1], out var encryptionKey)) @@ -190,12 +194,12 @@ public class PcapNostaleClient : BaseNostaleClient } else { // doesn't look like first packet from world, so assume login. - data = _crypto.ServerLogin.Decrypt(payloadData, Encoding.Default); + data = _crypto.ServerLogin.Decrypt(payloadData, _encoding); } } else { - data = _crypto.ServerWorld.Decrypt(payloadData, Encoding.Default); + data = _crypto.ServerWorld.Decrypt(payloadData, _encoding); containsPacketId = true; } } @@ -204,11 +208,11 @@ public class PcapNostaleClient : BaseNostaleClient source = PacketSource.Server; if (_crypto.EncryptionKey == 0) { // probably login - data = _crypto.ClientLogin.Decrypt(payloadData, Encoding.Default); + data = _crypto.ClientLogin.Decrypt(payloadData, _encoding); } else { - data = _crypto.ClientWorld.Decrypt(payloadData, Encoding.Default); + data = _crypto.ClientWorld.Decrypt(payloadData, _encoding); } } @@ -222,9 +226,7 @@ public class PcapNostaleClient : BaseNostaleClient linePacket = line.Substring(line.IndexOf(' ') + 1); } - Console.WriteLine(linePacket); - - // _handler.HandlePacketAsync(this, source, linePacket, _stoppingToken ?? default); + _handler.HandlePacketAsync(this, source, linePacket.Trim(), _stoppingToken ?? default); } }