private void Item_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) { if (seletedItem != null) { seletedItem.Selected = false; } seletedItem = (PacketListItem)sender; detailContainer.Children.Clear(); if (seletedItem.Packet.Data[0] == 0xCA) // Pv Packet { foreach (var pvPacket in PvPacket.Split(seletedItem.Packet.Data)) { detailContainer.Children.Add(new PvDetails { Source = seletedItem.Packet.Source, Destination = seletedItem.Packet.Destination, Command = $"0x{(int)pvPacket.Command:X2} {pvPacket.Command.ToString()}", Flags = pvPacket.Flag.ToString(), PayloadSize = pvPacket.Data.Length - 8 }); detailContainer.Children.Add(new HexViewer { Data = pvPacket.Data }); } } else { detailContainer.Children.Add(new HexViewer { Data = seletedItem.Packet.Data }); } seletedItem.Selected = true; }
private void Sniffer_ReceivedPacket(NetworkSniffer sniffer, PCapPacket packet) { if (DataPackets == null) { DataPackets = new List <PCapPacket>(); } if (packet.PacketType != PCapPacketType.Other && !(packet.IsBaseIpProtocol || (packet.PortSource == 0 && packet.PortDestination == 0) || packet.Data == null || packet.Data.Length == 0)) { lock (DataPacketsLock) { DataPackets.Add(packet); } if (SearchStats.IsSearchPacket(packet)) { searchStats.Add(packet); } // Does the new packet match the filter? var filter = txtFilter.Text?.ToLower() ?? ""; if (packet.Source.Contains(filter) || packet.Destination.Contains(filter) || packet.PacketType.ToString().ToLower().Contains(filter) || packet.PacketNumber.ToString().Contains(filter)) { Avalonia.Threading.Dispatcher.UIThread.Post(() => { var item = new PacketListItem { PacketNumber = packet.PacketNumber, PacketSource = packet.Source, PacketDestination = packet.Destination, PacketProtocol = packet.PacketType.ToString(), PacketLength = packet.Data.Length, Packet = packet, Foreground = Colorize(packet.Data) }; item.Click += Item_Click; scrollPanel.Children.Add(item); }); } } }