summary refs log tree commit diff
path: root/libnm/nm-remote-connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm/nm-remote-connection.c')
-rw-r--r--libnm/nm-remote-connection.c117
1 files changed, 54 insertions, 63 deletions
diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c
index eb2874a0..fe78f7b8 100644
--- a/libnm/nm-remote-connection.c
+++ b/libnm/nm-remote-connection.c
@@ -33,7 +33,7 @@
 #include "nm-object-private.h"
 #include "nm-dbus-helpers.h"
 
-#include "nmdbus-settings-connection.h"
+#include "introspection/org.freedesktop.NetworkManager.Settings.Connection.h"
 
 static void nm_remote_connection_connection_iface_init (NMConnectionInterface *iface);
 static void nm_remote_connection_initable_iface_init (GInitableIface *iface);
@@ -65,7 +65,7 @@ typedef struct {
 
 #define NM_REMOTE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_REMOTE_CONNECTION, NMRemoteConnectionPrivate))
 
-/****************************************************************/
+/*****************************************************************************/
 
 /**
  * nm_remote_connection_commit_changes:
@@ -557,7 +557,7 @@ nm_remote_connection_get_visible (NMRemoteConnection *connection)
 	return NM_REMOTE_CONNECTION_GET_PRIVATE (connection)->visible;
 }
 
-/****************************************************************/
+/*****************************************************************************/
 
 static void
 replace_settings (NMRemoteConnection *self, GVariant *new_settings)
@@ -615,7 +615,7 @@ updated_cb (NMDBusSettingsConnection *proxy, gpointer user_data)
 	                                              g_object_ref (self));
 }
 
-/****************************************************************/
+/*****************************************************************************/
 
 static void
 init_dbus (NMObject *object)
@@ -628,15 +628,9 @@ init_dbus (NMObject *object)
 
 	NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object);
 
-	priv->proxy = NMDBUS_SETTINGS_CONNECTION (_nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS_CONNECTION));
-	g_assert (priv->proxy);
-
 	_nm_object_register_properties (object,
 	                                NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
 	                                property_info);
-
-	g_signal_connect (priv->proxy, "updated",
-	                  G_CALLBACK (updated_cb), object);
 }
 
 static gboolean
@@ -646,20 +640,20 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
 	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable);
 	GVariant *settings;
 
-	if (!nm_remote_connection_parent_initable_iface->init (initable, cancellable, error))
-		return FALSE;
+	priv->proxy = NMDBUS_SETTINGS_CONNECTION (_nm_object_get_proxy (NM_OBJECT (initable), NM_DBUS_INTERFACE_SETTINGS_CONNECTION));
+	g_signal_connect (priv->proxy, "updated", G_CALLBACK (updated_cb), initable);
 
-	if (!nmdbus_settings_connection_call_get_settings_sync (priv->proxy,
-	                                                        &settings,
-	                                                        cancellable, error)) {
-		if (error && *error)
-			g_dbus_error_strip_remote_error (*error);
-		return FALSE;
+	if (nmdbus_settings_connection_call_get_settings_sync (priv->proxy,
+	                                                       &settings,
+	                                                       cancellable,
+	                                                       NULL)) {
+		priv->visible = TRUE;
+		replace_settings (self, settings);
+		g_variant_unref (settings);
 	}
 
-	priv->visible = TRUE;
-	replace_settings (self, settings);
-	g_variant_unref (settings);
+	if (!nm_remote_connection_parent_initable_iface->init (initable, cancellable, error))
+		return FALSE;
 
 	return TRUE;
 }
@@ -668,6 +662,8 @@ typedef struct {
 	NMRemoteConnection *connection;
 	GCancellable *cancellable;
 	GSimpleAsyncResult *result;
+	GAsyncInitable *initable;
+	int io_priority;
 } NMRemoteConnectionInitData;
 
 static void
@@ -685,44 +681,35 @@ init_async_complete (NMRemoteConnectionInitData *init_data, GError *error)
 }
 
 static void
-init_get_settings_cb (GObject *proxy,
-                      GAsyncResult *result,
-                      gpointer user_data)
+init_async_parent_inited (GObject *source, GAsyncResult *result, gpointer user_data)
 {
 	NMRemoteConnectionInitData *init_data = user_data;
-	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection);
-	GVariant *settings;
 	GError *error = NULL;
 
-	if (!nmdbus_settings_connection_call_get_settings_finish (priv->proxy, &settings,
-	                                                          result, &error)) {
-		g_dbus_error_strip_remote_error (error);
-		init_async_complete (init_data, error);
-		return;
-	}
-
-	priv->visible = TRUE;
-	replace_settings (init_data->connection, settings);
-	g_variant_unref (settings);
-
-	init_async_complete (init_data, NULL);
+	init_async_complete (init_data, error);
 }
 
 static void
-init_async_parent_inited (GObject *source, GAsyncResult *result, gpointer user_data)
+init_get_settings_cb (GObject *proxy,
+                      GAsyncResult *result,
+                      gpointer user_data)
 {
 	NMRemoteConnectionInitData *init_data = user_data;
-	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection);
+	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->initable);
+	GVariant *settings;
 	GError *error = NULL;
 
-	if (!nm_remote_connection_parent_async_initable_iface->init_finish (G_ASYNC_INITABLE (source), result, &error)) {
-		init_async_complete (init_data, error);
-		return;
+	if (!nmdbus_settings_connection_call_get_settings_finish (priv->proxy, &settings,
+	                                                          result, &error)) {
+		g_error_free (error);
+	} else {
+		priv->visible = TRUE;
+		replace_settings (NM_REMOTE_CONNECTION (init_data->initable), settings);
+		g_variant_unref (settings);
 	}
 
-	nmdbus_settings_connection_call_get_settings (priv->proxy,
-	                                              init_data->cancellable,
-	                                              init_get_settings_cb, init_data);
+	nm_remote_connection_parent_async_initable_iface->
+		init_async (init_data->initable, init_data->io_priority, init_data->cancellable, init_async_parent_inited, init_data);
 }
 
 static void
@@ -731,26 +718,24 @@ init_async (GAsyncInitable *initable, int io_priority,
             gpointer user_data)
 {
 	NMRemoteConnectionInitData *init_data;
+	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable);
 
 	init_data = g_slice_new0 (NMRemoteConnectionInitData);
-	init_data->connection = NM_REMOTE_CONNECTION (initable);
 	init_data->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
 	init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
 	                                               user_data, init_async);
+	init_data->initable = initable;
+	init_data->io_priority = io_priority;
 
-	nm_remote_connection_parent_async_initable_iface->
-		init_async (initable, io_priority, cancellable, init_async_parent_inited, init_data);
-}
+	priv->proxy = NMDBUS_SETTINGS_CONNECTION (_nm_object_get_proxy (NM_OBJECT (initable),
+	                                          NM_DBUS_INTERFACE_SETTINGS_CONNECTION));
 
-static gboolean
-init_finish (GAsyncInitable *initable, GAsyncResult *result, GError **error)
-{
-	GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+	g_signal_connect (priv->proxy, "updated",
+	                  G_CALLBACK (updated_cb), initable);
 
-	if (g_simple_async_result_propagate_error (simple, error))
-		return FALSE;
-	else
-		return TRUE;
+	nmdbus_settings_connection_call_get_settings (NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->initable)->proxy,
+	                                              init_data->cancellable,
+	                                              init_get_settings_cb, init_data);
 }
 
 static void
@@ -783,6 +768,16 @@ constructed (GObject *object)
 }
 
 static void
+dispose (GObject *object)
+{
+	NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object);
+
+	g_clear_object (&priv->proxy);
+
+	G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object);
+}
+
+static void
 nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (remote_class);
@@ -790,13 +785,10 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
 
 	g_type_class_add_private (object_class, sizeof (NMRemoteConnectionPrivate));
 
-	_nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
-	_nm_dbus_register_proxy_type (NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
-	                              NMDBUS_TYPE_SETTINGS_CONNECTION_PROXY);
-
 	/* virtual methods */
 	object_class->constructed = constructed;
 	object_class->get_property = get_property;
+	object_class->dispose = dispose;
 
 	nm_object_class->init_dbus = init_dbus;
 
@@ -852,5 +844,4 @@ nm_remote_connection_async_initable_iface_init (GAsyncInitableIface *iface)
 	nm_remote_connection_parent_async_initable_iface = g_type_interface_peek_parent (iface);
 
 	iface->init_async = init_async;
-	iface->init_finish = init_finish;
 }