package com.netifera.platform.net.daemon.sniffing.ui; import java.util.Collection; import org.eclipse.jface.action.Action; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.netifera.platform.api.model.ISpace; import com.netifera.platform.net.daemon.sniffing.ISniffingDaemon; import com.netifera.platform.net.pcap.ICaptureInterface; /** * An action for starting sniffing daemon. * * @see com.netifera.platform.net.daemon.sniffing.ISniffingDaemon * * */ public class StartSnifferAction extends Action { public final static String ID = "start-sniffing-action"; private final SniffingActionManager manager; StartSnifferAction(SniffingActionManager manager) { setId(ID); this.manager = manager; setToolTipText("Start Sniffing Service"); setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/start_16x16.png")); } public void run() { final ISpace space = Activator.getDefault().getCurrentSpace(); if(space == null) { return; } final ISniffingDaemon daemon = Activator.getDefault().getSniffingDaemon(); if(daemon == null) { manager.setFailed("No sniffing service found"); return; } if(!hasInterfacesAvailable(daemon)) { manager.setState(); return; } new Thread(new Runnable() { public void run() { daemon.start(space.getId()); Display.getDefault().asyncExec(new Runnable() { public void run() { manager.setState(); } }); } }).start(); } private boolean hasInterfacesAvailable(ISniffingDaemon daemon) { final Collection<ICaptureInterface> interfaces = daemon.getInterfaces(); if(interfaces.isEmpty()) { return false; } return hasEnabledInterface(interfaces); } private boolean hasEnabledInterface(Collection<ICaptureInterface> interfaces) { for(ICaptureInterface iface : interfaces) { if(iface.captureAvailable()) return true; } return false; } }