package com.netifera.platform.net.internal.sniffing.managers;
import com.netifera.platform.net.packets.IPacketHeader;
import com.netifera.platform.net.packets.tcpip.IPv4;
import com.netifera.platform.net.sniffing.IPacketContext;
import com.netifera.platform.net.sniffing.IPacketFilter;
import com.netifera.platform.net.sniffing.IPacketSniffer;
import com.netifera.platform.net.sniffing.IPacketSnifferHandle;
import com.netifera.platform.net.sniffing.util.AbstractPacketManager;
public class IPv4Manager extends AbstractPacketManager<IPv4> {
private final IPacketSnifferHandle<IPacketHeader> packetHandle;
private final IPacketFilter filter = null;
public IPv4Manager(IPacketManager<IPacketHeader> packetManager) {
super(packetManager.getSniffingEngine(), packetManager.getInterface());
packetHandle = new SnifferHandle<IPacketHeader>(packetManager, filter,
new IPacketSniffer<IPacketHeader>() {
public void handlePacket(IPacketHeader packet,
IPacketContext ctx) {
handleRaw(packet, ctx);
}
});
}
private void handleRaw(IPacketHeader packet, IPacketContext ctx) {
IPv4 ip = (IPv4) packet.findHeader(IPv4.class);
if(ip != null) {
deliverPacket(ip, ctx);
}
}
@Override
protected boolean start() {
packetHandle.register();
return true;
}
@Override
protected void stop() {
packetHandle.unregister();
}
}