Esempio n. 1
0
        public void RemoveFlow(FsUnidirectionalFlow flow)
        {
            switch (flow.FlowDirection)
            {
            case DaRFlowDirection.up:
                this._upFlows.Remove(flow);
                break;

            case DaRFlowDirection.down:
                this._downFlows.Remove(flow);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(flow));
            }
        }
Esempio n. 2
0
        public FsUnidirectionalFlow CreateAndAddFlow(DaRFlowDirection flowDirection)
        {
            lock (this)
            {
                var flow = new FsUnidirectionalFlow(this.L4Conversation, flowDirection);
                switch (flowDirection)
                {
                case DaRFlowDirection.up:
                    this._upFlows.AddLast(flow);
                    break;

                case DaRFlowDirection.down:
                    this._downFlows.AddLast(flow);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(flowDirection));
                }
                return(flow);
            }
        }
        public override IEnumerable <L7Conversation> RecognizeAndUpdateConversation(L7Conversation conversation)
        {
            var rtpMap             = new Dictionary <UInt32, List <L7PDU> >();
            var rtcpMap            = new Dictionary <UInt32, List <L7PDU> >();
            var unknownPdus        = new List <L7PDU>();
            var newL7Conversations = new List <L7Conversation>(new [] { conversation });

            unknownPdus.Clear();
            rtcpMap.Clear();
            rtpMap.Clear(); //to be sure
            this.RecognizeRtpStreams(conversation.UpFlowPDUs, rtpMap, rtcpMap, unknownPdus);
            foreach (var rtpStream in rtpMap)
            {
                // add only long enought streams
                if (rtpStream.Value.Count() >= this._minPackets)
                {
                    var upFlow = new FsUnidirectionalFlow(conversation.L4Conversation, DaRFlowDirection.up);
                    upFlow.SubstituteL7PDU(rtpStream.Value);
                    var l7Conv = this.L7ConversationFactory.Create(upFlow, DaRFlowDirection.up);
                    l7Conv.ApplicationProtocols = this.NbarRtcpTaxonomy;
                    newL7Conversations.Add(l7Conv);
                }
                else
                {
                    unknownPdus.AddRange(rtpStream.Value);
                }
            }
            // RTCP
            foreach (var rtcpStream in rtcpMap)
            {
                var upFlow = new FsUnidirectionalFlow(conversation.L4Conversation, DaRFlowDirection.up);
                upFlow.SubstituteL7PDU(rtcpStream.Value);
                var l7Conv = this.L7ConversationFactory.Create(upFlow, DaRFlowDirection.down);
                l7Conv.ApplicationProtocols = this.NbarRtcpTaxonomy;
                newL7Conversations.Add(l7Conv);
            }
            var unknownUpFlow = new FsUnidirectionalFlow(conversation.L4Conversation, DaRFlowDirection.down);

            unknownUpFlow.SubstituteL7PDU(unknownPdus);
            //conversationStore.CreateAndAddConversation(upFlow: unknownUpFlow, downFlow: null);
            // TODO: ZAKOMENTOVANE HADZE VYNIMKU

            unknownPdus.Clear();
            rtpMap.Clear();
            rtcpMap.Clear();
            this.RecognizeRtpStreams(conversation.DownFlowPDUs, rtpMap, rtcpMap, unknownPdus);
            foreach (var rtpStream in rtpMap)
            {
                // check long enought streams
                if (rtpStream.Value.Count() >= this._minPackets)
                {
                    var downFlow = new FsUnidirectionalFlow(conversation.L4Conversation, DaRFlowDirection.down);
                    downFlow.SubstituteL7PDU(rtpStream.Value);
                    var l7Conv = this.L7ConversationFactory.Create(downFlow, DaRFlowDirection.down);
                    l7Conv.ApplicationProtocols = this.NbarRtcpTaxonomy;
                    newL7Conversations.Add(l7Conv);
                }
                else
                {
                    unknownPdus.AddRange(rtpStream.Value);
                }
            }
            // RTCP
            foreach (var rtcpStream in rtcpMap)
            {
                var downFlow = new FsUnidirectionalFlow(conversation.L4Conversation, DaRFlowDirection.down);
                downFlow.SubstituteL7PDU(rtcpStream.Value);
                var l7Conv = this.L7ConversationFactory.Create(downFlow, DaRFlowDirection.down);
                l7Conv.ApplicationProtocols = this.NbarRtcpTaxonomy;
                newL7Conversations.Add(l7Conv);
            }
            var unknownDownFlow = new FsUnidirectionalFlow(conversation.L4Conversation, DaRFlowDirection.down);

            unknownDownFlow.SubstituteL7PDU(unknownPdus);
            //conversationStore.CreateAndAddConversation(upFlow: null, downFlow: unknownDownFlow);
            // TODO: ZAKOMENTOVANE HADZE VYNIMKU

            rtpMap.Clear();
            rtcpMap.Clear();
            return(newL7Conversations);
        }