public override double ComputeFeature(L7Conversation l7Conversation, DaRFlowDirection flowDirection) { IEnumerable <L7PDU> pdus; switch (flowDirection) { case DaRFlowDirection.up: pdus = l7Conversation.UpFlowPDUs; break; case DaRFlowDirection.down: pdus = l7Conversation.DownFlowPDUs; break; case DaRFlowDirection.non: pdus = l7Conversation.L7PDUs; break; default: throw new ArgumentOutOfRangeException(nameof(flowDirection), flowDirection, null); } var l7Pdus = pdus as L7PDU[] ?? pdus.ToArray(); if (!l7Pdus.Any()) { return(-1); } var length = l7Pdus.Count(); var pdusArray = l7Pdus.ToArray(); if (length <= 1) { return(0); } var minTime = Math.Abs((pdusArray[1].FirstSeen - pdusArray[0].FirstSeen).TotalSeconds); for (var i = 1; i < length - 1; i++) { var interArrivalTime = Math.Abs((pdusArray[i + 1].FirstSeen - pdusArray[i].FirstSeen).TotalSeconds); if (minTime.CompareTo(interArrivalTime) > 0) { minTime = interArrivalTime; } } return(minTime); }
public MaxInterArrivalTimeBase(L7Conversation l7Conversation, DaRFlowDirection flowDirection) : base(l7Conversation, flowDirection) { }