package net.decix.jipfix.detector; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.HashMap; import java.util.logging.Logger; import net.decix.jipfix.header.DataRecord; import net.decix.jipfix.header.L2IPDataRecord; import net.decix.jipfix.header.MessageHeader; import net.decix.jipfix.header.SetHeader; public class GroupMissingDataRecordDetector implements MissingDataRecordDetector { private final static Logger LOGGER = Logger.getLogger(GroupMissingDataRecordDetector.class.getName()); private HashMap<IPObservationDomain, GroupMissingSequenceNumberChecker> sequenceNumberCheckers = new HashMap<IPObservationDomain, GroupMissingSequenceNumberChecker>(); public synchronized void detectMissing(DatagramPacket dp, MessageHeader mh) { // handle sequence number check IPObservationDomain currentIPObservationDomain = new IPObservationDomain(dp.getAddress(), mh.getObservationDomainID()); GroupMissingSequenceNumberChecker gmsnc = new GroupMissingSequenceNumberChecker(currentIPObservationDomain); try { if (currentIPObservationDomain.getAddress().equals(InetAddress.getByName("10.102.0.16")) && (currentIPObservationDomain.getObservationDomain() == 100663296)) { if (sequenceNumberCheckers.containsKey(currentIPObservationDomain)) { gmsnc = sequenceNumberCheckers.get(currentIPObservationDomain); } else { sequenceNumberCheckers.put(currentIPObservationDomain, gmsnc); } long numberDataRecords = 0; for (SetHeader sh : mh.getSetHeaders()) { for (DataRecord dr : sh.getDataRecords()) { if (dr instanceof L2IPDataRecord) numberDataRecords++; } } for (int i = 0; i < numberDataRecords; i++) { gmsnc.addSequenceNumber(mh.getSequenceNumber() + i); } } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }