telepathy-mission-control: Update to current ConnMan API

Mike Ruprecht mruprecht at kemper.freedesktop.org
Thu Nov 1 15:06:41 PDT 2012


Module: telepathy-mission-control
Branch: master
Commit: c3f9cd49aa0238922b5a0e972cf3cbe3a48be6eb
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=c3f9cd49aa0238922b5a0e972cf3cbe3a48be6eb

Author: Mike Ruprecht <mike.ruprecht at collabora.co.uk>
Date:   Thu Nov  1 00:24:35 2012 -0500

Update to current ConnMan API

ConnMan 0.79 removed the GetState method and StateChanged signal.
Use the GetProperties method and PropertyChanged signals as their
replacements.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=56600
Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>

---

 src/connectivity-monitor.c        |   57 ++++++++++++++++++++++++++-----------
 tests/twisted/fakeconnectivity.py |   17 ++++++++---
 2 files changed, 52 insertions(+), 22 deletions(-)

diff --git a/src/connectivity-monitor.c b/src/connectivity-monitor.c
index 5e6e425..7337aa5 100644
--- a/src/connectivity-monitor.c
+++ b/src/connectivity-monitor.c
@@ -148,7 +148,7 @@ connectivity_monitor_nm_state_change_cb (NMClient *client,
 
 #ifdef HAVE_CONNMAN
 static void
-connectivity_monitor_connman_state_changed_cb (DBusGProxy *proxy,
+connectivity_monitor_connman_state_changed (DBusGProxy *proxy,
     const gchar *new_state,
     McdConnectivityMonitor *connectivity_monitor)
 {
@@ -168,25 +168,47 @@ connectivity_monitor_connman_state_changed_cb (DBusGProxy *proxy,
 }
 
 static void
+connectivity_monitor_connman_property_changed_cb (DBusGProxy *proxy,
+    const gchar *prop_name,
+    const GValue *new_value,
+    McdConnectivityMonitor *connectivity_monitor)
+{
+  if (!tp_strdiff (prop_name, "State"))
+    connectivity_monitor_connman_state_changed (proxy,
+        g_value_get_string (new_value), connectivity_monitor);
+}
+
+static void
 connectivity_monitor_connman_check_state_cb (DBusGProxy *proxy,
     DBusGProxyCall *call_id,
     gpointer user_data)
 {
   McdConnectivityMonitor *connectivity_monitor = (McdConnectivityMonitor *) user_data;
   GError *error = NULL;
-  gchar *state;
+  GHashTable *props;
 
   if (dbus_g_proxy_end_call (proxy, call_id, &error,
-          G_TYPE_STRING, &state, G_TYPE_INVALID))
+          dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
+          &props, G_TYPE_INVALID))
     {
-      connectivity_monitor_connman_state_changed_cb (proxy, state,
-          connectivity_monitor);
-      g_free (state);
+      const gchar *state = tp_asv_get_string (props, "State");
+
+      if (state != NULL)
+        {
+          connectivity_monitor_connman_state_changed (proxy, state,
+              connectivity_monitor);
+        }
+      else
+        {
+          DEBUG ("Failed to get State: not in GetProperties return");
+        }
+
+      g_hash_table_unref (props);
     }
   else
     {
-      DEBUG ("Failed to call GetState: %s", error->message);
-      connectivity_monitor_connman_state_changed_cb (proxy, "offline",
+      DEBUG ("Failed to call GetProperties: %s", error->message);
+      connectivity_monitor_connman_state_changed (proxy, "offline",
           connectivity_monitor);
     }
 }
@@ -198,7 +220,7 @@ connectivity_monitor_connman_check_state (McdConnectivityMonitor *connectivity_m
 
   priv = connectivity_monitor->priv;
 
-  dbus_g_proxy_begin_call (priv->proxy, "GetState",
+  dbus_g_proxy_begin_call (priv->proxy, "GetProperties",
       connectivity_monitor_connman_check_state_cb, connectivity_monitor, NULL,
       G_TYPE_INVALID);
 }
@@ -280,14 +302,14 @@ mcd_connectivity_monitor_init (McdConnectivityMonitor *connectivity_monitor)
           "net.connman.Manager");
 
       dbus_g_object_register_marshaller (
-          g_cclosure_marshal_VOID__STRING,
-          G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
+          g_cclosure_marshal_generic,
+          G_TYPE_NONE, G_TYPE_STRING, G_TYPE_BOXED, G_TYPE_INVALID);
 
-      dbus_g_proxy_add_signal (priv->proxy, "StateChanged",
-          G_TYPE_STRING, G_TYPE_INVALID);
+      dbus_g_proxy_add_signal (priv->proxy, "PropertyChanged",
+          G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
 
-      dbus_g_proxy_connect_signal (priv->proxy, "StateChanged",
-          G_CALLBACK (connectivity_monitor_connman_state_changed_cb),
+      dbus_g_proxy_connect_signal (priv->proxy, "PropertyChanged",
+          G_CALLBACK (connectivity_monitor_connman_property_changed_cb),
           connectivity_monitor, NULL);
 
       connectivity_monitor_connman_check_state (connectivity_monitor);
@@ -336,8 +358,9 @@ connectivity_monitor_finalize (GObject *object)
 #ifdef HAVE_CONNMAN
   if (priv->proxy != NULL)
     {
-      dbus_g_proxy_disconnect_signal (priv->proxy, "StateChanged",
-          G_CALLBACK (connectivity_monitor_connman_state_changed_cb), connectivity_monitor);
+      dbus_g_proxy_disconnect_signal (priv->proxy, "PropertyChanged",
+          G_CALLBACK (connectivity_monitor_connman_property_changed_cb),
+          connectivity_monitor);
 
       g_object_unref (priv->proxy);
       priv->proxy = NULL;
diff --git a/tests/twisted/fakeconnectivity.py b/tests/twisted/fakeconnectivity.py
index e613aca..c144452 100644
--- a/tests/twisted/fakeconnectivity.py
+++ b/tests/twisted/fakeconnectivity.py
@@ -43,9 +43,9 @@ class FakeConnectivity(object):
         q.add_dbus_method_impl(self.NM_GetDevices,
             path=self.NM_PATH, interface=self.NM_INTERFACE, method='GetDevices')
 
-        q.add_dbus_method_impl(self.ConnMan_GetState,
+        q.add_dbus_method_impl(self.ConnMan_GetProperties,
             path=self.CONNMAN_PATH, interface=self.CONNMAN_INTERFACE,
-            method='GetState')
+            method='GetProperties')
 
         self.change_state(initially_online)
 
@@ -88,8 +88,15 @@ class FakeConnectivity(object):
     def NM_GetDevices(self, e):
         self.q.dbus_return(e.message, [], signature='ao')
 
-    def ConnMan_GetState(self, e):
-        self.q.dbus_return(e.message, self.connman_state, signature='s')
+    def Connman_props(self):
+        return {
+            'OfflineMode': False,
+            'SessionMode': False,
+            'State': self.connman_state,
+        }
+
+    def ConnMan_GetProperties(self, e):
+        self.q.dbus_return(e.message, self.Connman_props(), signature='a{sv}')
 
     def change_state(self, online):
         if online:
@@ -106,7 +113,7 @@ class FakeConnectivity(object):
             'StateChanged', self.nm_state,
             signature='u')
         self.q.dbus_emit(self.CONNMAN_PATH, self.CONNMAN_INTERFACE,
-            'StateChanged', self.connman_state, signature='s')
+            'PropertyChanged', "State", self.connman_state, signature='sv')
 
     def go_online(self):
         self.change_state(True)



More information about the telepathy-commits mailing list