From 55d4c9a811525c95f89c737c6622d25d93232d30 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Mon, 13 Feb 2023 08:31:01 +0100 Subject: [PATCH] fix(pcap): handle exceptions inside of packet arrival --- Pcap/NosSmooth.Pcap/PcapNostaleManager.cs | 47 +++++++++++++++-------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/Pcap/NosSmooth.Pcap/PcapNostaleManager.cs b/Pcap/NosSmooth.Pcap/PcapNostaleManager.cs index 41c03b3..1d822ea 100644 --- a/Pcap/NosSmooth.Pcap/PcapNostaleManager.cs +++ b/Pcap/NosSmooth.Pcap/PcapNostaleManager.cs @@ -150,6 +150,18 @@ public class PcapNostaleManager } private void DeviceOnOnPacketArrival(object sender, PacketCapture e) + { + try + { + DeviceOnPacketArrivalInner(e); + } + catch (Exception ex) + { + _logger.LogError(ex, "OnPacketArrival has produced an exception"); + } + } + + private void DeviceOnPacketArrivalInner(PacketCapture e) { var rawPacket = e.GetPacket(); var packet = PacketDotNet.Packet.ParsePacket(rawPacket.LinkLayerType, rawPacket.Data); @@ -209,21 +221,8 @@ public class PcapNostaleManager { try { - foreach (var connectionData in _connections) - { - if (connectionData.Value.FirstObservedAt.AddMilliseconds(_options.ForgetConnectionInterval) < DateTimeOffset.Now) - { - _connections.TryRemove(connectionData); - } - - if (connectionData.Value.SniffedData.Count > 0 && connectionData.Value.FirstObservedAt.AddMilliseconds - (_options.CleanSniffedDataInterval) < DateTimeOffset.Now) - { - connectionData.Value.SniffedData.Clear(); - } - } - - await Task.Delay(TimeSpan.FromSeconds(_options.CleanSniffedDataInterval * 3), ct); + DeleteData(); + await Task.Delay(TimeSpan.FromMilliseconds(_options.CleanSniffedDataInterval * 3), ct); } catch (OperationCanceledException) { @@ -235,4 +234,22 @@ public class PcapNostaleManager } } } + + private void DeleteData() + { + foreach (var connectionData in _connections) + { + if (connectionData.Value.FirstObservedAt.AddMilliseconds + (_options.ForgetConnectionInterval) < DateTimeOffset.Now) + { + _connections.TryRemove(connectionData); + } + + if (connectionData.Value.SniffedData.Count > 0 && connectionData.Value.FirstObservedAt.AddMilliseconds + (_options.CleanSniffedDataInterval) < DateTimeOffset.Now) + { + connectionData.Value.SniffedData.Clear(); + } + } + } } \ No newline at end of file -- 2.48.1