7 from dbus
.mainloop
.glib
import DBusGMainLoop
9 WPAS_DBUS_SERVICE
= "fi.w1.wpa_supplicant1"
10 WPAS_DBUS_INTERFACE
= "fi.w1.wpa_supplicant1"
11 WPAS_DBUS_OPATH
= "/fi/w1/wpa_supplicant1"
13 WPAS_DBUS_INTERFACES_INTERFACE
= "fi.w1.wpa_supplicant1.Interface"
14 WPAS_DBUS_INTERFACES_OPATH
= "/fi/w1/wpa_supplicant1/Interfaces"
15 WPAS_DBUS_BSS_INTERFACE
= "fi.w1.wpa_supplicant1.Interface.BSS"
17 def byte_array_to_string(s
):
21 if c
>= 32 and c
< 127:
24 r
+= urllib
.quote(chr(c
))
27 def list_interfaces(wpas_obj
):
28 ifaces
= wpas_obj
.Interfaces
32 def stateChanged(newState
, oldState
):
33 print "StateChanged(%s -> %s)" % (oldState
, newState
)
36 net_obj
= bus
.get_object(WPAS_DBUS_SERVICE
, bss
)
37 net
= dbus
.Interface(net_obj
, WPAS_DBUS_BSS_INTERFACE
)
39 # Convert the byte-array for SSID and BSSID to printable strings
40 val
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'BSSID',
41 dbus_interface
=dbus
.PROPERTIES_IFACE
)
44 bssid
= bssid
+ ":%02x" % item
46 val
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'SSID',
47 dbus_interface
=dbus
.PROPERTIES_IFACE
)
48 ssid
= byte_array_to_string(val
)
50 val
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'WPAIE',
51 dbus_interface
=dbus
.PROPERTIES_IFACE
)
55 val
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'RSNIE',
56 dbus_interface
=dbus
.PROPERTIES_IFACE
)
60 freq
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'Frequency',
61 dbus_interface
=dbus
.PROPERTIES_IFACE
)
62 signal
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'Signal',
63 dbus_interface
=dbus
.PROPERTIES_IFACE
)
64 val
= net_obj
.Get(WPAS_DBUS_BSS_INTERFACE
, 'MaxRate',
65 dbus_interface
=dbus
.PROPERTIES_IFACE
)
66 maxrate
= val
/ 1000000
68 print " %s :: ssid='%s' wpa=%s wpa2=%s signal=%d rate=%d freq=%d" % (bssid
, ssid
, wpa
, wpa2
, signal
, maxrate
, freq
)
70 def scanDone(success
):
71 gobject
.MainLoop().quit()
72 print "Scan done: success=%s" % success
74 res
= if_obj
.Get(WPAS_DBUS_INTERFACES_INTERFACE
, 'BSSs',
75 dbus_interface
=dbus
.PROPERTIES_IFACE
)
77 print "Scanned wireless networks:"
82 def bssAdded(bss
, properties
):
83 print "BSS added: %s" % (bss
)
87 print "BSS removed: %s" % (bss
)
90 dbus
.mainloop
.glib
.DBusGMainLoop(set_as_default
=True)
92 bus
= dbus
.SystemBus()
93 wpas_obj
= bus
.get_object(WPAS_DBUS_SERVICE
, WPAS_DBUS_OPATH
)
94 wpas
= dbus
.Interface(wpas_obj
, WPAS_DBUS_INTERFACE
)
95 bus
.add_signal_receiver(scanDone
,
96 dbus_interface
=WPAS_DBUS_INTERFACES_INTERFACE
,
97 signal_name
="ScanDone")
98 bus
.add_signal_receiver(bssAdded
,
99 dbus_interface
=WPAS_DBUS_INTERFACES_INTERFACE
,
100 signal_name
="BSSAdded")
101 bus
.add_signal_receiver(bssRemoved
,
102 dbus_interface
=WPAS_DBUS_INTERFACES_INTERFACE
,
103 signal_name
="BSSRemoved")
104 bus
.add_signal_receiver(stateChanged
,
105 dbus_interface
=WPAS_DBUS_INTERFACES_INTERFACE
,
106 signal_name
="StateChanged")
108 if len(sys
.argv
) != 2:
109 list_interfaces(wpas_obj
)
114 # See if wpa_supplicant already knows about this interface
117 path
= wpas
.GetInterface(ifname
)
118 except dbus
.DBusException
, exc
:
119 if not str(exc
).startswith("fi.w1.wpa_supplicant1.InterfaceUnknown:"):
122 path
= wpas
.CreateInterface({'Ifname': ifname
, 'Driver': 'test'})
125 except dbus
.DBusException
, exc
:
126 if not str(exc
).startswith("fi.w1.wpa_supplicant1.InterfaceExists:"):
130 if_obj
= bus
.get_object(WPAS_DBUS_SERVICE
, path
)
132 iface
= dbus
.Interface(if_obj
, WPAS_DBUS_INTERFACES_INTERFACE
)
133 iface
.Scan({'Type': 'active'})
135 gobject
.MainLoop().run()
137 wpas
.RemoveInterface(dbus
.ObjectPath(path
))
139 if __name__
== "__main__":