12f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley#!/usr/bin/python
22f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
32f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileyimport sys
42f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileyimport dbus
52f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileyimport flimflam
62f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
72f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileybus = dbus.SystemBus()
82f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
92f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileymanager = dbus.Interface(bus.get_object("org.chromium.flimflam", "/"),
102f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                                        "org.chromium.flimflam.Manager")
112f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
122f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileyif len(sys.argv) < 2:
132f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "Usage: %s <command>" % (sys.argv[0])
142f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print ""
152f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  state"
162f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  recheck-portal"
172f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  services"
182f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  passphrase <service> [passphrase]"
192f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  autoconnect <service> [autoconnect]"
202f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  connect <service>"
212f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  disconnect <service>"
222f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  remove <service>"
232f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print ""
242f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  scan [type]"
252f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  enable <type>"
262f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  disable <type>"
272f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  offlinemode [on|off]"
282f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print ""
292f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  dev <interface>"
302f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  dev <interface> scan"
312f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  dev <interface> networks"
322f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  dev <interface> connect <network>"
332f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  dev <interface> disconnect [network]"
342f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "  dev <interface> powered [on|off]"
352f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    sys.exit(1)
362f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
372f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileydef print_properties(object_path, properties):
382f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    print "[ %s ]" % (object_path)
392f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    for key in properties.keys():
402f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if key == "Networks":
412f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            continue
422f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
432f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if key in ["Powered", "Scanning", "Connected",
442f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                   "Available", "Remember", "Default"]:
452f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if properties[key] == dbus.Boolean(1):
462f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                val = "true"
472f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            else:
482f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                val = "false"
492f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        elif key in ["Strength", "Priority"]:
502f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            val = int(properties[key])
512f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
522f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            val = str(properties[key])
532f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
542f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "     %s = %s" % (key, val)
552f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
562f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileydef print_networks(networks):
572f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    for object_path in networks:
582f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        network = dbus.Interface(
592f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            bus.get_object("org.chromium.flimflam", object_path),
602f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            "org.chromium.flimflam.Network")
612f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
622f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = network.GetProperties(utf8_strings = True)
632f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
642f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if properties["Connected"] == dbus.Boolean(1):
652f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            connected = "*"
662f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
672f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            connected = " "
682f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
692f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if "Name" in properties.keys():
702f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            name = properties["Name"]
712f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
722f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            name = ""
732f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
742f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        strength = int(properties["Strength"])
752f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
762f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        details = ""
772f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        try:
782f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            details += "{" + properties["WiFi.Mode"] + "} "
792f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        except Exception, _:
802f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            pass
812f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        try:
822f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            details += "{" + properties["WiFi.Security"] + "} "
832f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        except Exception, _:
842f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            pass
852f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if "WiFi.Passphrase" in properties.keys():
862f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if properties["WiFi.Passphrase"] != "":
872f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                details += "{passphrase present}"
882f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
892f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "%s %-26s %3d%%  %s" % (connected, name, strength, details)
902f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
912f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileydef select_network(networks, name):
922f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    for object_path in networks:
932f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        network = dbus.Interface(
942f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            bus.get_object("org.chromium.flimflam", object_path),
952f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            "org.chromium.flimflam.Network")
962f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
972f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = network.GetProperties(utf8_strings = True)
982f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
992f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if properties["Name"] != name:
1002f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            continue
1012f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1022f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if properties["Connected"] == dbus.Boolean(1):
1032f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Already connected to network %s" % (name)
1042f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            break
1052f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1062f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "Selecting network %s" % (name)
1072f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1082f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        network.Connect()
1092f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1102f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileydef disconnect_network(networks, name):
1112f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    for object_path in networks:
1122f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        network = dbus.Interface(
1132f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            bus.get_object("org.chromium.flimflam", object_path),
1142f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            "org.chromium.flimflam.Network")
1152f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1162f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = network.GetProperties(utf8_strings = True)
1172f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1182f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if name != "" and properties["Name"] != name:
1192f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            continue
1202f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1212f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if properties["Connected"] == dbus.Boolean(1):
1222f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            name = properties["Name"]
1232f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Disconnecting from network %s" % (name)
1242f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            network.Disconnect()
1252f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1262f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileydef print_services(services):
1272f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    for object_path in services:
1282f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        service = dbus.Interface(
1292f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            bus.get_object("org.chromium.flimflam", object_path),
1302f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            "org.chromium.flimflam.Service")
1312f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1322f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = service.GetProperties(utf8_strings = True)
1332f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1342f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        identifier = object_path[object_path.rfind("/") + 1:]
1352f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1362f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if properties["Favorite"] == dbus.Boolean(1):
1372f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            favorite = "*"
1382f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
1392f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            favorite = " "
1402f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1412f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if "Name" in properties.keys():
1422f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            name = properties["Name"]
1432f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
1442f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            name = "{" + properties["Type"] + "}"
1452f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1462f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "%s %-26s { %s }" % (favorite, name, identifier)
1472f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1482f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileydef main():
1492f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    if sys.argv[1] == "state":
1502f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = manager.GetProperties(utf8_strings = True)
1512f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1522f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "System is %s" % (properties["State"])
1532f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1542f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] == "recheck-portal":
1552f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        manager.RecheckPortal()
1562f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "Rechecking portal state"
1572f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1582f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["services", "list", "show"]:
1592f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = manager.GetProperties(utf8_strings = True)
1602f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1612f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print_services(properties["Services"])
1622f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1632f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["passphrase", "pass"]:
1642f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) < 3):
1652f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Need at least service parameter"
1662f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            sys.exit(1)
1672f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1682f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        path = "/profile/default/" + sys.argv[2]
1692f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1702f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
1712f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                                 "org.chromium.flimflam.Service")
1722f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1732f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) > 3):
1742f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            passphrase = sys.argv[3]
1752f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1762f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            service.SetProperty("Passphrase", passphrase)
1772f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1782f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Passphrase %s set for %s" % (passphrase, sys.argv[2])
1792f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
1802f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            properties = service.GetProperties(utf8_strings = True)
1812f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1822f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if "Name" in properties.keys():
1832f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                name = properties["Name"]
1842f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            else: name = "{" + properties["Type"] + "}"
1852f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1862f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if "Passphrase" in properties.keys():
1872f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                passphrase = properties["Passphrase"]
1882f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            else:
1892f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                passphrase = "not set"
1902f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1912f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Passphrase for %s is %s" % (name, passphrase)
1922f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1932f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["autoconnect", "autoconn"]:
1942f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) < 3):
1952f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Need at least service parameter"
1962f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            sys.exit(1)
1972f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
1982f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        path = "/profile/default/" + sys.argv[2]
1992f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2002f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
2012f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                                 "org.chromium.flimflam.Service")
2022f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2032f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) > 3):
2042f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            autoconnect = flimflam.make_dbus_boolean(sys.argv[3])
2052f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2062f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            service.SetProperty("AutoConnect", autoconnect)
2072f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2082f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Auto connect %s for %s" % (autoconnect, sys.argv[2])
2092f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
2102f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            properties = service.GetProperties(utf8_strings = True)
2112f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2122f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if "Name" in properties.keys():
2132f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                name = properties["Name"]
2142f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            else:
2152f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                name = "{" + properties["Type"] + "}"
2162f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2172f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if "AutoConnect" in properties.keys():
2182f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                autoconnect = properties["AutoConnect"]
2192f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            else:
2202f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                autoconnect = dbus.Boolean(0)
2212f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2222f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Auto connect %s for %s" % (autoconnect, name)
2232f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2242f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["connect", "conn"]:
2252f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) < 3):
2262f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Need at least service parameter"
2272f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            sys.exit(1)
2282f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2292f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        path = "/profile/default/" + sys.argv[2]
2302f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2312f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
2322f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                                 "org.chromium.flimflam.Service")
2332f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2342f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        try:
2352f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            service.Connect(timeout=60000)
2362f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        except dbus.DBusException, error:
2372f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "%s: %s" % (error.get_dbus_name(), error.message)
2382f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2392f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["disconnect", "disc"]:
2402f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) < 3):
2412f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Need at least service parameter"
2422f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            sys.exit(1)
2432f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2442f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        path = "/profile/default/" + sys.argv[2]
2452f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2462f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
2472f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                                 "org.chromium.flimflam.Service")
2482f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2492f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        try:
2502f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            service.Disconnect()
2512f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        except dbus.DBusException, error:
2522f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "%s: %s" % (error.get_dbus_name(), error.message)
2532f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2542f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["remove"]:
2552f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if (len(sys.argv) < 3):
2562f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Need at least service parameter"
2572f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            sys.exit(1)
2582f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2592f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        path = "/profile/default/" + sys.argv[2]
2602f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2612f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
2622f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                                 "org.chromium.flimflam.Service")
2632f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2642f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = service.GetProperties(utf8_strings = True)
2652f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2662f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if properties["Favorite"] == dbus.Boolean(0):
2672f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Only favorite services can be removed"
2682f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            sys.exit(1)
2692f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2702f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        try:
2712f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            service.Remove()
2722f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        except dbus.DBusException, error:
2732f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "%s: %s" % (error.get_dbus_name(), error.message)
2742f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2752f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] == "scan":
2762f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if len(sys.argv) > 2:
2772f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.RequestScan(sys.argv[2])
2782f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
2792f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.RequestScan("")
2802f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2812f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] == "enable":
2822f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if len(sys.argv) > 2:
2832f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.EnableTechnology(sys.argv[2])
2842f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
2852f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.EnableTechnology("")
2862f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2872f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] == "disable":
2882f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if len(sys.argv) > 2:
2892f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.DisableTechnology(sys.argv[2])
2902f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
2912f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.DisableTechnology("")
2922f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
2932f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] in ["offlinemode", "flightmode"]:
2942f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if len(sys.argv) > 2:
2952f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            active = flimflam.make_dbus_boolean(sys.argv[2])
2962f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            manager.SetProperty("OfflineMode", active)
2972f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        else:
2982f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            properties = manager.GetProperties(utf8_strings = True)
2992f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            print "Offline mode is %s" % (properties["OfflineMode"])
3002f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3012f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    elif sys.argv[1] == "dev":
3022f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        properties = manager.GetProperties(utf8_strings = True)
3032f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3042f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        interface = ""
3052f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        command = ""
3062f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        value = ""
3072f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3082f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        if len(sys.argv) > 2:
3092f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            interface = sys.argv[2]
3102f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if len(sys.argv) > 3:
3112f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                command = sys.argv[3]
3122f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if len(sys.argv) > 4:
3132f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    value = sys.argv[4]
3142f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3152f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        for path in properties["Devices"]:
3162f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            device = dbus.Interface(
3172f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                bus.get_object("org.chromium.flimflam", path),
3182f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                "org.chromium.flimflam.Device")
3192f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3202f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            properties = device.GetProperties(utf8_strings = True)
3212f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3222f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if (interface != "" and
3232f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                properties.get("Interface", "") != interface and
3242f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                path != interface):
3252f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                continue
3262f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3272f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            if command == "scan":
3282f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if properties["Type"] in ["wifi", "wimax"]:
3292f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    interface = properties["Interface"]
3302f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print "Scan for device %s" % (interface)
3312f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    device.ProposeScan()
3322f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                else:
3332f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print "No scanning for device %s" % (interface)
3342f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command in ["networks", "net"]:
3352f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if "Networks" in properties.keys():
3362f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print_networks(properties["Networks"])
3372f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                else:
3382f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print "Device has no networks"
3392f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command in ["connect", "conn"] and value != "":
3402f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if "Networks" in properties.keys():
3412f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    select_network(properties["Networks"], value)
3422f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                else:
3432f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print "Device can't connect networks"
3442f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command in ["connect", "conn"]:
3452f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                print "Need to specify network"
3462f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command in ["disconnect", "disc"] and value != "":
3472f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if "Networks" in properties.keys():
3482f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    disconnect_network(properties["Networks"], value)
3492f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                else:
3502f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print "Device has no networks"
3512f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command in ["discconnect", "disc"]:
3522f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if "Networks" in properties.keys():
3532f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    disconnect_network(properties["Networks"], "")
3542f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                else:
3552f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    print "Device has no networks"
3562f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command == "powered" and value != "":
3572f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                powered = flimflam.make_dbus_boolean(value)
3582f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                device.SetProperty("Powered", powered)
3592f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command == "powered":
3602f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                interface = properties.get("Interface", "unknown")
3612f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                if properties["Powered"] == dbus.Boolean(1):
3622f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    powered = "on"
3632f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                else:
3642f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                    powered = "off"
3652f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                print "Device %s is powered %s" % (interface, powered)
3662f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            elif command == "list" or command == "":
3672f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                print_properties(path, properties)
3682f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley            else:
3692f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley                print "Unknown command"
3702f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3712f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    else:
3722f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley        print "Unknown command"
3732f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley
3742f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wileyif __name__ == "__main__":
3752f48d9572459c2c90d68e8b017b86eb843fe2a74Christopher Wiley    main()
376