18dbcf02cSchristos#!/usr/bin/python 28dbcf02cSchristos 38dbcf02cSchristosimport dbus 48dbcf02cSchristosimport sys, os 58dbcf02cSchristosimport time 68dbcf02cSchristosimport gobject 78dbcf02cSchristosfrom dbus.mainloop.glib import DBusGMainLoop 88dbcf02cSchristos 98dbcf02cSchristosWPAS_DBUS_SERVICE = "fi.w1.wpa_supplicant1" 108dbcf02cSchristosWPAS_DBUS_INTERFACE = "fi.w1.wpa_supplicant1" 118dbcf02cSchristosWPAS_DBUS_OPATH = "/fi/w1/wpa_supplicant1" 128dbcf02cSchristos 138dbcf02cSchristosWPAS_DBUS_INTERFACES_INTERFACE = "fi.w1.wpa_supplicant1.Interface" 148dbcf02cSchristosWPAS_DBUS_WPS_INTERFACE = "fi.w1.wpa_supplicant1.Interface.WPS" 158dbcf02cSchristos 168dbcf02cSchristosdef propertiesChanged(properties): 178dbcf02cSchristos if properties.has_key("State"): 18*3d6c0713Schristos print("PropertiesChanged: State: %s" % (properties["State"])) 198dbcf02cSchristos 208dbcf02cSchristosdef scanDone(success): 21*3d6c0713Schristos print("Scan done: success=%s" % success) 228dbcf02cSchristos 238dbcf02cSchristosdef bssAdded(bss, properties): 24*3d6c0713Schristos print("BSS added: %s" % (bss)) 258dbcf02cSchristos 268dbcf02cSchristosdef bssRemoved(bss): 27*3d6c0713Schristos print("BSS removed: %s" % (bss)) 288dbcf02cSchristos 298dbcf02cSchristosdef wpsEvent(name, args): 30*3d6c0713Schristos print("WPS event: %s" % (name)) 31*3d6c0713Schristos print(args) 328dbcf02cSchristos 338dbcf02cSchristosdef credentials(cred): 34*3d6c0713Schristos print("WPS credentials: %s" % (cred)) 358dbcf02cSchristos 368dbcf02cSchristosdef main(): 378dbcf02cSchristos dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 388dbcf02cSchristos global bus 398dbcf02cSchristos bus = dbus.SystemBus() 408dbcf02cSchristos wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH) 418dbcf02cSchristos 428dbcf02cSchristos if len(sys.argv) != 2: 43*3d6c0713Schristos print("Missing ifname argument") 448dbcf02cSchristos os._exit(1) 458dbcf02cSchristos 468dbcf02cSchristos wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE) 478dbcf02cSchristos bus.add_signal_receiver(scanDone, 488dbcf02cSchristos dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 498dbcf02cSchristos signal_name="ScanDone") 508dbcf02cSchristos bus.add_signal_receiver(bssAdded, 518dbcf02cSchristos dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 528dbcf02cSchristos signal_name="BSSAdded") 538dbcf02cSchristos bus.add_signal_receiver(bssRemoved, 548dbcf02cSchristos dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 558dbcf02cSchristos signal_name="BSSRemoved") 568dbcf02cSchristos bus.add_signal_receiver(propertiesChanged, 578dbcf02cSchristos dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, 588dbcf02cSchristos signal_name="PropertiesChanged") 598dbcf02cSchristos bus.add_signal_receiver(wpsEvent, 608dbcf02cSchristos dbus_interface=WPAS_DBUS_WPS_INTERFACE, 618dbcf02cSchristos signal_name="Event") 628dbcf02cSchristos bus.add_signal_receiver(credentials, 638dbcf02cSchristos dbus_interface=WPAS_DBUS_WPS_INTERFACE, 648dbcf02cSchristos signal_name="Credentials") 658dbcf02cSchristos 668dbcf02cSchristos ifname = sys.argv[1] 678dbcf02cSchristos 688dbcf02cSchristos path = wpas.GetInterface(ifname) 698dbcf02cSchristos if_obj = bus.get_object(WPAS_DBUS_SERVICE, path) 708dbcf02cSchristos if_obj.Set(WPAS_DBUS_WPS_INTERFACE, 'ProcessCredentials', 718dbcf02cSchristos dbus.Boolean(1), 728dbcf02cSchristos dbus_interface=dbus.PROPERTIES_IFACE) 738dbcf02cSchristos wps = dbus.Interface(if_obj, WPAS_DBUS_WPS_INTERFACE) 748dbcf02cSchristos wps.Start({'Role': 'enrollee', 'Type': 'pbc'}) 758dbcf02cSchristos 768dbcf02cSchristos gobject.MainLoop().run() 778dbcf02cSchristos 788dbcf02cSchristosif __name__ == "__main__": 798dbcf02cSchristos main() 808dbcf02cSchristos 81