From: Mark Wooding Date: Sat, 24 May 2014 13:00:03 +0000 (+0100) Subject: svc/conntrack.in: Monitor class for ConnMan. X-Git-Tag: 1.0.0pre16~7 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/commitdiff_plain/a95eb44afedbf94790324a28ee1952afa3ae26ac?hp=2539ab9c12fde0155822fe9e6393edb265240dae svc/conntrack.in: Monitor class for ConnMan. As used in Sailfish. --- diff --git a/svc/conntrack.in b/svc/conntrack.in index 8564a619..6ada45d7 100644 --- a/svc/conntrack.in +++ b/svc/conntrack.in @@ -398,6 +398,38 @@ class NetworkManagerMonitor (object): if props.get('Default', False): netupdown(True, ['nm', 'default-connection-change']) +##-------------------------------------------------------------------------- +### Connman monitor. + +CM_NAME = 'net.connman' +CM_PATH = '/' +CM_IFACE = 'net.connman.Manager' + +class ConnManMonitor (object): + """ + Watch ConnMan signls for changes in network state. + """ + + ## Strategy. Everything seems to be usefully encoded in the `State' + ## property. If it's `offline', `idle' or `ready' then we don't expect a + ## network connection. During handover from one network to another, the + ## property passes through `ready' to `online'. + + def attach(me, bus): + try: + cm = bus.get_object(CM_NAME, CM_PATH) + props = cm.GetProperties(dbus_interface = CM_IFACE) + state = props['State'] + netupdown(state == 'online', ['connman', 'initially-%s' % state]) + except D.DBusException: + pass + bus.add_signal_receiver(me._cm_state, 'PropertyChanged', + CM_IFACE, CM_NAME, CM_PATH) + + def _cm_state(me, prop, value): + if prop != 'State': return + netupdown(value == 'online', ['connman', value]) + ###-------------------------------------------------------------------------- ### Maemo monitor. @@ -549,6 +581,7 @@ def init(): T.Coroutine(kickpeers, name = 'kickpeers').switch() DBM = DBusMonitor() DBM.addmon(NetworkManagerMonitor()) + DBM.addmon(ConnManMonitor()) DBM.addmon(MaemoICdMonitor()) G.timeout_add_seconds(30, lambda: (netupdown(True, ['interval-timer']) or True))