public override VisualTransaction[] GetTransactions(IPSession session) { List <VisualTransaction> transactions = new List <VisualTransaction>(); session.ResetState(); PacketStream stream1 = session.GetNextStreamDirection(); PacketStream stream2 = session.GetNextStreamDirection(); List <IPPacket> packets = new List <IPPacket>(stream1.Packets.Count + stream2.Packets.Count); packets.AddRange(stream1.Packets); packets.AddRange(stream2.Packets); packets.Sort(); VisualTransaction transaction = null; MemoryStream previewData = new MemoryStream(); int transferred = 0; foreach (IPPacket packet in packets) { if (transaction == null || (transaction != null && packet.Direction != transaction.Direction)) { if (transaction != null) { transaction.AddHeaderField("Size", transferred); byte[] bytes = previewData.ToArray(); transaction.SetBodyFromPreviewData(bytes, bytes.Length); } transaction = new VisualTransaction(packet.Index, packet.Direction, packet.Timestamp); transaction.AddHeaderField("Direction", packet.Direction); transaction.HeaderRowsPerCol = 1; transactions.Add(transaction); previewData.SetLength(0); transferred = 0; } transaction.EndTime = packet.Timestamp; previewData.Write(packet.Bytes, 0, packet.Bytes.Length); transferred += packet.Bytes.Length; } if (transaction != null) { transaction.AddHeaderField("Size", transferred); byte[] bytes = previewData.ToArray(); transaction.SetBodyFromTruncatedPreviewData(bytes, transferred - bytes.Length); } return(transactions.ToArray()); }