package com.netifera.platform.net.wifi.internal.sniffing.daemon;
import java.util.Collection;
import java.util.Set;
import com.netifera.platform.api.dispatcher.DispatchException;
import com.netifera.platform.api.dispatcher.DispatchMismatchException;
import com.netifera.platform.api.dispatcher.IMessageDispatcher;
import com.netifera.platform.api.dispatcher.IMessageDispatcherService;
import com.netifera.platform.api.dispatcher.IMessageHandler;
import com.netifera.platform.api.dispatcher.IMessenger;
import com.netifera.platform.api.dispatcher.IProbeMessage;
import com.netifera.platform.api.dispatcher.MessengerException;
import com.netifera.platform.api.log.ILogManager;
import com.netifera.platform.api.log.ILogger;
import com.netifera.platform.api.probe.IProbeManagerService;
import com.netifera.platform.net.daemon.sniffing.ISniffingDaemonEx;
import com.netifera.platform.net.daemon.sniffing.ISniffingModule;
import com.netifera.platform.net.daemon.sniffing.model.ISniffingEntityFactory;
import com.netifera.platform.net.pcap.ICaptureInterface;
import com.netifera.platform.net.sniffing.ICaptureFileInterface;
import com.netifera.platform.net.sniffing.util.ICaptureFileProgress;
import com.netifera.platform.net.wifi.internal.sniffing.daemon.probe.RequestWirelessInterfaceInformation;
import com.netifera.platform.net.wifi.internal.sniffing.daemon.probe.RequestWirelessModuleInformation;
import com.netifera.platform.net.wifi.internal.sniffing.daemon.probe.SetWirelessInterfaceEnableState;
import com.netifera.platform.net.wifi.internal.sniffing.daemon.probe.StartWifiSniffer;
import com.netifera.platform.net.wifi.internal.sniffing.daemon.probe.StopWifiSniffer;
import com.netifera.platform.net.wifi.sniffing.IWifiSniffingEngine;
abstract public class AbstractWifiSniffingDaemon {
protected ILogger logger;
protected IWifiSniffingEngine wirelessSniffingEngine;
protected ISniffingEntityFactory sniffingEntityFactory;
protected IProbeManagerService probeManager;
protected ISniffingDaemonEx sniffingDaemon;
abstract protected void requestInterfaceInformation(IMessenger messenger, RequestWirelessInterfaceInformation message) throws MessengerException;
abstract protected void startWifiSniffer(IMessenger messenger, StartWifiSniffer message) throws MessengerException;
abstract protected void stopWifiSniffer(IMessenger messenger, StopWifiSniffer message) throws MessengerException;
abstract protected void setWirelessInterfaceEnableState(IMessenger messenger, SetWirelessInterfaceEnableState message) throws MessengerException;
abstract protected void requestModuleInformation(IMessenger messenger, RequestWirelessModuleInformation message) throws MessengerException;
abstract protected void setWirelessModuleEnableState(IMessenger messenger, SetWirelessModuleEnableState message) throws MessengerException;
private void registerHandlers(IMessageDispatcher dispatcher) {
final IMessageHandler handler = new IMessageHandler() {
public void call(IMessenger messenger, IProbeMessage message)
throws DispatchException {
try {
dispatch(messenger, message);
} catch(MessengerException e) {
logger.warning("Error sending message response " + e.getMessage());
}
}
};
dispatcher.registerMessageHandler(RequestWirelessInterfaceInformation.ID, handler);
dispatcher.registerMessageHandler(StartWifiSniffer.ID, handler);
dispatcher.registerMessageHandler(StopWifiSniffer.ID, handler);
dispatcher.registerMessageHandler(SetWirelessInterfaceEnableState.ID, handler);
dispatcher.registerMessageHandler(RequestWirelessModuleInformation.ID, handler);
dispatcher.registerMessageHandler(SetWirelessModuleEnableState.ID, handler);
}
private void dispatch(IMessenger messenger, IProbeMessage message) throws DispatchMismatchException, MessengerException {
if(message instanceof RequestWirelessInterfaceInformation) {
requestInterfaceInformation(messenger, (RequestWirelessInterfaceInformation) message);
} else if(message instanceof StartWifiSniffer) {
startWifiSniffer(messenger, (StartWifiSniffer) message);
} else if(message instanceof StopWifiSniffer) {
stopWifiSniffer(messenger, (StopWifiSniffer) message);
} else if(message instanceof SetWirelessInterfaceEnableState) {
setWirelessInterfaceEnableState(messenger, (SetWirelessInterfaceEnableState) message);
} else if(message instanceof RequestWirelessModuleInformation) {
requestModuleInformation(messenger, (RequestWirelessModuleInformation) message);
} else if(message instanceof SetWirelessModuleEnableState) {
setWirelessModuleEnableState(messenger, (SetWirelessModuleEnableState) message);
}
else {
throw new DispatchMismatchException(message);
}
}
protected void setDispatcher(IMessageDispatcherService dispatcher) {
registerHandlers(dispatcher.getServerDispatcher());
}
protected void unsetDispatcher(IMessageDispatcherService dispatcher) {
}
protected void setLogManager(ILogManager logManager) {
logger = logManager.getLogger("Wireless Probe Module");
}
protected void unsetLogManager(ILogManager logManager) {
}
protected void setSniffingEntityFactory(ISniffingEntityFactory factory) {
sniffingEntityFactory = factory;
}
protected void unsetSniffingEntityFactory(ISniffingEntityFactory factory) {
}
protected void setProbeManager(IProbeManagerService manager) {
probeManager = manager;
}
protected void unsetProbeManager(IProbeManagerService manager) {
}
protected void setSniffingDaemon(ISniffingDaemonEx daemon) {
sniffingDaemon = daemon;
}
protected void unsetSniffingDaemon(ISniffingDaemonEx daemon) {
}
protected void setSniffingEngine(IWifiSniffingEngine engine) {
wirelessSniffingEngine = engine;
}
protected void unsetSniffingEngine(IWifiSniffingEngine engine) {
}
public void cancelCaptureFile() {
sniffingDaemon.cancelCaptureFile();
}
public ICaptureFileInterface createCaptureFileInterface(String path) {
return sniffingDaemon.createCaptureFileInterface(path);
}
public void enableInterfaces(Collection<ICaptureInterface> interfaces) {
sniffingDaemon.enableInterfaces(interfaces);
}
public void enableModules(Set<ISniffingModule> enabledModuleSet) {
sniffingDaemon.enableModules(enabledModuleSet);
}
public Collection<ICaptureInterface> getInterfaces() {
return sniffingDaemon.getInterfaces();
}
public Set<ISniffingModule> getModules() {
return sniffingDaemon.getModules();
}
public boolean isEnabled(ISniffingModule module) {
return sniffingDaemon.isEnabled(module);
}
public void runCaptureFile(long spaceId, ICaptureFileInterface iface,
ICaptureFileProgress progress) {
sniffingDaemon.runCaptureFile(spaceId, iface, progress);
}
public void setEnabled(ICaptureInterface iface, boolean enable) {
sniffingDaemon.setEnabled(iface, enable);
}
}