package com.netifera.platform.net.wifi.ui.toolbar; import java.util.Collection; import org.eclipse.jface.action.Action; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.netifera.platform.api.model.ISpace; import com.netifera.platform.net.pcap.ICaptureInterface; import com.netifera.platform.net.wifi.pcap.IWirelessCaptureInterface; import com.netifera.platform.net.wifi.sniffing.IWifiSniffingDaemon; import com.netifera.platform.net.wifi.ui.Activator; public class StartWifiSnifferAction extends Action { public final static String ID = "start-wifi-action"; private final WifiToolbar toolbar; StartWifiSnifferAction(WifiToolbar toolbar) { setId(ID); this.toolbar = toolbar; setToolTipText("Start Wireless Sniffer"); setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/start_16x16.png")); } public void run() { final ISpace space = Activator.getDefault().getCurrentSpace(); if(space == null) return; final IWifiSniffingDaemon daemon = Activator.getDefault().getWifiDaemon(); if(daemon == null) { toolbar.setFailed("No wireless service found"); return; } if(!hasInterfacesAvailable(daemon)) { toolbar.asynchSetState(); return; } new Thread(new Runnable() { public void run() { daemon.start(space.getId()); toolbar.asynchSetState(); } }).start(); } private boolean hasInterfacesAvailable(IWifiSniffingDaemon daemon) { final Collection<IWirelessCaptureInterface> interfaces = daemon.getWirelessInterfaces(); if(interfaces.isEmpty()) return false; return hasEnabledInterfaces(interfaces); } private boolean hasEnabledInterfaces( Collection<IWirelessCaptureInterface> interfaces) { for(ICaptureInterface iface : interfaces) { if(iface.captureAvailable()) return true; } return false; } }