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)); } }
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); }