~ruther/NosSmooth

55d4c9a811525c95f89c737c6622d25d93232d30 — Rutherther 2 years ago 0a679b2
fix(pcap): handle exceptions inside of packet arrival
1 files changed, 32 insertions(+), 15 deletions(-)

M Pcap/NosSmooth.Pcap/PcapNostaleManager.cs
M Pcap/NosSmooth.Pcap/PcapNostaleManager.cs => Pcap/NosSmooth.Pcap/PcapNostaleManager.cs +32 -15
@@ 151,6 151,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

Do not follow this link