97461023001ed29a62d4d8e70d9fe171f78efae5
[pingpong.git] / Code / Projects / SmartPlugDetector / src / main / java / edu / uci / iotproject / analysis / PcapProcessingPipeline.java
1 package edu.uci.iotproject.analysis;
2
3 import edu.uci.iotproject.PcapPacketConsumer;
4 import edu.uci.iotproject.PcapReader;
5 import org.pcap4j.core.PcapPacket;
6
7 import java.util.ArrayList;
8 import java.util.List;
9
10 /**
11  * TODO add class documentation.
12  *
13  * @author Janus Varmarken {@literal <jvarmark@uci.edu>}
14  * @author Rahmadi Trimananda {@literal <rtrimana@uci.edu>}
15  */
16 public class PcapProcessingPipeline {
17
18     private final PcapReader mPcapReader;
19     private final List<PcapPacketConsumer> mPacketConsumers;
20     private final PcapPacketFilter mPacketFilter;
21
22     public PcapProcessingPipeline(PcapReader pcapReader, PcapPacketFilter packetFilter) {
23         mPcapReader = pcapReader;
24         mPacketConsumers = new ArrayList<>();
25         mPacketFilter = packetFilter;
26     }
27
28     public void addPcapPacketConsumer(PcapPacketConsumer packetConsumer) {
29         mPacketConsumers.add(packetConsumer);
30     }
31
32     public void executePipeline() {
33         PcapPacket packet;
34         long count = 0;
35         while ((packet = mPcapReader.readNextPacket()) != null) {
36             if (mPacketFilter != null && !mPacketFilter.shouldIncludePacket(packet)) {
37                 continue;
38             }
39             for (PcapPacketConsumer consumer : mPacketConsumers) {
40                 consumer.consumePacket(packet);
41             }
42             count++;
43             if (count % 1000 == 0) {
44                 System.out.println("Processed " + count + " packets");
45             }
46         }
47     }
48
49 }