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