private L7Conversation[] ReassembleL7Conversations(String pcapFileName)
        {
            var frames = this.GetFramesFromPcap(pcapFileName);

            var enumerable      = frames as Frame[] ?? frames.ToArray();
            var originatorFrame = enumerable.First();
            var tcpReassembler  = new TcpConversationTracker(originatorFrame.SourceEndPoint, originatorFrame.DestinationEndPoint);

            foreach (var frame in enumerable)
            {
                tcpReassembler.ProcessFrame(frame);
            }

            var l7Conversations = tcpReassembler.Complete().ToArray();

            return(l7Conversations);
        }
        private L7ConversationTrackerBase GetOrCreateL7ReassemblerForFrame(Dictionary <L3L4ConversationKey, L7ConversationTrackerBase> trackers, Frame frame)
        {
            var conversationKey = new L3L4ConversationKey(frame);

            if (!trackers.TryGetValue(conversationKey, out var tracker))
            {
                switch (frame.IpProtocol)
                {
                case IPProtocolType.TCP:
                    tracker = new TcpConversationTracker(frame.SourceEndPoint, frame.DestinationEndPoint);
                    break;

                case IPProtocolType.UDP:
                    tracker = new UdpConversationTracker(frame.SourceEndPoint, frame.DestinationEndPoint);
                    break;

                default:
                    return(null);
                }
                trackers.Add(conversationKey, tracker);
            }
            return(tracker);
        }