invoke TrafficLabeler from Main.java (ignoring results for now)
[pingpong.git] / Code / Projects / SmartPlugDetector / src / main / java / edu / uci / iotproject / analysis / TriggerTrafficExtractor.java
index aa48e8722536193f45a8f04953b64f56988e1431..594fa2b02b834b1ad927f36ad6a3edd2c19f1a63 100644 (file)
@@ -21,6 +21,10 @@ 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;
 
     public static final int INCLUSION_WINDOW_MILLIS = 20_000;
 
@@ -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?