GIF89a;
Direktori : /usr/share/doc/wpa_supplicant-2.6/examples/ |
Current File : //usr/share/doc/wpa_supplicant-2.6/examples/wpas-dbus-new-signals.py |
#!/usr/bin/python import dbus import sys, os import time import gobject from dbus.mainloop.glib import DBusGMainLoop WPAS_DBUS_SERVICE = "fi.w1.wpa_supplicant1" WPAS_DBUS_INTERFACE = "fi.w1.wpa_supplicant1" WPAS_DBUS_OPATH = "/fi/w1/wpa_supplicant1" WPAS_DBUS_INTERFACES_INTERFACE = "fi.w1.wpa_supplicant1.Interface" WPAS_DBUS_INTERFACES_OPATH = "/fi/w1/wpa_supplicant1/Interfaces" WPAS_DBUS_BSS_INTERFACE = "fi.w1.wpa_supplicant1.BSS" WPAS_DBUS_NETWORK_INTERFACE = "fi.w1.wpa_supplicant1.Network" def byte_array_to_string(s): import urllib r = "" for c in s: if c >= 32 and c < 127: r += "%c" % c else: r += urllib.quote(chr(c)) return r def list_interfaces(wpas_obj): ifaces = wpas_obj.Get(WPAS_DBUS_INTERFACE, 'Interfaces', dbus_interface=dbus.PROPERTIES_IFACE) for path in ifaces: if_obj = bus.get_object(WPAS_DBUS_SERVICE, path) ifname = if_obj.Get(WPAS_DBUS_INTERFACES_INTERFACE, 'Ifname', dbus_interface=dbus.PROPERTIES_IFACE) print ifname def interfaceAdded(interface, properties): print "InterfaceAdded(%s): Ifname=%s" % (interface, properties['Ifname']) def interfaceRemoved(interface): print "InterfaceRemoved(%s)" % (interface) def propertiesChanged(properties): for i in properties: print "PropertiesChanged: %s=%s" % (i, properties[i]) def showBss(bss): net_obj = bus.get_object(WPAS_DBUS_SERVICE, bss) net = dbus.Interface(net_obj, WPAS_DBUS_BSS_INTERFACE) # Convert the byte-array for SSID and BSSID to printable strings val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'BSSID', dbus_interface=dbus.PROPERTIES_IFACE) bssid = "" for item in val: bssid = bssid + ":%02x" % item bssid = bssid[1:] val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'SSID', dbus_interface=dbus.PROPERTIES_IFACE) ssid = byte_array_to_string(val) val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'WPA', dbus_interface=dbus.PROPERTIES_IFACE) wpa = "no" if val != None: wpa = "yes" val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'RSN', dbus_interface=dbus.PROPERTIES_IFACE) wpa2 = "no" if val != None: wpa2 = "yes" freq = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'Frequency', dbus_interface=dbus.PROPERTIES_IFACE) signal = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'Signal', dbus_interface=dbus.PROPERTIES_IFACE) val = net_obj.Get(WPAS_DBUS_BSS_INTERFACE, 'Rates', dbus_interface=dbus.PROPERTIES_IFACE) if len(val) > 0: maxrate = val[0] / 1000000 else: maxrate = 0 print " %s :: ssid='%s' wpa=%s wpa2=%s signal=%d rate=%d freq=%d" % (bssid, ssid, wpa, wpa2, signal, maxrate, freq) def scanDone(success): gobject.MainLoop().quit() print "Scan done: success=%s" % success def scanDone2(success, path=None): print "Scan done: success=%s [path=%s]" % (success, path) def bssAdded(bss, properties): print "BSS added: %s" % (bss) showBss(bss) def bssRemoved(bss): print "BSS removed: %s" % (bss) def blobAdded(blob): print "BlobAdded(%s)" % (blob) def blobRemoved(blob): print "BlobRemoved(%s)" % (blob) def networkAdded(network, properties): print "NetworkAdded(%s)" % (network) def networkRemoved(network): print "NetworkRemoved(%s)" % (network) def networkSelected(network): print "NetworkSelected(%s)" % (network) def propertiesChangedInterface(properties): for i in properties: print "PropertiesChanged(interface): %s=%s" % (i, properties[i]) def propertiesChangedBss(properties): for i in properties: print "PropertiesChanged(BSS): %s=%s" % (i, properties[i]) def propertiesChangedNetwork(properties): for i in properties: print "PropertiesChanged(Network): %s=%s" % (i, properties[i]) def main(): dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) global bus bus = dbus.SystemBus() wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_OPATH) if len(sys.argv) != 2: list_interfaces(wpas_obj) os._exit(1) wpas = dbus.Interface(wpas_obj, WPAS_DBUS_INTERFACE) bus.add_signal_receiver(interfaceAdded, dbus_interface=WPAS_DBUS_INTERFACE, signal_name="InterfaceAdded") bus.add_signal_receiver(interfaceRemoved, dbus_interface=WPAS_DBUS_INTERFACE, signal_name="InterfaceRemoved") bus.add_signal_receiver(propertiesChanged, dbus_interface=WPAS_DBUS_INTERFACE, signal_name="PropertiesChanged") ifname = sys.argv[1] path = wpas.GetInterface(ifname) if_obj = bus.get_object(WPAS_DBUS_SERVICE, path) iface = dbus.Interface(if_obj, WPAS_DBUS_INTERFACES_INTERFACE) iface.connect_to_signal("ScanDone", scanDone2, path_keyword='path') bus.add_signal_receiver(scanDone, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="ScanDone", path=path) bus.add_signal_receiver(bssAdded, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="BSSAdded", path=path) bus.add_signal_receiver(bssRemoved, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="BSSRemoved", path=path) bus.add_signal_receiver(blobAdded, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="BlobAdded", path=path) bus.add_signal_receiver(blobRemoved, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="BlobRemoved", path=path) bus.add_signal_receiver(networkAdded, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="NetworkAdded", path=path) bus.add_signal_receiver(networkRemoved, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="NetworkRemoved", path=path) bus.add_signal_receiver(networkSelected, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="NetworkSelected", path=path) bus.add_signal_receiver(propertiesChangedInterface, dbus_interface=WPAS_DBUS_INTERFACES_INTERFACE, signal_name="PropertiesChanged", path=path) bus.add_signal_receiver(propertiesChangedBss, dbus_interface=WPAS_DBUS_BSS_INTERFACE, signal_name="PropertiesChanged") bus.add_signal_receiver(propertiesChangedNetwork, dbus_interface=WPAS_DBUS_NETWORK_INTERFACE, signal_name="PropertiesChanged") gobject.MainLoop().run() if __name__ == "__main__": main()