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