about summary refs log tree commit diff
path: root/examples/python/dbus/is-wwan-default.py
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2015-01-22 00:29:39 +0100
committerMichael Biebl <biebl@debian.org>2015-01-22 00:29:39 +0100
commit2c032d8f1c6292c1338a615e6ec40252889ba85c (patch)
tree1f77182220b2b0264288ba4a476ab47e5bc48716 /examples/python/dbus/is-wwan-default.py
parent33491bc4279481db8ae47213e34a6d695a0e8830 (diff)
Imported Upstream version 1.0.0 upstream/1.0.0
Diffstat (limited to 'examples/python/dbus/is-wwan-default.py')
-rwxr-xr-xexamples/python/dbus/is-wwan-default.py58
1 files changed, 40 insertions, 18 deletions
diff --git a/examples/python/dbus/is-wwan-default.py b/examples/python/dbus/is-wwan-default.py
index 6131cda1..a4a3ff8e 100755
--- a/examples/python/dbus/is-wwan-default.py
+++ b/examples/python/dbus/is-wwan-default.py
@@ -28,6 +28,8 @@ NM_SERVICE_NAME = "org.freedesktop.NetworkManager"
 NM_MANAGER_IFACE = "org.freedesktop.NetworkManager"
 DBUS_PROPS_IFACE = "org.freedesktop.DBus.Properties"
 
+NM_ACTIVE_CONNECTION_INTERFACE = "org.freedesktop.NetworkManager.Connection.Active"
+
 bus = dbus.SystemBus()
 
 # Exit early if NetworkManager is not running
@@ -42,34 +44,54 @@ proxy = bus.get_object(NM_SERVICE_NAME, "/org/freedesktop/NetworkManager")
 manager = dbus.Interface(proxy, NM_MANAGER_IFACE)
 props = dbus.Interface(proxy, DBUS_PROPS_IFACE)
 
-default_is_wwan = False
+def found_connection_type(ctype):
+    if ctype == '':
+        print "No active connection"
+    elif ctype in ["gsm", "cdma", "bluetooth"]:
+        print "WWAN is default"
+    else:
+        print "WWAN is not default"
+        sys.exit(0)
+
+# Shortcut #1, for NM 1.0
+try:
+    ctype = props.Get(NM_MANAGER_IFACE, "PrimaryConnectionType")
+    found_connection_type(ctype)
+except KeyError:
+    pass
 
-# Look through all active network connections for the default one
+# Shortcut #2, for NM 0.9.10
+try:
+    primary = props.Get(NM_MANAGER_IFACE, "PrimaryConnection")
+    if not primary:
+        found_connection_type('')
+    primary_proxy = bus.get_object(NM_SERVICE_NAME, primary)
+    primary_props = dbus.Interface(primary_proxy, DBUS_PROPS_IFACE)
+    ctype = primary_props.Get(NM_ACTIVE_CONNECTION_INTERFACE, "Type")
+    found_connection_type(ctype)
+except KeyError:
+    pass
+
+# Fallback for NM 0.9.8 and earlier; look through all active network
+# connections for the default one
+default_is_wwan = False
 active = props.Get(NM_MANAGER_IFACE, "ActiveConnections")
 for a in active:
     a_proxy = bus.get_object(NM_SERVICE_NAME, a)
     a_props = dbus.Interface(a_proxy, DBUS_PROPS_IFACE)
-    all_props = a_props.GetAll("org.freedesktop.NetworkManager.Connection.Active")
+    all_props = a_props.GetAll(NM_ACTIVE_CONNECTION_INTERFACE)
 
     # Ignore this network connection if it's not default for IPv4 or IPv6
     if all_props["Default"] == False and all_props["Default6"] == False:
         continue
 
-    # Shortcut: check for Type property (only present in NM 0.9.9+)
-    try:
-        ctype = all_props["Type"]
-        if ctype in ["gsm", "cdma", "bluetooth"]:
-            default_is_wwan = True
-            break
-    except KeyError:
-        # Fall back to checking the type of the network connection's device
-        dev_path = all_props["Devices"][0]
-        dev_proxy = bus.get_object(NM_SERVICE_NAME, dev_path)
-        dev_props = dbus.Interface(dev_proxy, DBUS_PROPS_IFACE)
-        devtype = dev_props.Get("org.freedesktop.NetworkManager.Device", "DeviceType")
-        if devtype == NM_DEVICE_TYPE_MODEM or devtype == NM_DEVICE_TYPE_BLUETOOTH:
-            default_is_wwan = True
-            break
+    dev_path = all_props["Devices"][0]
+    dev_proxy = bus.get_object(NM_SERVICE_NAME, dev_path)
+    dev_props = dbus.Interface(dev_proxy, DBUS_PROPS_IFACE)
+    devtype = dev_props.Get("org.freedesktop.NetworkManager.Device", "DeviceType")
+    if devtype == NM_DEVICE_TYPE_MODEM or devtype == NM_DEVICE_TYPE_BLUETOOTH:
+        default_is_wwan = True
+        break
 
 if default_is_wwan:
     print "WWAN is default"