protected virtual PacketsSet <T> GetPacketsSet(CapturedPacket packet) { var sourceDestination = new SourceDestination { IPSource = packet.IPSource, PortSource = packet.Source.Port, IPDestination = packet.IPDestination, PortDestination = packet.Destination.Port }; if (packetsBytes.TryGetValue(sourceDestination, out PacketsSet <T> packetsSet)) { return(packetsSet); } packetsSet = new PacketsSet <T>(); packetsBytes.Add(sourceDestination, packetsSet); return(packetsSet); }
protected virtual IList <CapturedPacket> ExtractPackets(CapturedPacket packet, PacketsSet <T> packetsSet) { var packets = new List <CapturedPacket>(); var packetLength = 0; var offset = 0; if (!IsStartingPacket(packet.Bytes)) { var lengthToComplete = packetsSet.GetLengthToCompletePacket(); if (lengthToComplete == 0 || lengthToComplete >= packet.Bytes.Length) { packets.Add(packet); return(packets); } var additionalPacket = packet.Bytes.Skip(lengthToComplete).ToArray(); if (IsStartingPacket(additionalPacket)) { packetLength = lengthToComplete; } } else if ((packetLength = ReadPacketLength(packet.Bytes)) >= packet.Bytes.Length || packetLength == 0) { packets.Add(packet); return(packets); } var sequenceNumber = packet.SequenceNumber; while (offset < packet.Bytes.Length) { var bytes = packet.Bytes.Skip(offset).ToArray(); if (offset != 0) { if (!IsStartingPacket(bytes)) { break; } packetLength = ReadPacketLength(bytes); } var subPacket = new CapturedPacket { Bytes = bytes.Take(packetLength).ToArray(), CreatedTimeStamp = packet.CreatedTimeStamp, Destination = packet.Destination, SequenceNumber = sequenceNumber++, Source = packet.Source }; packets.Add(subPacket); offset += packetLength; if (packetLength == 0) { break; } } return(packets); }