X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Code%2FProjects%2FSmartPlugDetector%2Fsrc%2Fmain%2Fjava%2Fedu%2Fuci%2Fiotproject%2Fanalysis%2FTriggerTrafficExtractor.java;h=0a22d63f09714e4323d2ea3a829a9cf0ed7a97d9;hb=37f2fce70e1b996c21c579b165e84a164d1d96ed;hp=26276b17ca33797c864a6c97433ad30be49fe4e4;hpb=4f7f63825ee1eda154c483da89a72400c988efd6;p=pingpong.git diff --git a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/TriggerTrafficExtractor.java b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/TriggerTrafficExtractor.java index 26276b1..0a22d63 100644 --- a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/TriggerTrafficExtractor.java +++ b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/analysis/TriggerTrafficExtractor.java @@ -21,8 +21,12 @@ public class TriggerTrafficExtractor implements PcapPacketFilter { private int mTriggerIndex = 0; + /** + * The total number of packets marked for inclusion during one run of {@link #performExtraction(PacketListener...)}. + */ + private long mIncludedPackets = 0; - private static final int INCLUSION_WINDOW_MILLIS = 20_000; + public static final int INCLUSION_WINDOW_MILLIS = 15_000; public TriggerTrafficExtractor(String pcapFilePath, List triggerTimes, String deviceIp) throws PcapNativeException, NotOpenException { mPcapFilePath = pcapFilePath; @@ -39,6 +43,9 @@ public class TriggerTrafficExtractor implements PcapPacketFilter { public void performExtraction(PacketListener... extractedPacketsConsumers) throws PcapNativeException, NotOpenException, TimeoutException { + // Reset trigger index and packet counter in case client code chooses to rerun the extraction. + mTriggerIndex = 0; + mIncludedPackets = 0; PcapHandle handle; try { handle = Pcaps.openOffline(mPcapFilePath, PcapHandle.TimestampPrecision.NANO); @@ -49,18 +56,32 @@ public class TriggerTrafficExtractor implements PcapPacketFilter { handle.setFilter("ip host " + mDeviceIp, BpfProgram.BpfCompileMode.OPTIMIZE); PcapHandleReader pcapReader = new PcapHandleReader(handle, this, extractedPacketsConsumers); pcapReader.readFromHandle(); - // Reset trigger index (in case client code chooses to rerun the extraction) - mTriggerIndex = 0; + + } + + /** + * Return the number of extracted packets (i.e., packets selected for inclusion) as a result of the most recent call + * to {@link #performExtraction(PacketListener...)}. + * + * @return the number of extracted packets (i.e., packets selected for inclusion) as a result of the most recent + * call to {@link #performExtraction(PacketListener...)}. + */ + public long getPacketsIncludedCount() { + return mIncludedPackets; } @Override public boolean shouldIncludePacket(PcapPacket packet) { // New version. Simpler, but slower: the later a packet arrives, the more elements of mTriggerTimes will need to // be traversed. - return mTriggerTimes.stream().anyMatch( + boolean include = mTriggerTimes.stream().anyMatch( trigger -> trigger.isBefore(packet.getTimestamp()) && packet.getTimestamp().isBefore(trigger.plusMillis(INCLUSION_WINDOW_MILLIS)) ); + if (include) { + mIncludedPackets++; + } + return include; /* // Old version. Faster, but more complex - is it correct?