diff options
Diffstat (limited to 'src/connections/wireless-dbus')
-rwxr-xr-x | src/connections/wireless-dbus | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/src/connections/wireless-dbus b/src/connections/wireless-dbus deleted file mode 100755 index d954577..0000000 --- a/src/connections/wireless-dbus +++ /dev/null @@ -1,137 +0,0 @@ -#! /usr/bin/env python -import sys -import dbus -import shlex -import subprocess -from signal import SIGTERM -from os import kill -from time import sleep - -# dbus constants. -WPAS_DBUS_SERVICE = "fi.epitest.hostap.WPASupplicant" -WPAS_DBUS_INTERFACE = "fi.epitest.hostap.WPASupplicant" -WPAS_DBUS_OPATH = "/fi/epitest/hostap/WPASupplicant" - -WPAS_DBUS_INTERFACES_INTERFACE = "fi.epitest.hostap.WPASupplicant.Interface" -WPAS_DBUS_INTERFACES_OPATH = "/fi/epitest/hostap/WPASupplicant/Interfaces" -WPAS_DBUS_BSSID_INTERFACE = "fi.epitest.hostap.WPASupplicant.BSSID" -WPAS_DBUS_NETWORKS_INTERFACE = "fi.epitest.hostap.WPASupplicant.Network" - -def read_config(config): - cfg = shlex.split(open(config, "r").read()) - options = {} - for line in cfg: - (var, delim, value) = line.partition('=') - if not delim: - raise SyntaxError, 'Bad configuration file' - options[var] = value - return options - -def start(profile): - # TODO: Add check if it's even a wireless interface - # Interface up... - try: - subprocess.check_call(["ifconfig", profile['INTERFACE'], "up"]) - except CalledProcessError: - print " - Could not bring interface up" - return False - - # Manually set any iwconfig options, ignoring errors - if profile.has_key('IWCONFIG'): - subprocess.call(["iwconfig", profile['INTERFACE'], profile['IWCONFIG']]) - - - # Base arguments - args=["wpa_supplicant", "-Bu", "-P/var/run/wpa_supplicant.pid"] - - try: - args.append(profile['WPA_OPTS']) - except KeyError: - args.append("-Dwext") - - if profile['SECURITY'] == "wpa-config": - try: - args.append("-c" + profile["WPA_CONF"]) - except KeyError: - args.append("-c/etc/wpa_supplicant.conf") - elif not profile['SECURITY'] in ['yes', 'wpa', 'wep']: - print " - Invalid security chosen" - return False - - # Start wpa_supplicant - supplicant = subprocess.Popen(args,stderr=subprocess.STDOUT,stdout=subprocess.PIPE) - output = supplicant.communicate()[0] - if supplicant.returncode not in [255,0]: - print output - print " - Could not start wpa_supplicant" - return False - - # Connect to wpa_supplicant - bus = dbus.SystemBus() - wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH) - wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE) - - # Add/Get interface path - try: - driver=profile["WPA_DRIVER"] - except KeyError: - driver="wext" - - try: - path = wpas.getInterface("ipw0") - except dbus.exceptions.DBusException: - path = wpas.addInterface("ipw0", {"driver":dbus.String(driver,variant_level=1)}) - - # Get interface object - if_obj = bus.get_object(WPAS_DBUS_SERVICE, path) - iface = dbus.Interface(if_obj, WPAS_DBUS_INTERFACES_INTERFACE); - - # Connect - if profile['SECURITY'] in ['wpa','yes','wep']: - # Add+select the network - path = iface.addNetwork() - net_obj = bus.get_object(WPAS_DBUS_SERVICE, path) - rnet = dbus.Interface(net_obj, WPAS_DBUS_NETWORKS_INTERFACE) - iface.selectNetwork(rnet) - # Set the options - opts = dbus.Dictionary({"ssid": dbus.ByteArray(profile['ESSID']), "psk": dbus.String(profile['KEY'])}, signature="sv") - rnet.set(opts) - - # Determine timeout - try: - timeout = profile["TIMEOUT"] - except KeyError: - timeout = 15 - - # Check for association - n=0 - while n <= timeout: - n+=1 - sleep(1) - state = iface.state() - if state == "COMPLETED": - break - - if n == timeout: - print " - Association/Authentication failed:", state - return False - - # Run ethernet and get an ip. - try: - subprocess.check_call(["/usr/lib/network/connections/ethernet", "up", sys.argv[2]]) - except CalledProcessError: - return False - return True - -def stop(profile): - subprocess.call(["/usr/lib/network/connections/ethernet", "down", sys.argv[2]]) - kill(int(open("/var/run/wpa_supplicant.pid").read()),SIGTERM) - return True - -if __name__ == "__main__": - profile = read_config("/etc/network.d/"+sys.argv[2]) - - if sys.argv[1] == "up": - sys.exit(not start(profile)) - elif sys.argv[1] == "down": - sys.exit(not stop(profile)) |