/** Method to set the time on graph panel. */ private synchronized void setTimeLineLinkedComponents( double timeStamp, double dTimeRangeInterval) { if (analysisData != null) { boolean bTCPTimeStampFound = false; boolean bExactMatch = false; // Do exact match of dTimeInterval == 0.0; // If dTimeInterval < 0.0, don't try to match up with the TCP_Flow // or packets when click comes from graph or video if (dTimeRangeInterval == 0.0) { bExactMatch = true; } else if (dTimeRangeInterval < 0.0) { repaint(); return; } // Attempt to find corresponding packet for time. double packetTimeStamp = 0.0; double packetTimeStampDiff = 0.0; double previousPacketTimeStampDiff = 9999.0; TCPSession bestMatchingTcpSession = null; PacketInfo bestMatchingPacketInfo = null; for (TCPSession tcpSess : analysisData.getTcpSessions()) { PacketInfo packetInfo = getBestMatchingPacketInTcpSession(tcpSess, bExactMatch, timeStamp, dTimeRangeInterval); if (packetInfo != null) { packetTimeStamp = packetInfo.getTimeStamp(); packetTimeStampDiff = timeStamp - packetTimeStamp; if (packetTimeStampDiff < 0.0) { packetTimeStampDiff *= -1.0; } if (packetTimeStampDiff < previousPacketTimeStampDiff) { bestMatchingTcpSession = tcpSess; bestMatchingPacketInfo = packetInfo; bTCPTimeStampFound = true; } } } if (bTCPTimeStampFound) { getJTCPFlowsTable().selectItem(bestMatchingTcpSession); jPacketViewTable.selectItem(bestMatchingPacketInfo); jPacketViewTable.setGridColor(Color.LIGHT_GRAY); if (bestMatchingPacketInfo != null) { jHttpReqResPanel.select(bestMatchingPacketInfo.getRequestResponseInfo()); } else { jHttpReqResPanel.select(null); } } else { getJTCPFlowsTable().selectItem(null); jPacketViewTable.selectItem(null); jHttpReqResPanel.select(null); if (aroVideoPlayer != null) { aroVideoPlayer.setMediaDisplayTime(graphPanel.getCrosshair()); } } } }
/** Provides the Best matching packet info from the provided tcp session. */ private PacketInfo getBestMatchingPacketInTcpSession( TCPSession tcpSession, boolean bExactMatch, double timeStamp, double dTimeRangeInterval) { // Try to eliminate session before iterating through packets if (tcpSession.getSessionStartTime() > timeStamp || tcpSession.getSessionEndTime() < timeStamp) { return null; } double packetTimeStamp = 0.0; PacketInfo matchedPacket = null; for (PacketInfo p : tcpSession.getPackets()) { packetTimeStamp = p.getTimeStamp(); if ((bExactMatch && (packetTimeStamp == timeStamp)) || ((packetTimeStamp >= (timeStamp - dTimeRangeInterval)) && (packetTimeStamp <= (timeStamp + dTimeRangeInterval)))) { matchedPacket = p; } } return matchedPacket; }