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