public PacketStream GetNextStreamDirection() { if (curDirection == PacketDirection.PACKET_DIRECTION_INCOMING) { curDirection = PacketDirection.PACKET_DIRECTION_OUTGOING; } else if (curDirection == PacketDirection.PACKET_DIRECTION_OUTGOING) { curDirection = PacketDirection.PACKET_DIRECTION_INCOMING; } else if (curDirection == PacketDirection.PACKET_DIRECTION_INVALID) { IPPacket pktIn = null, pktOut = null; if (streamIn.Packets.Count > 0) { pktIn = streamIn.Packets[0]; if (streamOut.Packets.Count > 0) { pktOut = streamOut.Packets[0]; // FIXME: is this check correct for the earliest packet? if (pktIn.CompareTo(pktOut) < 0) { curDirection = PacketDirection.PACKET_DIRECTION_INCOMING; } else { curDirection = PacketDirection.PACKET_DIRECTION_OUTGOING; } } } if (curDirection == PacketDirection.PACKET_DIRECTION_INVALID) { if (pktIn != null) { curDirection = PacketDirection.PACKET_DIRECTION_INCOMING; } else { curDirection = PacketDirection.PACKET_DIRECTION_OUTGOING; } } } if (curDirection == PacketDirection.PACKET_DIRECTION_INCOMING) { return(streamIn); } else { return(streamOut); } }