1 #!/usr/bin/python 2 3 import dbus 4 import sys, os 5 import time 6 import gobject 7 from dbus.mainloop.glib import DBusGMainLoop 8 9 WPAS_DBUS_SERVICE = "fi.w1.wpa_supplicant1" 10 WPAS_DBUS_INTERFACE = "fi.w1.wpa_supplicant1" 11 WPAS_DBUS_OPATH = "/fi/w1/wpa_supplicant1" 12 13 WPAS_DBUS_INTERFACES_INTERFACE = "fi.w1.wpa_supplicant1.Interface" 14 WPAS_DBUS_WPS_INTERFACE = "fi.w1.wpa_supplicant1.Interface.WPS" 15 16 def propertiesChanged(properties): 17 if properties.has_key("State"): 18 print "PropertiesChanged: State: %s" % (properties["State"]) 19 20 def scanDone(success): 21 print "Scan done: success=%s" % success 22 23 def bssAdded(bss, properties): 24 print "BSS added: %s" % (bss) 25 26 def bssRemoved(bss): 27 print "BSS removed: %s" % (bss) 28 29 def wpsEvent(name, args): 30 print "WPS event: %s" % (name) 31 print args 32 33 def credentials(cred): 34 print "WPS credentials: %s" % (cred) 35 36 def main(): 37 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 38 global bus 39 bus = dbus.SystemBus() 40 wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH) 41 42 if len(sys.argv) != 2: 43 print "Missing ifname argument" 44 os._exit(1) 45 46 wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE) 47 bus.add_signal_receiver(scanDone, 48 dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 49 signal_name="ScanDone") 50 bus.add_signal_receiver(bssAdded, 51 dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 52 signal_name="BSSAdded") 53 bus.add_signal_receiver(bssRemoved, 54 dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 55 signal_name="BSSRemoved") 56 bus.add_signal_receiver(propertiesChanged, 57 dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 58 signal_name="PropertiesChanged") 59 bus.add_signal_receiver(wpsEvent, 60 dbus_interface=WPAS_DBUS_WPS_INTERFACE, 61 signal_name="Event") 62 bus.add_signal_receiver(credentials, 63 dbus_interface=WPAS_DBUS_WPS_INTERFACE, 64 signal_name="Credentials") 65 66 ifname = sys.argv[1] 67 68 path = wpas.GetInterface(ifname) 69 if_obj = bus.get_object(WPAS_DBUS_SERVICE, path) 70 if_obj.Set(WPAS_DBUS_WPS_INTERFACE, 'ProcessCredentials', 71 dbus.Boolean(1), 72 dbus_interface=dbus.PROPERTIES_IFACE) 73 wps = dbus.Interface(if_obj, WPAS_DBUS_WPS_INTERFACE) 74 wps.Start({'Role': 'enrollee', 'Type': 'pbc'}) 75 76 gobject.MainLoop().run() 77 78 if __name__ == "__main__": 79 main() 80 81