package com.netifera.platform.net.internal.sniffing.managers;
import com.netifera.platform.net.packets.IPacketHeader;
import com.netifera.platform.net.packets.link.ARP;
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 ArpManager extends AbstractPacketManager<ARP>{
private final IPacketSnifferHandle<IPacketHeader> packetHandle;
private final IPacketFilter filter = null;
public ArpManager(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) {
ARP arp = (ARP) packet.findHeader(ARP.class);
if(arp != null) {
deliverPacket(arp, ctx);
}
}
@Override
protected boolean start() {
packetHandle.register();
return true;
}
@Override
protected void stop() {
packetHandle.unregister();
}
}