From 0c5b577d52fc65c1c38bb84798bfd2421f9d726b Mon Sep 17 00:00:00 2001 From: Janus Varmarken Date: Tue, 17 Jul 2018 18:54:51 -0700 Subject: [PATCH] PcapReader: provide parameter for specifying a Berkeley Packet Filter --- .../main/java/edu/uci/iotproject/PcapReader.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/PcapReader.java b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/PcapReader.java index c8106b2..bf618eb 100644 --- a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/PcapReader.java +++ b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/PcapReader.java @@ -20,15 +20,24 @@ public class PcapReader { /** * Create a new {@code PcapReader} that reads the file specified by the absolute path {@code fileName}. * @param fileName The absolute path to the pcap file to be read. - * @throws PcapNativeException If the pcap file cannot be opened. + * @param berkeleyPacketFilter A Berkeley Packet Filter to be applied when reading the PCAP file to filter out + * unwanted packets immediately. May be {@code null} if no filter is to be applied. + * @throws PcapNativeException If an error occurs in the pcap native library. + * @throws NotOpenException If the pcap file cannot be opened. */ - public PcapReader(String fileName) throws PcapNativeException { + public PcapReader(String fileName, String berkeleyPacketFilter) throws PcapNativeException, NotOpenException { PcapHandle handle; try { handle = Pcaps.openOffline(fileName, PcapHandle.TimestampPrecision.NANO); } catch (PcapNativeException pne) { handle = Pcaps.openOffline(fileName); } + if(!handle.isOpen()) { + throw new NotOpenException("could not open pcap file " + fileName); + } + if (berkeleyPacketFilter != null) { + handle.setFilter(berkeleyPacketFilter, BpfProgram.BpfCompileMode.OPTIMIZE); + } mHandle = handle; } -- 2.34.1