From 2bfccab710f694c9f2d54033a305ba64533e3bc5 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Sat, 16 Aug 2014 10:13:56 -0400 Subject: [PATCH 1/6] libnm-core: drop nm_connection_create_setting() This was only used in one place, and is trivial to implement inline there. --- libnm-core/nm-connection.c | 23 ----------------------- libnm-core/nm-connection.h | 2 -- libnm/libnm.ver | 1 - src/settings/plugins/keyfile/reader.c | 11 ++++++++--- 4 files changed, 8 insertions(+), 29 deletions(-) diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 2b52e7a340..48d7777416 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -153,29 +153,6 @@ nm_connection_lookup_setting_type_by_quark (GQuark error_quark) return _nm_setting_lookup_setting_type_by_quark (error_quark); } -/** - * nm_connection_create_setting: - * @name: a setting name - * - * Create a new #NMSetting object of the desired type, given a setting name. - * - * Returns: (transfer full): the new setting object, or %NULL if the setting name was unknown - **/ -NMSetting * -nm_connection_create_setting (const char *name) -{ - GType type; - NMSetting *setting = NULL; - - g_return_val_if_fail (name != NULL, NULL); - - type = nm_connection_lookup_setting_type (name); - if (type) - setting = (NMSetting *) g_object_new (type, NULL); - - return setting; -} - static void setting_changed_cb (NMSetting *setting, GParamSpec *pspec, diff --git a/libnm-core/nm-connection.h b/libnm-core/nm-connection.h index bcc9cbcc49..d8c3b5e113 100644 --- a/libnm-core/nm-connection.h +++ b/libnm-core/nm-connection.h @@ -140,8 +140,6 @@ NMConnection *nm_connection_new_from_hash (GHashTable *hash, GError **error); NMConnection *nm_connection_duplicate (NMConnection *connection); -NMSetting *nm_connection_create_setting (const char *name); - void nm_connection_add_setting (NMConnection *connection, NMSetting *setting); diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 816979ffc7..986c235244 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -76,7 +76,6 @@ global: nm_connection_clear_secrets; nm_connection_clear_secrets_with_flags; nm_connection_compare; - nm_connection_create_setting; nm_connection_diff; nm_connection_dump; nm_connection_duplicate; diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index eefa39538f..2448e5521e 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -1166,12 +1166,17 @@ read_setting (GKeyFile *file, const char *keyfile_path, const char *group) NMSetting *setting; ReadInfo info = { file, keyfile_path }; const char *alias; + GType type; alias = nm_keyfile_plugin_get_setting_name_for_alias (group); - setting = nm_connection_create_setting (alias ? alias : group); - if (setting) + if (alias) + group = alias; + + type = nm_connection_lookup_setting_type (group); + if (type) { + setting = g_object_new (type, NULL); nm_setting_enumerate_values (setting, read_one_setting_value, &info); - else + } else nm_log_warn (LOGD_SETTINGS, "Invalid setting name '%s'", group); return setting; From 32c26a859bd869a5a910c5047685bcd2badce6d2 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Tue, 12 Aug 2014 17:25:26 -0400 Subject: [PATCH 2/6] libnm-core: move some fake NMConnection methods over to NMSetting nm_connection_lookup_setting_type() and nm_connection_lookup_setting_type_by_quark() have nothing to do with NMConnection. So move them to NMSetting (and rename them to nm_setting_lookup_type() and nm_setting_lookup_type_by_quark()). --- clients/cli/settings.c | 4 +-- clients/tui/nm-editor-utils.c | 4 +-- include/nm-test-utils.h | 2 +- libnm-core/nm-connection.c | 35 +++------------------------ libnm-core/nm-connection.h | 4 --- libnm-core/nm-setting-private.h | 2 -- libnm-core/nm-setting.c | 21 ++++++++++++++-- libnm-core/nm-setting.h | 3 +++ libnm/libnm.ver | 4 +-- libnm/nm-vpn-plugin.c | 2 +- src/settings/nm-settings.c | 2 +- src/settings/plugins/example/plugin.c | 2 +- src/settings/plugins/keyfile/reader.c | 6 ++--- 13 files changed, 38 insertions(+), 53 deletions(-) diff --git a/clients/cli/settings.c b/clients/cli/settings.c index e3c66d05e7..3275c4793e 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -1539,7 +1539,7 @@ nmc_setting_new_for_name (const char *name) NMSetting *setting = NULL; if (name) { - stype = nm_connection_lookup_setting_type (name); + stype = nm_setting_lookup_type (name); if (stype != G_TYPE_INVALID) { setting = g_object_new (stype, NULL); g_warn_if_fail (NM_IS_SETTING (setting)); @@ -7225,7 +7225,7 @@ setting_details (NMSetting *setting, NmCli *nmc, const char *one_prop) g_return_val_if_fail (NM_IS_SETTING (setting), FALSE); while (iter->sname) { - if (nm_connection_lookup_setting_type (iter->sname) == G_OBJECT_TYPE (setting)) + if (nm_setting_lookup_type (iter->sname) == G_OBJECT_TYPE (setting)) return iter->func (setting, nmc, one_prop); iter++; } diff --git a/clients/tui/nm-editor-utils.c b/clients/tui/nm-editor-utils.c index 96f35cc670..0abcf411b0 100644 --- a/clients/tui/nm-editor-utils.c +++ b/clients/tui/nm-editor-utils.c @@ -329,7 +329,7 @@ nm_editor_utils_create_connection (GType type, master_s_con = nm_connection_get_setting_connection (master); master_setting_type = nm_setting_connection_get_connection_type (master_s_con); master_uuid = nm_setting_connection_get_uuid (master_s_con); - master_type = nm_connection_lookup_setting_type (master_setting_type); + master_type = nm_setting_lookup_type (master_setting_type); } types = nm_editor_utils_get_connection_type_list (); @@ -401,7 +401,7 @@ nm_editor_utils_get_connection_type_data (NMConnection *conn) g_return_val_if_fail (s_con != NULL, NULL); conn_type = nm_setting_connection_get_connection_type (s_con); - conn_gtype = nm_connection_lookup_setting_type (conn_type); + conn_gtype = nm_setting_lookup_type (conn_type); g_return_val_if_fail (conn_gtype != G_TYPE_INVALID, NULL); types = nm_editor_utils_get_connection_type_list (); diff --git a/include/nm-test-utils.h b/include/nm-test-utils.h index 5188cd2627..5587e4ec4c 100644 --- a/include/nm-test-utils.h +++ b/include/nm-test-utils.h @@ -698,7 +698,7 @@ nmtst_create_minimal_connection (const char *id, const char *uuid, const char *t uuid = uuid_free = nm_utils_uuid_generate (); if (type) { - GType type_g = nm_connection_lookup_setting_type (type); + GType type_g = nm_setting_lookup_type (type); g_assert (type_g != G_TYPE_INVALID); diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 48d7777416..56879fe45d 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -124,35 +124,6 @@ static NMSettingVerifyResult _nm_connection_verify (NMConnection *connection, GE /*************************************************************/ -/** - * nm_connection_lookup_setting_type: - * @name: a setting name - * - * Returns the #GType of the setting's class for a given setting name. - * - * Returns: the #GType of the setting's class - **/ -GType -nm_connection_lookup_setting_type (const char *name) -{ - return _nm_setting_lookup_setting_type (name); -} - -/** - * nm_connection_lookup_setting_type_by_quark: - * @error_quark: a setting error quark - * - * Returns the #GType of the setting's class for a given setting error quark. - * Useful for figuring out which setting a returned error is for. - * - * Returns: the #GType of the setting's class - **/ -GType -nm_connection_lookup_setting_type_by_quark (GQuark error_quark) -{ - return _nm_setting_lookup_setting_type_by_quark (error_quark); -} - static void setting_changed_cb (NMSetting *setting, GParamSpec *pspec, @@ -259,7 +230,7 @@ nm_connection_get_setting_by_name (NMConnection *connection, const char *name) g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); g_return_val_if_fail (name != NULL, NULL); - type = nm_connection_lookup_setting_type (name); + type = nm_setting_lookup_type (name); return type ? nm_connection_get_setting (connection, type) : NULL; } @@ -327,7 +298,7 @@ hash_to_connection (NMConnection *connection, GHashTable *new, GError **error) g_hash_table_iter_init (&iter, new); while (g_hash_table_iter_next (&iter, (gpointer) &setting_name, (gpointer) &setting_hash)) { - GType type = nm_connection_lookup_setting_type (setting_name); + GType type = nm_setting_lookup_type (setting_name); if (type) { NMSetting *setting = nm_setting_new_from_hash (type, setting_hash); @@ -964,7 +935,7 @@ nm_connection_update_secrets (NMConnection *connection, */ g_hash_table_iter_init (&iter, secrets); while (g_hash_table_iter_next (&iter, (gpointer) &key, NULL)) { - if (_nm_setting_lookup_setting_type (key) != G_TYPE_INVALID) { + if (nm_setting_lookup_type (key) != G_TYPE_INVALID) { /* @secrets looks like a hashed connection */ hashed_connection = TRUE; break; diff --git a/libnm-core/nm-connection.h b/libnm-core/nm-connection.h index d8c3b5e113..b66094f5c3 100644 --- a/libnm-core/nm-connection.h +++ b/libnm-core/nm-connection.h @@ -209,10 +209,6 @@ GHashTable *nm_connection_to_hash (NMConnection *connection, void nm_connection_dump (NMConnection *connection); -GType nm_connection_lookup_setting_type (const char *name); - -GType nm_connection_lookup_setting_type_by_quark (GQuark error_quark); - /* Helpers */ const char * nm_connection_get_uuid (NMConnection *connection); const char * nm_connection_get_id (NMConnection *connection); diff --git a/libnm-core/nm-setting-private.h b/libnm-core/nm-setting-private.h index 19849aa4c9..338364cec4 100644 --- a/libnm-core/nm-setting-private.h +++ b/libnm-core/nm-setting-private.h @@ -56,8 +56,6 @@ void _nm_register_setting (const char *name, gboolean _nm_setting_is_base_type (NMSetting *setting); gboolean _nm_setting_type_is_base_type (GType type); -GType _nm_setting_lookup_setting_type (const char *name); -GType _nm_setting_lookup_setting_type_by_quark (GQuark error_quark); gint _nm_setting_compare_priority (gconstpointer a, gconstpointer b); typedef enum NMSettingUpdateSecretResult { diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c index a2842fa13a..6acb75ef27 100644 --- a/libnm-core/nm-setting.c +++ b/libnm-core/nm-setting.c @@ -225,8 +225,16 @@ _nm_setting_is_base_type (NMSetting *setting) return _nm_setting_type_is_base_type (G_OBJECT_TYPE (setting)); } +/** + * nm_setting_lookup_type: + * @name: a setting name + * + * Returns the #GType of the setting's class for a given setting name. + * + * Returns: the #GType of the setting's class + **/ GType -_nm_setting_lookup_setting_type (const char *name) +nm_setting_lookup_type (const char *name) { SettingInfo *info; @@ -238,8 +246,17 @@ _nm_setting_lookup_setting_type (const char *name) return info ? info->type : G_TYPE_INVALID; } +/** + * nm_setting_lookup_type_by_quark: + * @error_quark: a setting error quark + * + * Returns the #GType of the setting's class for a given setting error quark. + * Useful for figuring out which setting a returned error is for. + * + * Returns: the #GType of the setting's class + **/ GType -_nm_setting_lookup_setting_type_by_quark (GQuark error_quark) +nm_setting_lookup_type_by_quark (GQuark error_quark) { SettingInfo *info; GHashTableIter iter; diff --git a/libnm-core/nm-setting.h b/libnm-core/nm-setting.h index 154bd0c577..793d24ed5b 100644 --- a/libnm-core/nm-setting.h +++ b/libnm-core/nm-setting.h @@ -229,6 +229,9 @@ typedef void (*NMSettingValueIterFn) (NMSetting *setting, GType nm_setting_get_type (void); +GType nm_setting_lookup_type (const char *name); +GType nm_setting_lookup_type_by_quark (GQuark error_quark); + /** * NMSettingHashFlags: * @NM_SETTING_HASH_FLAG_ALL: hash all properties (including secrets) diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 986c235244..40f5081ff6 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -119,8 +119,6 @@ global: nm_connection_get_virtual_device_description; nm_connection_get_virtual_iface_name; nm_connection_is_type; - nm_connection_lookup_setting_type; - nm_connection_lookup_setting_type_by_quark; nm_connection_need_secrets; nm_connection_new; nm_connection_new_from_hash; @@ -678,6 +676,8 @@ global: nm_setting_ip6_config_remove_dns_search_by_value; nm_setting_ip6_config_remove_route; nm_setting_ip6_config_remove_route_by_value; + nm_setting_lookup_type; + nm_setting_lookup_type_by_quark; nm_setting_need_secrets; nm_setting_new_from_hash; nm_setting_olpc_mesh_error_get_type; diff --git a/libnm/nm-vpn-plugin.c b/libnm/nm-vpn-plugin.c index 289d27a0c5..cff632f9c5 100644 --- a/libnm/nm-vpn-plugin.c +++ b/libnm/nm-vpn-plugin.c @@ -532,7 +532,7 @@ impl_vpn_plugin_need_secrets (NMVpnPlugin *plugin, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, "The connection was invalid: '%s' / '%s' invalid: %d.", - g_type_name (nm_connection_lookup_setting_type_by_quark (cnfh_err->domain)), + g_type_name (nm_setting_lookup_type_by_quark (cnfh_err->domain)), cnfh_err->message, cnfh_err->code); g_error_free (cnfh_err); return FALSE; diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 1b88055c9d..e18224961e 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -835,7 +835,7 @@ claim_connection (NMSettings *self, if (!nm_connection_normalize (NM_CONNECTION (connection), NULL, NULL, &error)) { nm_log_warn (LOGD_SETTINGS, "plugin provided invalid connection: '%s' / '%s' invalid: %d", - g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)), + g_type_name (nm_setting_lookup_type_by_quark (error->domain)), error->message, error->code); g_error_free (error); return; diff --git a/src/settings/plugins/example/plugin.c b/src/settings/plugins/example/plugin.c index 23ce44c665..35fc4a0f63 100644 --- a/src/settings/plugins/example/plugin.c +++ b/src/settings/plugins/example/plugin.c @@ -199,7 +199,7 @@ update_connection_settings_commit_cb (NMSettingsConnection *orig, GError *error, if (error) { nm_log_warn (LOGD_SETTINGS, "%s: '%s' / '%s' invalid: %d", __func__, - error ? g_type_name (nm_connection_lookup_setting_type_by_quark (error->domain)) : "(none)", + error ? g_type_name (nm_setting_lookup_type_by_quark (error->domain)) : "(none)", (error && error->message) ? error->message : "(none)", error ? error->code : -1); g_clear_error (&error); diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index 2448e5521e..46dc108b32 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -1172,7 +1172,7 @@ read_setting (GKeyFile *file, const char *keyfile_path, const char *group) if (alias) group = alias; - type = nm_connection_lookup_setting_type (group); + type = nm_setting_lookup_type (group); if (type) { setting = g_object_new (type, NULL); nm_setting_enumerate_values (setting, read_one_setting_value, &info); @@ -1289,7 +1289,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error) NMSetting *base_setting; GType base_setting_type; - base_setting_type = nm_connection_lookup_setting_type (ctype); + base_setting_type = nm_setting_lookup_type (ctype); if (base_setting_type != G_TYPE_INVALID) { base_setting = (NMSetting *) g_object_new (base_setting_type, NULL); g_assert (base_setting); @@ -1334,7 +1334,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error) if (!nm_connection_verify (connection, &verify_error)) { g_set_error (error, KEYFILE_PLUGIN_ERROR, 0, "invalid or missing connection property '%s/%s'", - verify_error ? g_type_name (nm_connection_lookup_setting_type_by_quark (verify_error->domain)) : "(unknown)", + verify_error ? g_type_name (nm_setting_lookup_type_by_quark (verify_error->domain)) : "(unknown)", (verify_error && verify_error->message) ? verify_error->message : "(unknown)"); g_clear_error (&verify_error); g_object_unref (connection); From 4870786a2f37884f1c904e8c4077ed6037dd7e81 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 13 Aug 2014 09:07:38 -0400 Subject: [PATCH 3/6] libnm-core: add missing NMConnection signal class handlers Add class handlers for the "secrets-cleared" and "changed" signals. ("secrets-updated" already had one.) --- libnm-core/nm-connection.c | 6 ++++-- libnm-core/nm-connection.h | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 56879fe45d..60f2395871 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -2094,7 +2094,8 @@ nm_connection_class_init (NMConnectionClass *klass) g_signal_new (NM_CONNECTION_SECRETS_CLEARED, G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, + G_STRUCT_OFFSET (NMConnectionClass, secrets_cleared), + NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); @@ -2110,7 +2111,8 @@ nm_connection_class_init (NMConnectionClass *klass) g_signal_new (NM_CONNECTION_CHANGED, G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, + G_STRUCT_OFFSET (NMConnectionClass, changed), + NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } diff --git a/libnm-core/nm-connection.h b/libnm-core/nm-connection.h index b66094f5c3..b4a517d42e 100644 --- a/libnm-core/nm-connection.h +++ b/libnm-core/nm-connection.h @@ -126,7 +126,10 @@ typedef struct { GObjectClass parent; /* Signals */ - void (*secrets_updated) (NMConnection *connection, const char * setting); + void (*secrets_updated) (NMConnection *connection, + const char *setting); + void (*secrets_cleared) (NMConnection *connection); + void (*changed) (NMConnection *connection); /*< private >*/ gpointer padding[8]; From 5ed054aca9d30c13a7c47bd51cb475d857443b44 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 13 Aug 2014 17:43:10 -0400 Subject: [PATCH 4/6] libnm: get rid of redundant NMRemoteConnection properties NMRemoteConnection had two DBusGConnection properties (NMRemoteConnection:bus and NMRemoteConnection:dbus-connection) and two D-Bus path properties (NMConnection:path and NMRemoteConnection:dbus-path). The former of each pair were the traditional names, and the latter were added for compatibility with NMObject. In libnm, we can just drop NMRemoteConnection:bus, and use the NMObject-compatible :dbus-connection name instead. For the path properties, we need to rename either NMConnection:path or NMObject:dbus-path. Since NMObject already has "nm_object_get_path()" rather than "nm_object_get_dbus_path()", and it already mistakenly referred to the property as "NMObject:path" in the gtk-docs, it seemed to make sense to rename that one rather than the NMConnection one. (And then, for consistency, rename "nm_object_get_connection()" to "nm_object_get_dbus_connection()" to also match its property.) --- libnm/libnm.ver | 2 +- libnm/nm-client.c | 2 +- libnm/nm-object.c | 20 +++++----- libnm/nm-object.h | 6 +-- libnm/nm-remote-connection.c | 75 +----------------------------------- libnm/nm-remote-connection.h | 2 +- libnm/nm-remote-settings.c | 2 +- libnm/tests/test-nm-client.c | 2 +- 8 files changed, 20 insertions(+), 91 deletions(-) diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 40f5081ff6..778ae0c48c 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -341,7 +341,7 @@ global: nm_object_array_get_type; nm_object_error_get_type; nm_object_error_quark; - nm_object_get_connection; + nm_object_get_dbus_connection; nm_object_get_path; nm_object_get_type; nm_remote_connection_commit_changes; diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 1ba44f7842..c6133d6c22 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -1660,7 +1660,7 @@ constructor (GType type, const char *dbus_path; for (i = 0; i < n_construct_params; i++) { - if (strcmp (construct_params[i].pspec->name, NM_OBJECT_DBUS_PATH) == 0) { + if (strcmp (construct_params[i].pspec->name, NM_OBJECT_PATH) == 0) { dbus_path = g_value_get_string (construct_params[i].value); if (dbus_path == NULL) { g_value_set_static_string (construct_params[i].value, NM_DBUS_PATH); diff --git a/libnm/nm-object.c b/libnm/nm-object.c index d0e88994b2..5afca64413 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -83,7 +83,7 @@ typedef struct { enum { PROP_0, PROP_DBUS_CONNECTION, - PROP_DBUS_PATH, + PROP_PATH, PROP_NM_RUNNING, LAST_PROP @@ -357,7 +357,7 @@ set_property (GObject *object, guint prop_id, /* Construct only */ priv->connection = g_value_dup_boxed (value); break; - case PROP_DBUS_PATH: + case PROP_PATH: /* Construct only */ priv->path = g_value_dup_string (value); break; @@ -377,7 +377,7 @@ get_property (GObject *object, guint prop_id, case PROP_DBUS_CONNECTION: g_value_set_boxed (value, priv->connection); break; - case PROP_DBUS_PATH: + case PROP_PATH: g_value_set_string (value, priv->path); break; case PROP_NM_RUNNING: @@ -422,11 +422,11 @@ nm_object_class_init (NMObjectClass *nm_object_class) /** * NMObject:path: * - * The DBus object path. + * The D-Bus object path. **/ g_object_class_install_property - (object_class, PROP_DBUS_PATH, - g_param_spec_string (NM_OBJECT_DBUS_PATH, "", "", + (object_class, PROP_PATH, + g_param_spec_string (NM_OBJECT_PATH, "", "", NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | @@ -481,7 +481,7 @@ nm_object_async_initable_iface_init (GAsyncInitableIface *iface) } /** - * nm_object_get_connection: + * nm_object_get_dbus_connection: * @object: a #NMObject * * Gets the #NMObject's DBusGConnection. @@ -489,7 +489,7 @@ nm_object_async_initable_iface_init (GAsyncInitableIface *iface) * Returns: (transfer none): the connection **/ DBusGConnection * -nm_object_get_connection (NMObject *object) +nm_object_get_dbus_connection (NMObject *object) { g_return_val_if_fail (NM_IS_OBJECT (object), NULL); @@ -596,7 +596,7 @@ _nm_object_create (GType type, DBusGConnection *connection, const char *path) object = g_object_new (type, NM_OBJECT_DBUS_CONNECTION, connection, - NM_OBJECT_DBUS_PATH, path, + NM_OBJECT_PATH, path, NULL); if (NM_IS_OBJECT (object)) _nm_object_cache_add (NM_OBJECT (object)); @@ -678,7 +678,7 @@ async_got_type (GType type, gpointer user_data) object = g_object_new (type, NM_OBJECT_DBUS_CONNECTION, async_data->connection, - NM_OBJECT_DBUS_PATH, async_data->path, + NM_OBJECT_PATH, async_data->path, NULL); if (NM_IS_OBJECT (object)) _nm_object_cache_add (NM_OBJECT (object)); diff --git a/libnm/nm-object.h b/libnm/nm-object.h index 6e263d488f..1d93e2a6a0 100644 --- a/libnm/nm-object.h +++ b/libnm/nm-object.h @@ -58,7 +58,7 @@ typedef enum { GQuark nm_object_error_quark (void); #define NM_OBJECT_DBUS_CONNECTION "dbus-connection" -#define NM_OBJECT_DBUS_PATH "dbus-path" +#define NM_OBJECT_PATH "path" typedef struct { GObject parent; @@ -85,8 +85,8 @@ typedef struct { GType nm_object_get_type (void); -DBusGConnection *nm_object_get_connection (NMObject *object); -const char *nm_object_get_path (NMObject *object); +DBusGConnection *nm_object_get_dbus_connection (NMObject *object); +const char *nm_object_get_path (NMObject *object); G_END_DECLS diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index 71dd8c62d0..d188ed6d0a 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -33,9 +33,6 @@ #include "nm-glib-compat.h" #include "nm-dbus-helpers-private.h" -#define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection" -#define NM_REMOTE_CONNECTION_DBUS_PATH "dbus-path" - static void nm_remote_connection_initable_iface_init (GInitableIface *iface); static void nm_remote_connection_async_initable_iface_init (GAsyncInitableIface *iface); @@ -46,9 +43,7 @@ G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_CONNE enum { PROP_0, - PROP_BUS, PROP_DBUS_CONNECTION, - PROP_DBUS_PATH, PROP_UNSAVED, PROP_VISIBLE, @@ -689,43 +684,6 @@ nm_remote_connection_init (NMRemoteConnection *self) { } -static GObject * -constructor (GType type, guint n_construct_properties, - GObjectConstructParam *construct_properties) -{ - static GParamSpec *nm_connection_path = NULL; - static GParamSpec *nm_remote_connection_dbus_path = NULL; - int i, path_index = -1, dbus_path_index = -1; - - if (!nm_connection_path) { - nm_connection_path = - g_object_class_find_property (g_type_class_peek (NM_TYPE_CONNECTION), - NM_CONNECTION_PATH); - nm_remote_connection_dbus_path = - g_object_class_find_property (g_type_class_peek (NM_TYPE_REMOTE_CONNECTION), - NM_REMOTE_CONNECTION_DBUS_PATH); - } - - /* Find the two properties */ - for (i = 0; i < n_construct_properties; i++) { - if (construct_properties[i].pspec == nm_connection_path) - path_index = i; - else if (construct_properties[i].pspec == nm_remote_connection_dbus_path) - dbus_path_index = i; - } - g_assert (path_index != -1 && dbus_path_index != -1); - - /* If NMRemoteConnection:dbus-path is set, and NMConnection:path - * is not, then copy the value of the former to the latter. - */ - if (g_value_get_string (construct_properties[dbus_path_index].value) && - !g_value_get_string (construct_properties[path_index].value)) - construct_properties[path_index].value = construct_properties[dbus_path_index].value; - - return G_OBJECT_CLASS (nm_remote_connection_parent_class)-> - constructor (type, n_construct_properties, construct_properties); -} - static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) @@ -750,21 +708,9 @@ set_property (GObject *object, guint prop_id, NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); switch (prop_id) { - case PROP_BUS: case PROP_DBUS_CONNECTION: /* Construct only */ - /* priv->bus is set from either of two properties so that it (a) remains - * backwards compatible with the previous "bus" property, and that (b) - * it can be created just like an NMObject using the "dbus-connection", - * even though it's not a subclass of NMObject. So don't overwrite the - * a valid value that the other property set with NULL, if one of the - * properties isn't specified at construction time. - */ - if (!priv->bus) - priv->bus = g_value_dup_boxed (value); - break; - case PROP_DBUS_PATH: - /* Don't need to do anything; see constructor(). */ + priv->bus = g_value_dup_boxed (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -802,26 +748,16 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) g_type_class_add_private (object_class, sizeof (NMRemoteConnectionPrivate)); /* virtual methods */ - object_class->constructor = constructor; object_class->get_property = get_property; object_class->set_property = set_property; object_class->dispose = dispose; /* Properties */ /** - * NMRemoteConnection:bus: + * NMRemoteConnection:dbus-connection: * * The #DBusGConnection that the #NMRemoteConnection is connected to. */ - g_object_class_install_property - (object_class, PROP_BUS, - g_param_spec_boxed (NM_REMOTE_CONNECTION_BUS, "", "", - DBUS_TYPE_G_CONNECTION, - G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); - - /* These are needed so _nm_object_create() can create NMRemoteConnections */ g_object_class_install_property (object_class, PROP_DBUS_CONNECTION, g_param_spec_boxed (NM_REMOTE_CONNECTION_DBUS_CONNECTION, "", "", @@ -829,13 +765,6 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property - (object_class, PROP_DBUS_PATH, - g_param_spec_string (NM_REMOTE_CONNECTION_DBUS_PATH, "", "", - NULL, - G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); /** * NMRemoteConnection:unsaved: diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h index 58ffe03bc4..65c154605e 100644 --- a/libnm/nm-remote-connection.h +++ b/libnm/nm-remote-connection.h @@ -55,7 +55,7 @@ typedef enum { GQuark nm_remote_connection_error_quark (void); /* Properties */ -#define NM_REMOTE_CONNECTION_BUS "bus" +#define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection" #define NM_REMOTE_CONNECTION_UNSAVED "unsaved" #define NM_REMOTE_CONNECTION_VISIBLE "visible" diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c index be512c665d..def901b658 100644 --- a/libnm/nm-remote-settings.c +++ b/libnm/nm-remote-settings.c @@ -887,7 +887,7 @@ constructor (GType type, /* Fill in the right D-Bus path if none was specified */ for (i = 0; i < n_construct_params; i++) { - if (strcmp (construct_params[i].pspec->name, NM_OBJECT_DBUS_PATH) == 0) { + if (strcmp (construct_params[i].pspec->name, NM_OBJECT_PATH) == 0) { dbus_path = g_value_get_string (construct_params[i].value); if (dbus_path == NULL) { g_value_set_static_string (construct_params[i].value, NM_DBUS_PATH_SETTINGS); diff --git a/libnm/tests/test-nm-client.c b/libnm/tests/test-nm-client.c index 3f1e95496c..2a0d6bf1df 100644 --- a/libnm/tests/test-nm-client.c +++ b/libnm/tests/test-nm-client.c @@ -52,7 +52,7 @@ test_client_new (void) client = g_object_new (NM_TYPE_CLIENT, NM_OBJECT_DBUS_CONNECTION, bus, - NM_OBJECT_DBUS_PATH, NM_DBUS_PATH, + NM_OBJECT_PATH, NM_DBUS_PATH, NULL); g_assert (client != NULL); From e1ba13a426bf6fc34043822d772384559b0831cb Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 13 Aug 2014 14:34:29 -0400 Subject: [PATCH 5/6] libnm-core, libnm, core: make NMConnection an interface The fact that NMRemoteConnection has to be an NMConnection and therefore can't be an NMObject means that it needs to reimplement bits of NMObject functionality (and likewise NMObject needs some special magic to deal with it). Likewise, we will need a daemon-side equivalent of NMObject as part of the gdbus port, and we would want NMSettingsConnection to be able to inherit from this as well. Solve this problem by making NMConnection into an interface, and having NMRemoteConnection and NMSettingsConnection implement it. (We use some hacks to keep the GHashTable of NMSettings objects inside nm-connection.c rather than having to be implemented by the implementations.) Since NMConnection is no longer an instantiable type, this adds NMSimpleConnection to replace the various non-D-Bus-based uses of NMConnection throughout the code. nm_connection_new() becomes nm_simple_connection_new(), nm_connection_new_from_hash() becomes nm_simple_connection_new_from_hash(), and nm_connection_duplicate() becomes nm_simple_connection_new_clone(). --- callouts/tests/test-dispatcher-envp.c | 2 +- clients/cli/connections.c | 6 +- clients/cli/devices.c | 4 +- clients/tui/nm-editor-utils.c | 2 +- clients/tui/nmt-editor.c | 2 +- examples/C/glib/add-connection-dbus-glib.c | 2 +- examples/C/glib/add-connection-libnm.c | 2 +- .../C/glib/get-active-connections-dbus-glib.c | 2 +- include/nm-test-utils.h | 4 +- libnm-core/Makefile.libnm-core | 2 + libnm-core/nm-connection.c | 196 +++--------------- libnm-core/nm-connection.h | 33 +-- libnm-core/nm-simple-connection.c | 110 ++++++++++ libnm-core/nm-simple-connection.h | 61 ++++++ libnm-core/nm-utils.h | 1 + libnm-core/tests/test-general.c | 76 +++---- libnm-core/tests/test-secrets.c | 6 +- libnm/NetworkManager.h | 1 + libnm/libnm.ver | 7 +- libnm/nm-remote-connection.c | 30 ++- libnm/nm-remote-connection.h | 5 +- libnm/nm-remote-settings.c | 2 +- libnm/nm-secret-agent.c | 3 +- libnm/nm-vpn-plugin.c | 7 +- libnm/tests/test-nm-client.c | 6 +- libnm/tests/test-remote-settings-client.c | 6 +- src/devices/bluetooth/nm-bluez-device.c | 2 +- src/devices/nm-device.c | 2 +- src/devices/wifi/tests/test-wifi-ap-utils.c | 44 ++-- src/nm-manager.c | 2 +- src/settings/nm-agent-manager.c | 5 +- src/settings/nm-secret-agent.c | 1 + src/settings/nm-settings-connection.c | 24 ++- src/settings/nm-settings-connection.h | 4 +- src/settings/nm-settings.c | 18 +- src/settings/plugins/ifcfg-rh/reader.c | 16 +- .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 90 ++++---- .../plugins/ifnet/connection_parser.c | 2 +- .../plugins/ifupdown/tests/test-ifupdown.c | 6 +- src/settings/plugins/keyfile/reader.c | 2 +- .../plugins/keyfile/tests/test-keyfile.c | 30 +-- src/settings/tests/test-wired-defname.c | 4 +- .../tests/test-supplicant-config.c | 6 +- src/tests/test-general.c | 18 +- src/vpn-manager/nm-vpn-connection.c | 2 +- 45 files changed, 455 insertions(+), 401 deletions(-) create mode 100644 libnm-core/nm-simple-connection.c create mode 100644 libnm-core/nm-simple-connection.h diff --git a/callouts/tests/test-dispatcher-envp.c b/callouts/tests/test-dispatcher-envp.c index 97b839b5f3..1d9792fe9e 100644 --- a/callouts/tests/test-dispatcher-envp.c +++ b/callouts/tests/test-dispatcher-envp.c @@ -156,7 +156,7 @@ parse_main (GKeyFile *kf, if (id == NULL) return FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); s_con = (NMSettingConnection *) nm_setting_connection_new (); g_assert (s_con); diff --git a/clients/cli/connections.c b/clients/cli/connections.c index e4de756a85..e59e1b46f1 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -5252,7 +5252,7 @@ do_connection_add (NmCli *nmc, int argc, char **argv) } /* Create a new connection object */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Build up the 'connection' setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -7889,7 +7889,7 @@ do_connection_edit (NmCli *nmc, int argc, char **argv) /* Duplicate the connection and use that so that we need not * differentiate existing vs. new later */ - connection = nm_connection_duplicate (found_con); + connection = nm_simple_connection_new_clone (found_con); s_con = nm_connection_get_setting_connection (connection); g_assert (s_con); @@ -7926,7 +7926,7 @@ do_connection_edit (NmCli *nmc, int argc, char **argv) g_free (tmp_str); /* Create a new connection object */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Build up the 'connection' setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); diff --git a/clients/cli/devices.c b/clients/cli/devices.c index 9db9d59a98..a4933870b9 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -2256,7 +2256,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) /* If there are some connection data from user, create a connection and * fill them into proper settings. */ if (con_name || private || bssid2_arr || password) - connection = nm_connection_new (); + connection = nm_simple_connection_new (); if (con_name || private) { s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -2291,7 +2291,7 @@ do_device_wifi_connect_network (NmCli *nmc, int argc, char **argv) if (password) { if (!connection) - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); nm_connection_add_setting (connection, NM_SETTING (s_wsec)); diff --git a/clients/tui/nm-editor-utils.c b/clients/tui/nm-editor-utils.c index 0abcf411b0..ce5372d6f9 100644 --- a/clients/tui/nm-editor-utils.c +++ b/clients/tui/nm-editor-utils.c @@ -345,7 +345,7 @@ nm_editor_utils_create_connection (GType type, return NULL; } - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); nm_connection_add_setting (connection, NM_SETTING (s_con)); diff --git a/clients/tui/nmt-editor.c b/clients/tui/nmt-editor.c index c200045ab9..50c8588ad4 100644 --- a/clients/tui/nmt-editor.c +++ b/clients/tui/nmt-editor.c @@ -183,7 +183,7 @@ build_edit_connection (NMConnection *orig_connection) const char *setting_name; NmtSyncOp op; - edit_connection = nm_connection_duplicate (orig_connection); + edit_connection = nm_simple_connection_new_clone (orig_connection); if (!NM_IS_REMOTE_CONNECTION (orig_connection)) return edit_connection; diff --git a/examples/C/glib/add-connection-dbus-glib.c b/examples/C/glib/add-connection-dbus-glib.c index a50e8ba6c1..beb0beca4d 100644 --- a/examples/C/glib/add-connection-dbus-glib.c +++ b/examples/C/glib/add-connection-dbus-glib.c @@ -46,7 +46,7 @@ add_connection (DBusGProxy *proxy, const char *con_name) GError *error = NULL; /* Create a new connection object */ - connection = (NMConnection *) nm_connection_new (); + connection = (NMConnection *) nm_simple_connection_new (); /* Build up the 'connection' Setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); diff --git a/examples/C/glib/add-connection-libnm.c b/examples/C/glib/add-connection-libnm.c index 59a51ba201..f390bfa159 100644 --- a/examples/C/glib/add-connection-libnm.c +++ b/examples/C/glib/add-connection-libnm.c @@ -62,7 +62,7 @@ add_connection (NMRemoteSettings *settings, GMainLoop *loop, const char *con_nam gboolean success; /* Create a new connection object */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Build up the 'connection' Setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); diff --git a/examples/C/glib/get-active-connections-dbus-glib.c b/examples/C/glib/get-active-connections-dbus-glib.c index 65df85b518..0e81ca9c1c 100644 --- a/examples/C/glib/get-active-connections-dbus-glib.c +++ b/examples/C/glib/get-active-connections-dbus-glib.c @@ -66,7 +66,7 @@ print_connection (DBusGConnection *bus, const char *path) /* Using the raw configuration, create an NMConnection object for it. This * step also verifies that the data we got from NetworkManager are valid. */ - connection = nm_connection_new_from_hash (hash, &error); + connection = nm_simple_connection_new_from_hash (hash, &error); if (!connection) { g_warning ("Received invalid connection data: %s", error->message); g_error_free (error); diff --git a/include/nm-test-utils.h b/include/nm-test-utils.h index 5587e4ec4c..ccf9cac970 100644 --- a/include/nm-test-utils.h +++ b/include/nm-test-utils.h @@ -680,7 +680,7 @@ nmtst_ip6_config_clone (NMIP6Config *config) #endif -#ifdef __NM_CONNECTION_H__ +#ifdef __NM_SIMPLE_CONNECTION_H__ inline static NMConnection * nmtst_create_minimal_connection (const char *id, const char *uuid, const char *type, NMSettingConnection **out_s_con) @@ -706,7 +706,7 @@ nmtst_create_minimal_connection (const char *id, const char *uuid, const char *t g_assert (NM_IS_SETTING (s_base)); } - con = nm_connection_new (); + con = nm_simple_connection_new (); s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); g_object_set (s_con, diff --git a/libnm-core/Makefile.libnm-core b/libnm-core/Makefile.libnm-core index 57783b613a..49af47d7c3 100644 --- a/libnm-core/Makefile.libnm-core +++ b/libnm-core/Makefile.libnm-core @@ -37,6 +37,7 @@ libnm_core_headers = \ $(core)/nm-setting-wireless-security.h \ $(core)/nm-setting-wireless.h \ $(core)/nm-setting.h \ + $(core)/nm-simple-connection.h \ $(core)/nm-utils.h \ $(core)/nm-vpn-dbus-interface.h @@ -78,6 +79,7 @@ libnm_core_sources = \ $(core)/nm-setting-wireless-security.c \ $(core)/nm-setting-wireless.c \ $(core)/nm-setting.c \ + $(core)/nm-simple-connection.c \ $(core)/nm-utils.c \ $(core)/nm-value-transforms.c diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 60f2395871..6c6cf9fe36 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -92,22 +92,18 @@ nm_connection_error_quark (void) } typedef struct { + NMConnection *self; + GHashTable *settings; /* D-Bus path of the connection, if any */ char *path; } NMConnectionPrivate; -#define NM_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONNECTION, NMConnectionPrivate)) +static NMConnectionPrivate *nm_connection_get_private (NMConnection *connection); +#define NM_CONNECTION_GET_PRIVATE(o) (nm_connection_get_private ((NMConnection *)o)) -G_DEFINE_TYPE (NMConnection, nm_connection, G_TYPE_OBJECT) - -enum { - PROP_0, - PROP_PATH, - - LAST_PROP -}; +G_DEFINE_INTERFACE (NMConnection, nm_connection, G_TYPE_OBJECT) enum { SECRETS_UPDATED, @@ -1368,78 +1364,6 @@ nm_connection_get_virtual_iface_name (NMConnection *connection) return nm_setting_get_virtual_iface_name (base); } -/** - * nm_connection_new: - * - * Creates a new #NMConnection object with no #NMSetting objects. - * - * Returns: the new empty #NMConnection object - **/ -NMConnection * -nm_connection_new (void) -{ - return (NMConnection *) g_object_new (NM_TYPE_CONNECTION, NULL); -} - -/** - * nm_connection_new_from_hash: - * @hash: (element-type utf8 GLib.HashTable): the #GHashTable describing - * the connection - * @error: on unsuccessful return, an error - * - * Creates a new #NMConnection from a hash table describing the connection. See - * nm_connection_to_hash() for a description of the expected hash table. - * - * Returns: the new #NMConnection object, populated with settings created - * from the values in the hash table, or %NULL if the connection failed to - * validate - **/ -NMConnection * -nm_connection_new_from_hash (GHashTable *hash, GError **error) -{ - NMConnection *connection; - - g_return_val_if_fail (hash != NULL, NULL); - - if (!validate_permissions_type (hash, error)) - return NULL; - - connection = nm_connection_new (); - if (!hash_to_connection (connection, hash, error)) { - g_object_unref (connection); - return NULL; - } - return connection; -} - -/** - * nm_connection_duplicate: - * @connection: the #NMConnection to duplicate - * - * Duplicates a #NMConnection. - * - * Returns: (transfer full): a new #NMConnection containing the same settings and properties - * as the source #NMConnection - **/ -NMConnection * -nm_connection_duplicate (NMConnection *connection) -{ - NMConnection *dup; - GHashTableIter iter; - NMSetting *setting; - - g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); - - dup = nm_connection_new (); - nm_connection_set_path (dup, nm_connection_get_path (connection)); - - g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) - nm_connection_add_setting (dup, nm_setting_duplicate (setting)); - - return dup; -} - /** * nm_connection_get_uuid: * @connection: the #NMConnection @@ -1965,103 +1889,41 @@ nm_connection_get_setting_vlan (NMConnection *connection) /*************************************************************/ static void -nm_connection_init (NMConnection *connection) +nm_connection_private_free (NMConnectionPrivate *priv) { - NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection); - - priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); -} - -static void -dispose (GObject *object) -{ - NMConnection *self = NM_CONNECTION (object); - NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (self); + NMConnection *self = priv->self; GHashTableIter iter; NMSetting *setting; g_hash_table_iter_init (&iter, priv->settings); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) { + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) g_signal_handlers_disconnect_by_func (setting, setting_changed_cb, self); - g_hash_table_iter_remove (&iter); - } - - G_OBJECT_CLASS (nm_connection_parent_class)->dispose (object); -} - -static void -finalize (GObject *object) -{ - NMConnection *connection = NM_CONNECTION (object); - NMConnectionPrivate *priv = NM_CONNECTION_GET_PRIVATE (connection); - g_hash_table_destroy (priv->settings); - g_free (priv->path); - G_OBJECT_CLASS (nm_connection_parent_class)->finalize (object); + g_slice_free (NMConnectionPrivate, priv); } -static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) +static NMConnectionPrivate * +nm_connection_get_private (NMConnection *connection) { - NMConnection *connection = NM_CONNECTION (object); + NMConnectionPrivate *priv; - switch (prop_id) { - case PROP_PATH: - nm_connection_set_path (connection, g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; + priv = g_object_get_data (G_OBJECT (connection), "NMConnectionPrivate"); + if (!priv) { + priv = g_slice_new0 (NMConnectionPrivate); + g_object_set_data_full (G_OBJECT (connection), "NMConnectionPrivate", + priv, (GDestroyNotify) nm_connection_private_free); + + priv->self = connection; + priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref); } + + return priv; } static void -get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) +nm_connection_default_init (NMConnectionInterface *iface) { - NMConnection *connection = NM_CONNECTION (object); - - switch (prop_id) { - case PROP_PATH: - g_value_set_string (value, nm_connection_get_path (connection)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -nm_connection_class_init (NMConnectionClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (NMConnectionPrivate)); - - /* virtual methods */ - object_class->set_property = set_property; - object_class->get_property = get_property; - object_class->dispose = dispose; - object_class->finalize = finalize; - - /* Properties */ - - /** - * NMConnection:path: - * - * The connection's D-Bus path, used only by the calling process as a record - * of the D-Bus path of the connection as provided by a settings service. - **/ - g_object_class_install_property - (object_class, PROP_PATH, - g_param_spec_string (NM_CONNECTION_PATH, "", "", - NULL, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT | - G_PARAM_STATIC_STRINGS)); - /* Signals */ /** @@ -2075,9 +1937,9 @@ nm_connection_class_init (NMConnectionClass *klass) */ signals[SECRETS_UPDATED] = g_signal_new (NM_CONNECTION_SECRETS_UPDATED, - G_OBJECT_CLASS_TYPE (object_class), + NM_TYPE_CONNECTION, G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMConnectionClass, secrets_updated), + G_STRUCT_OFFSET (NMConnectionInterface, secrets_updated), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, @@ -2092,9 +1954,9 @@ nm_connection_class_init (NMConnectionClass *klass) */ signals[SECRETS_CLEARED] = g_signal_new (NM_CONNECTION_SECRETS_CLEARED, - G_OBJECT_CLASS_TYPE (object_class), + NM_TYPE_CONNECTION, G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMConnectionClass, secrets_cleared), + G_STRUCT_OFFSET (NMConnectionInterface, secrets_cleared), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); @@ -2109,9 +1971,9 @@ nm_connection_class_init (NMConnectionClass *klass) */ signals[CHANGED] = g_signal_new (NM_CONNECTION_CHANGED, - G_OBJECT_CLASS_TYPE (object_class), + NM_TYPE_CONNECTION, G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMConnectionClass, changed), + G_STRUCT_OFFSET (NMConnectionInterface, changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); diff --git a/libnm-core/nm-connection.h b/libnm-core/nm-connection.h index b4a517d42e..b06660ae9d 100644 --- a/libnm-core/nm-connection.h +++ b/libnm-core/nm-connection.h @@ -60,21 +60,16 @@ G_BEGIN_DECLS -#define NM_TYPE_CONNECTION (nm_connection_get_type ()) -#define NM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONNECTION, NMConnection)) -#define NM_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_CONNECTION, NMConnectionClass)) -#define NM_IS_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CONNECTION)) -#define NM_IS_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CONNECTION)) -#define NM_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CONNECTION, NMConnectionClass)) +#define NM_TYPE_CONNECTION (nm_connection_get_type ()) +#define NM_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_CONNECTION, NMConnection)) +#define NM_IS_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_CONNECTION)) +#define NM_CONNECTION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NM_TYPE_CONNECTION, NMConnectionClass)) /* Signals */ #define NM_CONNECTION_SECRETS_UPDATED "secrets-updated" #define NM_CONNECTION_SECRETS_CLEARED "secrets-cleared" #define NM_CONNECTION_CHANGED "changed" -/* Properties */ -#define NM_CONNECTION_PATH "path" - /** * NMConnectionError: * @NM_CONNECTION_ERROR_UNKNOWN: unknown or unclassified error @@ -115,15 +110,13 @@ GQuark nm_connection_error_quark (void); /** * NMConnection: * - * The NMConnection struct contains only private data. - * It should only be accessed through the functions described below. + * NMConnection is the interface implemented by #NMRemoteConnection on the + * client side, and #NMSettingsConnection on the daemon side. */ -typedef struct { - GObject parent; -} NMConnection; +typedef struct _NMConnection NMConnection; typedef struct { - GObjectClass parent; + GTypeInterface parent; /* Signals */ void (*secrets_updated) (NMConnection *connection, @@ -131,18 +124,10 @@ typedef struct { void (*secrets_cleared) (NMConnection *connection); void (*changed) (NMConnection *connection); - /*< private >*/ - gpointer padding[8]; -} NMConnectionClass; +} NMConnectionInterface; GType nm_connection_get_type (void); -NMConnection *nm_connection_new (void); - -NMConnection *nm_connection_new_from_hash (GHashTable *hash, GError **error); - -NMConnection *nm_connection_duplicate (NMConnection *connection); - void nm_connection_add_setting (NMConnection *connection, NMSetting *setting); diff --git a/libnm-core/nm-simple-connection.c b/libnm-core/nm-simple-connection.c new file mode 100644 index 0000000000..65592eb40a --- /dev/null +++ b/libnm-core/nm-simple-connection.c @@ -0,0 +1,110 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * Copyright 2007 - 2008 Novell, Inc. + * Copyright 2007 - 2014 Red Hat, Inc. + */ + +#include "nm-simple-connection.h" + +static void nm_simple_connection_interface_init (NMConnectionInterface *iface); + +G_DEFINE_TYPE_WITH_CODE (NMSimpleConnection, nm_simple_connection, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_simple_connection_interface_init); + ) + +static void +nm_simple_connection_init (NMSimpleConnection *self) +{ +} + +/** + * nm_simple_connection_new: + * + * Creates a new #NMSimpleConnection object with no #NMSetting objects. An + * #NMSimpleConnection does not directly represent a D-Bus-exported connection, + * but might be used in the process of creating a new one. + * + * Returns: (transfer full): the new empty #NMConnection object + **/ +NMConnection * +nm_simple_connection_new (void) +{ + return (NMConnection *) g_object_new (NM_TYPE_SIMPLE_CONNECTION, NULL); +} + +/** + * nm_simple_connection_new_from_hash: + * @hash: (element-type utf8 GLib.HashTable): the #GHashTable describing + * the connection + * @error: on unsuccessful return, an error + * + * Creates a new #NMSimpleConnection from a hash table describing the + * connection. See nm_connection_to_hash() for a description of the expected + * hash table. + * + * Returns: (transfer full): the new #NMSimpleConnection object, populated with + * settings created from the values in the hash table, or %NULL if the + * connection failed to validate + **/ +NMConnection * +nm_simple_connection_new_from_hash (GHashTable *hash, GError **error) +{ + NMConnection *connection; + + g_return_val_if_fail (hash != NULL, NULL); + + connection = nm_simple_connection_new (); + if (!nm_connection_replace_settings (connection, hash, error)) { + g_object_unref (connection); + return NULL; + } + return connection; +} + +/** + * nm_simple_connection_new_clone: + * @connection: the #NMConnection to clone + * + * Clones an #NMConnection as an #NMSimpleConnection. + * + * Returns: (transfer full): a new #NMConnection containing the same settings + * and properties as the source #NMConnection + **/ +NMConnection * +nm_simple_connection_new_clone (NMConnection *connection) +{ + NMConnection *clone; + + g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); + + clone = nm_simple_connection_new (); + nm_connection_set_path (clone, nm_connection_get_path (connection)); + nm_connection_replace_settings_from_connection (clone, connection, NULL); + + return clone; +} + +static void +nm_simple_connection_class_init (NMSimpleConnectionClass *simple_class) +{ +} + +static void +nm_simple_connection_interface_init (NMConnectionInterface *iface) +{ +} diff --git a/libnm-core/nm-simple-connection.h b/libnm-core/nm-simple-connection.h new file mode 100644 index 0000000000..e6daee66e4 --- /dev/null +++ b/libnm-core/nm-simple-connection.h @@ -0,0 +1,61 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + * Copyright 2014 Red Hat, Inc. + */ + +#ifndef __NM_SIMPLE_CONNECTION_H__ +#define __NM_SIMPLE_CONNECTION_H__ + +#if !defined (__NETWORKMANAGER_H_INSIDE__) && !defined (NETWORKMANAGER_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +#define NM_TYPE_SIMPLE_CONNECTION (nm_simple_connection_get_type ()) +#define NM_SIMPLE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnection)) +#define NM_SIMPLE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnectionClass)) +#define NM_IS_SIMPLE_CONNECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_SIMPLE_CONNECTION)) +#define NM_IS_SIMPLE_CONNECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_SIMPLE_CONNECTION)) +#define NM_SIMPLE_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_SIMPLE_CONNECTION, NMSimpleConnectionClass)) + +typedef struct { + GObject parent; +} NMSimpleConnection; + +typedef struct { + GObjectClass parent_class; + + /*< private >*/ + gpointer padding[4]; +} NMSimpleConnectionClass; + +GType nm_simple_connection_get_type (void); + +NMConnection *nm_simple_connection_new (void); + +NMConnection *nm_simple_connection_new_from_hash (GHashTable *hash, + GError **error); + +NMConnection *nm_simple_connection_new_clone (NMConnection *connection); + +G_END_DECLS + +#endif /* __NM_SIMPLE_CONNECTION__ */ diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h index 36319d0ee0..038559d1fd 100644 --- a/libnm-core/nm-utils.h +++ b/libnm-core/nm-utils.h @@ -32,6 +32,7 @@ #include #include "nm-connection.h" +#include "nm-simple-connection.h" #include "nm-core-enum-types.h" G_BEGIN_DECLS diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 0f2f983a8c..70effba4c0 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -191,7 +191,7 @@ test_setting_vpn_update_secrets (void) const char *val1 = "value1"; const char *val2 = "value2"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); ASSERT (connection != NULL, "vpn-update-secrets", "error creating connection"); @@ -755,7 +755,7 @@ test_connection_to_hash_setting_name (void) NMSettingWirelessSecurity *s_wsec; GHashTable *hash; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_wsec = make_test_wsec_setting ("connection-to-hash-setting-name"); nm_connection_add_setting (connection, NM_SETTING (s_wsec)); @@ -799,7 +799,7 @@ new_test_connection (void) char *uuid; guint64 timestamp = time (NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); setting = nm_setting_connection_new (); uuid = nm_utils_uuid_generate (); @@ -944,7 +944,7 @@ test_connection_replace_settings_from_connection () connection = new_test_connection (); g_assert (connection); - replacement = nm_connection_new (); + replacement = nm_simple_connection_new (); g_assert (replacement); /* New connection setting */ @@ -1006,7 +1006,7 @@ test_connection_new_from_hash () g_assert (new_settings); /* Replace settings and test */ - connection = nm_connection_new_from_hash (new_settings, &error); + connection = nm_simple_connection_new_from_hash (new_settings, &error); g_assert_no_error (error); g_assert (connection); @@ -1264,7 +1264,7 @@ test_connection_compare_same (void) NMConnection *a, *b; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); g_assert (nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); g_object_unref (a); g_object_unref (b); @@ -1277,7 +1277,7 @@ test_connection_compare_key_only_in_a (void) NMSettingConnection *s_con; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION); g_assert (s_con); g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL); @@ -1293,7 +1293,7 @@ test_connection_compare_setting_only_in_a (void) NMConnection *a, *b; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); nm_connection_remove_setting (b, NM_TYPE_SETTING_IP4_CONFIG); g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); g_object_unref (a); @@ -1307,7 +1307,7 @@ test_connection_compare_key_only_in_b (void) NMSettingConnection *s_con; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); s_con = (NMSettingConnection *) nm_connection_get_setting (b, NM_TYPE_SETTING_CONNECTION); g_assert (s_con); g_object_set (s_con, NM_SETTING_CONNECTION_TIMESTAMP, (guint64) 0, NULL); @@ -1323,7 +1323,7 @@ test_connection_compare_setting_only_in_b (void) NMConnection *a, *b; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); nm_connection_remove_setting (a, NM_TYPE_SETTING_IP4_CONFIG); g_assert (!nm_connection_compare (a, b, NM_SETTING_COMPARE_FLAG_EXACT)); g_object_unref (a); @@ -1448,7 +1448,7 @@ test_connection_diff_same (void) gboolean same; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); same = nm_connection_diff (a, b, NM_SETTING_COMPARE_FLAG_EXACT, &out_diffs); g_assert (same == TRUE); @@ -1472,7 +1472,7 @@ test_connection_diff_different (void) }; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); s_ip4 = nm_connection_get_setting_ip4_config (a); g_assert (s_ip4); g_object_set (G_OBJECT (s_ip4), @@ -1512,7 +1512,7 @@ test_connection_diff_no_secrets (void) NULL); nm_connection_add_setting (a, s_pppoe); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); /* Add a secret to B */ s_pppoe = NM_SETTING (nm_connection_get_setting_pppoe (b)); @@ -1557,7 +1557,7 @@ test_connection_diff_inferrable (void) }; a = new_test_connection (); - b = nm_connection_duplicate (a); + b = nm_simple_connection_new_clone (a); /* Change the UUID, wired MTU, and set ignore-auto-dns */ s_con = nm_connection_get_setting_connection (a); @@ -1636,7 +1636,7 @@ test_connection_good_base_types (void) const guint8 bdaddr[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; /* Try a basic wired connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_WIRED_SETTING_NAME); setting = nm_setting_wired_new (); nm_connection_add_setting (connection, setting); @@ -1647,7 +1647,7 @@ test_connection_good_base_types (void) g_object_unref (connection); /* Try a wired PPPoE connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_PPPOE_SETTING_NAME); setting = nm_setting_pppoe_new (); g_object_set (setting, NM_SETTING_PPPOE_USERNAME, "bob smith", NULL); @@ -1659,7 +1659,7 @@ test_connection_good_base_types (void) g_object_unref (connection); /* Wifi connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_WIRELESS_SETTING_NAME); setting = nm_setting_wireless_new (); @@ -1678,7 +1678,7 @@ test_connection_good_base_types (void) g_object_unref (connection); /* Bluetooth connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_BLUETOOTH_SETTING_NAME); setting = nm_setting_bluetooth_new (); @@ -1697,7 +1697,7 @@ test_connection_good_base_types (void) g_object_unref (connection); /* WiMAX connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_WIMAX_SETTING_NAME); setting = nm_setting_wimax_new (); g_object_set (setting, NM_SETTING_WIMAX_NETWORK_NAME, "CLEAR", NULL); @@ -1709,7 +1709,7 @@ test_connection_good_base_types (void) g_object_unref (connection); /* GSM connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_GSM_SETTING_NAME); setting = nm_setting_gsm_new (); @@ -1720,7 +1720,7 @@ test_connection_good_base_types (void) nm_connection_add_setting (connection, setting); /* CDMA connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_CDMA_SETTING_NAME); setting = nm_setting_cdma_new (); @@ -1749,7 +1749,7 @@ test_connection_bad_base_types (void) */ /* Connection setting */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_CONNECTION_SETTING_NAME); setting = nm_setting_wired_new (); nm_connection_add_setting (connection, setting); @@ -1761,7 +1761,7 @@ test_connection_bad_base_types (void) g_clear_error (&error); /* PPP setting */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_PPP_SETTING_NAME); setting = nm_setting_wired_new (); nm_connection_add_setting (connection, setting); @@ -1775,7 +1775,7 @@ test_connection_bad_base_types (void) g_clear_error (&error); /* Serial setting */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_SERIAL_SETTING_NAME); setting = nm_setting_wired_new (); nm_connection_add_setting (connection, setting); @@ -1789,7 +1789,7 @@ test_connection_bad_base_types (void) g_clear_error (&error); /* IP4 setting */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_IP4_CONFIG_SETTING_NAME); setting = nm_setting_wired_new (); nm_connection_add_setting (connection, setting); @@ -1801,7 +1801,7 @@ test_connection_bad_base_types (void) g_clear_error (&error); /* IP6 setting */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); add_generic_settings (connection, NM_SETTING_IP6_CONFIG_SETTING_NAME); setting = nm_setting_wired_new (); nm_connection_add_setting (connection, setting); @@ -2118,7 +2118,7 @@ test_setting_connection_changed_signal (void) NMSettingConnection *s_con; char *uuid; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2154,7 +2154,7 @@ test_setting_bond_changed_signal (void) gboolean changed = FALSE; NMSettingBond *s_bond; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2179,7 +2179,7 @@ test_setting_ip4_changed_signal (void) NMIP4Address *addr; NMIP4Route *route; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2250,7 +2250,7 @@ test_setting_ip6_changed_signal (void) NMIP6Route *route; const struct in6_addr t = { { { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 } } }; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2319,7 +2319,7 @@ test_setting_vlan_changed_signal (void) gboolean changed = FALSE; NMSettingVlan *s_vlan; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2354,7 +2354,7 @@ test_setting_vpn_changed_signal (void) gboolean changed = FALSE; NMSettingVpn *s_vpn; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2381,7 +2381,7 @@ test_setting_wired_changed_signal (void) gboolean changed = FALSE; NMSettingWired *s_wired; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2404,7 +2404,7 @@ test_setting_wireless_changed_signal (void) gboolean changed = FALSE; NMSettingWireless *s_wifi; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2425,7 +2425,7 @@ test_setting_wireless_security_changed_signal (void) gboolean changed = FALSE; NMSettingWirelessSecurity *s_wsec; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2480,7 +2480,7 @@ test_setting_802_1x_changed_signal (void) gboolean changed = FALSE; NMSetting8021x *s_8021x; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_signal_connect (connection, NM_CONNECTION_CHANGED, (GCallback) test_connection_changed_cb, @@ -2573,7 +2573,7 @@ test_connection_verify_sets_interface_name (void) NM_SETTING_BOND_INTERFACE_NAME, "bond-x", NULL); - con = nm_connection_new (); + con = nm_simple_connection_new (); nm_connection_add_setting (con, NM_SETTING (s_con)); nm_connection_add_setting (con, NM_SETTING (s_bond)); @@ -2604,7 +2604,7 @@ test_connection_normalize_virtual_iface_name (void) const char *IFACE_VIRT = "iface-X"; gboolean modified = FALSE; - con = nm_connection_new (); + con = nm_simple_connection_new (); setting = nm_setting_ip4_config_new (); g_object_set (setting, diff --git a/libnm-core/tests/test-secrets.c b/libnm-core/tests/test-secrets.c index 5fe1d8b1a8..590c2f1c57 100644 --- a/libnm-core/tests/test-secrets.c +++ b/libnm-core/tests/test-secrets.c @@ -66,7 +66,7 @@ make_tls_connection (const char *detail, NMSetting8021xCKScheme scheme) gboolean success; GError *error = NULL; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -232,7 +232,7 @@ make_tls_phase2_connection (const char *detail, NMSetting8021xCKScheme scheme) gboolean success; GError *error = NULL; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -401,7 +401,7 @@ wifi_connection_new (void) char *uuid; GByteArray *ssid; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ diff --git a/libnm/NetworkManager.h b/libnm/NetworkManager.h index 08b4f4cc9e..f473fea1cb 100644 --- a/libnm/NetworkManager.h +++ b/libnm/NetworkManager.h @@ -79,6 +79,7 @@ #include #include #include +#include #include #include #include diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 778ae0c48c..e994ed974a 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -78,7 +78,6 @@ global: nm_connection_compare; nm_connection_diff; nm_connection_dump; - nm_connection_duplicate; nm_connection_error_get_type; nm_connection_error_quark; nm_connection_for_each_setting_value; @@ -120,8 +119,6 @@ global: nm_connection_get_virtual_iface_name; nm_connection_is_type; nm_connection_need_secrets; - nm_connection_new; - nm_connection_new_from_hash; nm_connection_normalize; nm_connection_remove_setting; nm_connection_replace_settings; @@ -867,6 +864,10 @@ global: nm_setting_wireless_security_remove_proto; nm_setting_wireless_security_remove_proto_by_value; nm_setting_wireless_security_set_wep_key; + nm_simple_connection_get_type; + nm_simple_connection_new; + nm_simple_connection_new_clone; + nm_simple_connection_new_from_hash; nm_ssid_get_type; nm_state_get_type; nm_string_array_get_type; diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index d188ed6d0a..e7433ad579 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -33,10 +33,12 @@ #include "nm-glib-compat.h" #include "nm-dbus-helpers-private.h" +static void nm_remote_connection_connection_iface_init (NMConnectionInterface *iface); static void nm_remote_connection_initable_iface_init (GInitableIface *iface); static void nm_remote_connection_async_initable_iface_init (GAsyncInitableIface *iface); -G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_CONNECTION, +G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_remote_connection_connection_iface_init); G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_remote_connection_initable_iface_init); G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_remote_connection_async_initable_iface_init); ) @@ -44,6 +46,7 @@ G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_CONNE enum { PROP_0, PROP_DBUS_CONNECTION, + PROP_PATH, PROP_UNSAVED, PROP_VISIBLE, @@ -689,6 +692,9 @@ get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { switch (prop_id) { + case PROP_PATH: + g_value_set_string (value, nm_connection_get_path (NM_CONNECTION (object))); + break; case PROP_UNSAVED: g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->unsaved); break; @@ -712,6 +718,10 @@ set_property (GObject *object, guint prop_id, /* Construct only */ priv->bus = g_value_dup_boxed (value); break; + case PROP_PATH: + /* Construct only */ + nm_connection_set_path (NM_CONNECTION (object), g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -766,6 +776,19 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + /** + * NMRemoteConnection:path: + * + * The D-Bus path of the connection that the #NMRemoteConnection represents. + */ + g_object_class_install_property + (object_class, PROP_PATH, + g_param_spec_string (NM_REMOTE_CONNECTION_PATH, "", "", + NULL, + G_PARAM_WRITABLE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + /** * NMRemoteConnection:unsaved: * @@ -798,6 +821,11 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) G_PARAM_STATIC_STRINGS)); } +static void +nm_remote_connection_connection_iface_init (NMConnectionInterface *iface) +{ +} + static void nm_remote_connection_initable_iface_init (GInitableIface *iface) { diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h index 65c154605e..01db85c363 100644 --- a/libnm/nm-remote-connection.h +++ b/libnm/nm-remote-connection.h @@ -56,15 +56,16 @@ GQuark nm_remote_connection_error_quark (void); /* Properties */ #define NM_REMOTE_CONNECTION_DBUS_CONNECTION "dbus-connection" +#define NM_REMOTE_CONNECTION_PATH "path" #define NM_REMOTE_CONNECTION_UNSAVED "unsaved" #define NM_REMOTE_CONNECTION_VISIBLE "visible" typedef struct { - NMConnection parent; + GObject parent; } NMRemoteConnection; typedef struct { - NMConnectionClass parent_class; + GObjectClass parent_class; /*< private >*/ gpointer padding[8]; diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c index def901b658..9fbc13c76d 100644 --- a/libnm/nm-remote-settings.c +++ b/libnm/nm-remote-settings.c @@ -81,7 +81,7 @@ * char *uuid; * gboolean success; * - * connection = nm_connection_new (); + * connection = nm_simple_connection_new (); * * /* Build up the 'connection' setting */ * s_con = (NMSettingConnection *) nm_setting_connection_new (); diff --git a/libnm/nm-secret-agent.c b/libnm/nm-secret-agent.c index 705c780121..384c5e69e6 100644 --- a/libnm/nm-secret-agent.c +++ b/libnm/nm-secret-agent.c @@ -27,6 +27,7 @@ #include "nm-secret-agent.h" #include "nm-enum-types.h" #include "nm-dbus-helpers-private.h" +#include "nm-simple-connection.h" static void impl_secret_agent_get_secrets (NMSecretAgent *self, GHashTable *connection_hash, @@ -329,7 +330,7 @@ verify_request (NMSecretAgent *self, /* Make sure the given connection is valid */ g_assert (out_connection); - connection = nm_connection_new_from_hash (connection_hash, &local); + connection = nm_simple_connection_new_from_hash (connection_hash, &local); if (connection) { nm_connection_set_path (connection, connection_path); *out_connection = connection; diff --git a/libnm/nm-vpn-plugin.c b/libnm/nm-vpn-plugin.c index cff632f9c5..d6b4633c3d 100644 --- a/libnm/nm-vpn-plugin.c +++ b/libnm/nm-vpn-plugin.c @@ -28,7 +28,6 @@ #include "nm-vpn-plugin.h" #include "nm-vpn-enum-types.h" #include "nm-utils.h" -#include "nm-connection.h" #include "nm-dbus-glib-types.h" static gboolean impl_vpn_plugin_connect (NMVpnPlugin *plugin, @@ -452,7 +451,7 @@ _connect_generic (NMVpnPlugin *plugin, return FALSE; } - connection = nm_connection_new_from_hash (properties, &local); + connection = nm_simple_connection_new_from_hash (properties, &local); if (!connection) { g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, "Invalid connection: (%d) %s", @@ -526,7 +525,7 @@ impl_vpn_plugin_need_secrets (NMVpnPlugin *plugin, g_return_val_if_fail (NM_IS_VPN_PLUGIN (plugin), FALSE); g_return_val_if_fail (properties != NULL, FALSE); - connection = nm_connection_new_from_hash (properties, &cnfh_err); + connection = nm_simple_connection_new_from_hash (properties, &cnfh_err); if (!connection) { g_set_error (err, NM_VPN_PLUGIN_ERROR, @@ -581,7 +580,7 @@ impl_vpn_plugin_new_secrets (NMVpnPlugin *plugin, return FALSE; } - connection = nm_connection_new_from_hash (properties, &local); + connection = nm_simple_connection_new_from_hash (properties, &local); if (!connection) { g_set_error (error, NM_VPN_PLUGIN_ERROR, NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS, "Invalid connection: (%d) %s", diff --git a/libnm/tests/test-nm-client.c b/libnm/tests/test-nm-client.c index 2a0d6bf1df..5f0bcbffbf 100644 --- a/libnm/tests/test-nm-client.c +++ b/libnm/tests/test-nm-client.c @@ -26,11 +26,7 @@ #include #include -#include "nm-dbus-interface.h" -#include "nm-client.h" -#include "nm-device-wifi.h" -#include "nm-device-ethernet.h" -#include "nm-device-wimax.h" +#include #include "nm-glib-compat.h" #include "common.h" diff --git a/libnm/tests/test-remote-settings-client.c b/libnm/tests/test-remote-settings-client.c index d0ba50428d..52977f8e2f 100644 --- a/libnm/tests/test-remote-settings-client.c +++ b/libnm/tests/test-remote-settings-client.c @@ -26,12 +26,8 @@ #include #include -#include -#include -#include -#include +#include -#include "nm-remote-settings.h" #include "common.h" #include "nm-test-utils.h" diff --git a/src/devices/bluetooth/nm-bluez-device.c b/src/devices/bluetooth/nm-bluez-device.c index 84919a9cb1..fb596321df 100644 --- a/src/devices/bluetooth/nm-bluez-device.c +++ b/src/devices/bluetooth/nm-bluez-device.c @@ -185,7 +185,7 @@ pan_connection_check_create (NMBluezDevice *self) /* create a new connection */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Setting: Connection */ uuid = nm_utils_uuid_generate (); diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 99c969370d..265cf938e2 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -1704,7 +1704,7 @@ nm_device_generate_connection (NMDevice *self, NMDevice *master) return NULL; } - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_con = nm_setting_connection_new (); uuid = nm_utils_uuid_generate (); diff --git a/src/devices/wifi/tests/test-wifi-ap-utils.c b/src/devices/wifi/tests/test-wifi-ap-utils.c index 81bf581f5c..89b3d1644c 100644 --- a/src/devices/wifi/tests/test-wifi-ap-utils.c +++ b/src/devices/wifi/tests/test-wifi-ap-utils.c @@ -225,7 +225,7 @@ create_basic (const char *ssid, NMSettingWireless *s_wifi = NULL; GByteArray *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_wifi = (NMSettingWireless *) nm_setting_wireless_new (); nm_connection_add_setting (connection, NM_SETTING (s_wifi)); @@ -265,7 +265,7 @@ test_lock_bssid (void) gboolean success; GError *error = NULL; - src = nm_connection_new (); + src = nm_simple_connection_new (); success = complete_connection (ssid, bssid, NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_NONE, NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE, @@ -293,7 +293,7 @@ test_open_ap_empty_connection (void) * SSID and Infra modes of the given AP details. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); success = complete_connection (ssid, bssid, NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_NONE, NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE, @@ -322,7 +322,7 @@ test_open_ap_leap_connection_1 (gconstpointer add_wifi) * the AP to have the Privacy bit set. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); if (add_wifi) fill_wifi_empty (src); fill_wsec (src, src_wsec); @@ -353,7 +353,7 @@ test_open_ap_leap_connection_2 (void) * WEP or LEAP) is rejected when completion is attempted with an open AP. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); @@ -387,7 +387,7 @@ test_open_ap_wep_connection (gconstpointer add_wifi) * attempted with an open AP. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); if (add_wifi) fill_wifi_empty (src); fill_wsec (src, src_wsec); @@ -428,7 +428,7 @@ test_ap_wpa_psk_connection_base (const char *key_mgmt, gboolean success; GError *error = NULL; - src = nm_connection_new (); + src = nm_simple_connection_new (); if (add_wifi) fill_wifi_empty (src); fill_wsec (src, both_wsec); @@ -534,7 +534,7 @@ test_ap_wpa_eap_connection_base (const char *key_mgmt, gboolean success; GError *error = NULL; - src = nm_connection_new (); + src = nm_simple_connection_new (); if (add_wifi) fill_wifi_empty (src); fill_wsec (src, src_wsec); @@ -743,7 +743,7 @@ test_priv_ap_empty_connection (void) * connection when completed with an AP with the Privacy bit set. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); success = complete_connection (ssid, bssid, NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_PRIVACY, NM_802_11_AP_SEC_NONE, NM_802_11_AP_SEC_NONE, @@ -785,7 +785,7 @@ test_priv_ap_leap_connection_1 (gconstpointer add_wifi) * with an AP with the Privacy bit set. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); if (add_wifi) fill_wifi_empty (src); fill_wsec (src, src_wsec); @@ -824,7 +824,7 @@ test_priv_ap_leap_connection_2 (void) * with an AP with the Privacy bit set. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); success = complete_connection ("blahblah", bssid, @@ -867,7 +867,7 @@ test_priv_ap_dynamic_wep_1 (void) * Dynamic WEP connection when completed with an AP with the Privacy bit set. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); fill_8021x (src, both_8021x); @@ -914,7 +914,7 @@ test_priv_ap_dynamic_wep_2 (void) * WEP connection when completed with an AP with the Privacy bit set. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); fill_8021x (src, both_8021x); @@ -955,7 +955,7 @@ test_priv_ap_dynamic_wep_3 (void) * setting is rejected, as 802.1x is incompatible with 'shared' auth. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); fill_8021x (src, src_8021x); @@ -1066,7 +1066,7 @@ test_wpa_ap_empty_connection (gconstpointer data) * or RSN flags. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); success = complete_connection (ssid, bssid, NM_802_11_MODE_INFRA, NM_802_11_AP_FLAGS_PRIVACY, wpa_flags_for_idx (idx), @@ -1103,7 +1103,7 @@ test_wpa_ap_leap_connection_1 (gconstpointer data) * rejected since WPA APs (usually) do not support LEAP. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); success = complete_connection (ssid, bssid, @@ -1137,7 +1137,7 @@ test_wpa_ap_leap_connection_2 (gconstpointer data) * rejected since WPA APs (usually) do not support LEAP. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); success = complete_connection ("blahblah", bssid, @@ -1170,7 +1170,7 @@ test_wpa_ap_dynamic_wep_connection (gconstpointer data) * rejected since WPA APs (usually) do not support Dynamic WEP. */ - src = nm_connection_new (); + src = nm_simple_connection_new (); fill_wifi_empty (src); fill_wsec (src, src_wsec); success = complete_connection ("blahblah", bssid, @@ -1197,7 +1197,7 @@ test_wpa_ap_wpa_psk_connection_1 (gconstpointer data) { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 }, { NULL } }; - expected = nm_connection_new (); + expected = nm_simple_connection_new (); fill_wsec (expected, exp_wsec); test_ap_wpa_psk_connection_base (NULL, NULL, NM_802_11_AP_FLAGS_PRIVACY, @@ -1217,7 +1217,7 @@ test_wpa_ap_wpa_psk_connection_2 (gconstpointer data) { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 }, { NULL } }; - expected = nm_connection_new (); + expected = nm_simple_connection_new (); fill_wsec (expected, exp_wsec); test_ap_wpa_psk_connection_base (NULL, NULL, NM_802_11_AP_FLAGS_PRIVACY, @@ -1237,7 +1237,7 @@ test_wpa_ap_wpa_psk_connection_3 (gconstpointer data) { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 }, { NULL } }; - expected = nm_connection_new (); + expected = nm_simple_connection_new (); fill_wsec (expected, exp_wsec); test_ap_wpa_psk_connection_base (NULL, "open", NM_802_11_AP_FLAGS_PRIVACY, @@ -1268,7 +1268,7 @@ test_wpa_ap_wpa_psk_connection_5 (gconstpointer data) { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 }, { NULL } }; - expected = nm_connection_new (); + expected = nm_simple_connection_new (); fill_wsec (expected, exp_wsec); test_ap_wpa_psk_connection_base ("wpa-psk", "open", NM_802_11_AP_FLAGS_PRIVACY, diff --git a/src/nm-manager.c b/src/nm-manager.c index b829c4c018..2224149f33 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -3395,7 +3395,7 @@ impl_manager_add_and_activate_connection (NMManager *self, * specific data being in the connection till then (especially in * validate_activation_request()). */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); if (settings && g_hash_table_size (settings)) nm_connection_replace_settings (connection, settings, NULL); diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c index 07e710e9c4..def09f6309 100644 --- a/src/settings/nm-agent-manager.c +++ b/src/settings/nm-agent-manager.c @@ -39,6 +39,7 @@ #include "nm-auth-subject.h" #include "nm-dbus-manager.h" #include "nm-session-monitor.h" +#include "nm-simple-connection.h" G_DEFINE_TYPE (NMAgentManager, nm_agent_manager, G_TYPE_OBJECT) @@ -907,7 +908,7 @@ get_agent_request_secrets (ConnectionRequest *req, gboolean include_system_secre Request *parent = (Request *) req; NMConnection *tmp; - tmp = nm_connection_duplicate (req->connection); + tmp = nm_simple_connection_new_clone (req->connection); nm_connection_clear_secrets (tmp); if (include_system_secrets) { if (req->existing_secrets) @@ -1091,7 +1092,7 @@ get_start (gpointer user_data) * ask a secret agent for more. This allows admins to provide generic * secrets but allow additional user-specific ones as well. */ - tmp = nm_connection_duplicate (req->connection); + tmp = nm_simple_connection_new_clone (req->connection); g_assert (tmp); if (!nm_connection_update_secrets (tmp, req->setting_name, req->existing_secrets, &error)) { diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c index a45db07408..b9c3619f4e 100644 --- a/src/settings/nm-secret-agent.c +++ b/src/settings/nm-secret-agent.c @@ -34,6 +34,7 @@ #include "nm-glib-compat.h" #include "nm-logging.h" #include "nm-auth-subject.h" +#include "nm-simple-connection.h" G_DEFINE_TYPE (NMSecretAgent, nm_secret_agent, G_TYPE_OBJECT) diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 10bd10aa89..e8d5af0399 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -68,7 +68,11 @@ static void impl_settings_connection_get_secrets (NMSettingsConnection *connecti #include "nm-settings-connection-glue.h" -G_DEFINE_TYPE (NMSettingsConnection, nm_settings_connection, NM_TYPE_CONNECTION) +static void nm_settings_connection_connection_interface_init (NMConnectionInterface *iface); + +G_DEFINE_TYPE_WITH_CODE (NMSettingsConnection, nm_settings_connection, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_settings_connection_connection_interface_init) + ) #define NM_SETTINGS_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), \ NM_TYPE_SETTINGS_CONNECTION, \ @@ -355,7 +359,7 @@ update_system_secrets_cache (NMSettingsConnection *self) if (priv->system_secrets) g_object_unref (priv->system_secrets); - priv->system_secrets = nm_connection_duplicate (NM_CONNECTION (self)); + priv->system_secrets = nm_simple_connection_new_clone (NM_CONNECTION (self)); /* Clear out non-system-owned and not-saved secrets */ nm_connection_clear_secrets_with_flags (priv->system_secrets, @@ -371,7 +375,7 @@ update_agent_secrets_cache (NMSettingsConnection *self, NMConnection *new) if (priv->agent_secrets) g_object_unref (priv->agent_secrets); - priv->agent_secrets = nm_connection_duplicate (new ? new : NM_CONNECTION (self)); + priv->agent_secrets = nm_simple_connection_new_clone (new ? new : NM_CONNECTION (self)); /* Clear out non-system-owned secrets */ nm_connection_clear_secrets_with_flags (priv->agent_secrets, @@ -634,7 +638,7 @@ do_delete (NMSettingsConnection *connection, set_visible (connection, FALSE); /* Tell agents to remove secrets for this connection */ - for_agents = nm_connection_duplicate (NM_CONNECTION (connection)); + for_agents = nm_simple_connection_new_clone (NM_CONNECTION (connection)); nm_connection_clear_secrets (for_agents); nm_agent_manager_delete_secrets (priv->agent_mgr, for_agents); g_object_unref (for_agents); @@ -1137,7 +1141,7 @@ get_settings_auth_cb (NMSettingsConnection *self, guint64 timestamp = 0; GSList *bssid_list; - dupl_con = nm_connection_duplicate (NM_CONNECTION (self)); + dupl_con = nm_simple_connection_new_clone (NM_CONNECTION (self)); g_assert (dupl_con); /* Timestamp is not updated in connection's 'timestamp' property, @@ -1242,7 +1246,7 @@ con_update_cb (NMSettingsConnection *self, * as agent-owned secrets are the only ones we send back be saved. * Only send secrets to agents of the same UID that called update too. */ - for_agent = nm_connection_duplicate (NM_CONNECTION (self)); + for_agent = nm_simple_connection_new_clone (NM_CONNECTION (self)); nm_connection_clear_secrets_with_flags (for_agent, secrets_filter_cb, GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED)); @@ -1341,7 +1345,7 @@ impl_settings_connection_update_helper (NMSettingsConnection *self, /* Check if the settings are valid first */ if (new_settings) { - tmp = nm_connection_new_from_hash (new_settings, &error); + tmp = nm_simple_connection_new_from_hash (new_settings, &error); if (!tmp) { g_assert (error); goto error; @@ -2174,3 +2178,9 @@ nm_settings_connection_class_init (NMSettingsConnectionClass *class) G_TYPE_FROM_CLASS (class), &dbus_glib_nm_settings_connection_object_info); } + +static void +nm_settings_connection_connection_interface_init (NMConnectionInterface *iface) +{ +} + diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h index cacb8b9689..8e29adc2a1 100644 --- a/src/settings/nm-settings-connection.h +++ b/src/settings/nm-settings-connection.h @@ -60,11 +60,11 @@ typedef void (*NMSettingsConnectionDeleteFunc) (NMSettingsConnection *connection gpointer user_data); struct _NMSettingsConnection { - NMConnection parent; + GObject parent; }; struct _NMSettingsConnectionClass { - NMConnectionClass parent; + GObjectClass parent; /* virtual methods */ void (*commit_changes) (NMSettingsConnection *connection, diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index e18224961e..edc4fa9fb4 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -997,7 +997,7 @@ send_agent_owned_secrets (NMSettings *self, * as agent-owned secrets are the only ones we send back to be saved. * Only send secrets to agents of the same UID that called update too. */ - for_agent = nm_connection_duplicate (NM_CONNECTION (connection)); + for_agent = nm_simple_connection_new_clone (NM_CONNECTION (connection)); nm_connection_clear_secrets_with_flags (for_agent, secrets_filter_cb, GUINT_TO_POINTER (NM_SETTING_SECRET_FLAG_AGENT_OWNED)); @@ -1223,14 +1223,14 @@ impl_settings_add_connection_helper (NMSettings *self, NMConnection *connection; GError *error = NULL; - connection = nm_connection_new_from_hash (settings, &error); + connection = nm_simple_connection_new_from_hash (settings, &error); if (connection) { nm_settings_add_connection_dbus (self, - connection, - save_to_disk, - context, - impl_settings_add_connection_add_cb, - NULL); + connection, + save_to_disk, + context, + impl_settings_add_connection_add_cb, + NULL); g_object_unref (connection); } else { g_assert (error); @@ -1609,10 +1609,8 @@ nm_settings_device_added (NMSettings *self, NMDevice *device) if (!hw_address) return; - connection = nm_connection_new (); - g_assert (connection); + connection = nm_simple_connection_new (); setting = nm_setting_connection_new (); - g_assert (setting); nm_connection_add_setting (connection, setting); defname = nm_settings_utils_get_default_wired_name (priv->connections); diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index a48290661a..ee8c620114 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -3756,7 +3756,7 @@ wireless_connection_from_ifcfg (const char *file, g_return_val_if_fail (error != NULL, NULL); g_return_val_if_fail (*error == NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Wireless */ wireless_setting = make_wireless_setting (ifcfg, error); @@ -3997,7 +3997,7 @@ wired_connection_from_ifcfg (const char *file, g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (ifcfg != NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); con_setting = make_connection_setting (file, ifcfg, NM_SETTING_WIRED_SETTING_NAME, NULL, NULL); if (!con_setting) { @@ -4163,7 +4163,7 @@ infiniband_connection_from_ifcfg (const char *file, g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (ifcfg != NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); con_setting = make_connection_setting (file, ifcfg, NM_SETTING_INFINIBAND_SETTING_NAME, NULL, NULL); if (!con_setting) { @@ -4280,7 +4280,7 @@ bond_connection_from_ifcfg (const char *file, g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (ifcfg != NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); con_setting = make_connection_setting (file, ifcfg, NM_SETTING_BOND_SETTING_NAME, NULL, _("Bond")); if (!con_setting) { @@ -4391,7 +4391,7 @@ team_connection_from_ifcfg (const char *file, g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (ifcfg != NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); con_setting = make_connection_setting (file, ifcfg, NM_SETTING_TEAM_SETTING_NAME, NULL, _("Team")); if (!con_setting) { @@ -4586,7 +4586,7 @@ bridge_connection_from_ifcfg (const char *file, g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (ifcfg != NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); con_setting = make_connection_setting (file, ifcfg, NM_SETTING_BRIDGE_SETTING_NAME, NULL, _("Bridge")); if (!con_setting) { @@ -4885,7 +4885,7 @@ vlan_connection_from_ifcfg (const char *file, g_return_val_if_fail (file != NULL, NULL); g_return_val_if_fail (ifcfg != NULL, NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); con_setting = make_connection_setting (file, ifcfg, NM_SETTING_VLAN_SETTING_NAME, NULL, "Vlan"); if (!con_setting) { @@ -4939,7 +4939,7 @@ create_unhandled_connection (const char *filename, shvarFile *ifcfg, g_assert (out_spec != NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Get NAME, UUID, etc. We need to set a connection type (generic) and add * an empty type-specific setting as well, to make sure it passes diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 8a726a3cea..d2e8459326 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -6116,7 +6116,7 @@ test_write_wifi_hidden (void) GByteArray *ssid; const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 }; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -6740,7 +6740,7 @@ test_write_wired_static (void) inet_pton (AF_INET6, "fade:0102:0103::face", &dns6_1); inet_pton (AF_INET6, "cafe:ffff:eeee:dddd:cccc:bbbb:aaaa:feed", &dns6_2); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -6933,7 +6933,7 @@ test_write_wired_dhcp (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -7162,7 +7162,7 @@ test_write_wired_static_ip6_only (void) inet_pton (AF_INET6, "1003:1234:abcd::1", &ip6); inet_pton (AF_INET6, "fade:0102:0103::face", &dns6); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -7310,7 +7310,7 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data) if (gateway6) inet_ntop (AF_INET6, gateway6, s_gateway6, sizeof (s_gateway6)); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -7611,7 +7611,7 @@ test_write_wired_static_routes (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -7766,7 +7766,7 @@ test_write_wired_dhcp_8021x_peap_mschapv2 (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -7924,7 +7924,7 @@ test_write_wired_8021x_tls (NMSetting8021xCKScheme scheme, const char *pw; char *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection != NULL); /* Connection setting */ @@ -8142,7 +8142,7 @@ test_write_wired_aliases (void) shvarFile *ifcfg; int i, j; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); ASSERT (connection != NULL, "wired-aliases-write", "failed to allocate new connection"); @@ -8335,7 +8335,7 @@ test_write_gateway (void) struct in_addr ip1, ip2, gw1, gw2; const guint32 prefix = 24; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -8490,7 +8490,7 @@ test_write_wifi_open (void) shvarFile *ifcfg; char *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -8633,7 +8633,7 @@ test_write_wifi_open_hex_ssid (void) GByteArray *ssid; const unsigned char ssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd }; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -8750,7 +8750,7 @@ test_write_wifi_wep (void) const unsigned char ssid_data[] = "blahblah"; struct stat statbuf; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -8898,7 +8898,7 @@ test_write_wifi_wep_adhoc (void) const guint32 dns1 = htonl (0x04020201); const guint32 prefix = 24; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -9044,7 +9044,7 @@ test_write_wifi_wep_passphrase (void) const unsigned char ssid_data[] = "blahblah"; struct stat statbuf; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -9185,7 +9185,7 @@ test_write_wifi_wep_40_ascii (void) const unsigned char ssid_data[] = "blahblah40"; struct stat statbuf; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -9328,7 +9328,7 @@ test_write_wifi_wep_104_ascii (void) const unsigned char ssid_data[] = "blahblah104"; struct stat statbuf; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -9471,7 +9471,7 @@ test_write_wifi_leap (void) const unsigned char ssid_data[] = "blahblah"; struct stat statbuf; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -9610,7 +9610,7 @@ test_write_wifi_leap_secret_flags (NMSettingSecretFlags flags) GByteArray *ssid; const unsigned char ssid_data[] = "blahblah"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -9753,7 +9753,7 @@ test_write_wifi_wpa_psk (const char *name, g_return_if_fail (psk != NULL); - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -9904,7 +9904,7 @@ test_write_wifi_wpa_psk_adhoc (void) const guint32 dns1 = htonl (0x04020201); const guint32 prefix = 24; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -10049,7 +10049,7 @@ test_write_wifi_wpa_eap_tls (void) GByteArray *ssid; const char *ssid_data = "blahblah"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -10215,7 +10215,7 @@ test_write_wifi_wpa_eap_ttls_tls (void) GByteArray *ssid; const char *ssid_data = "blahblah"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -10399,7 +10399,7 @@ test_write_wifi_wpa_eap_ttls_mschapv2 (void) GByteArray *ssid; const char *ssid_data = "blahblah"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -10558,7 +10558,7 @@ test_write_wifi_wpa_then_open (void) * config doesn't leave various WPA-related keys lying around in the ifcfg. */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -10752,7 +10752,7 @@ test_write_wifi_wpa_then_wep_with_perms (void) * config works and doesn't cause infinite loop or other issues. */ - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -10956,7 +10956,7 @@ test_write_wifi_dynamic_wep_leap (void) shvarFile *ifcfg; char *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -11501,7 +11501,7 @@ test_write_wired_qeth_dhcp (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -11628,7 +11628,7 @@ test_write_wired_ctc_dhcp (void) shvarFile *ifcfg; char *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -11761,7 +11761,7 @@ test_write_permissions (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -11877,7 +11877,7 @@ test_write_wifi_wep_agent_keys (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection != NULL); /* Connection setting */ @@ -12011,7 +12011,7 @@ test_write_wired_pppoe (void) GError *error = NULL; char *testfile = NULL; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -12079,7 +12079,7 @@ test_write_vpn (void) GError *error = NULL; char *testfile = NULL; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -12144,7 +12144,7 @@ test_write_mobile_broadband (gboolean gsm) GError *error = NULL; char *testfile = NULL; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -12290,7 +12290,7 @@ test_write_bridge_main (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -12458,7 +12458,7 @@ test_write_bridge_component (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -12901,7 +12901,7 @@ test_write_ethernet_missing_ipv6 (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -13080,7 +13080,7 @@ test_write_bond_main (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -13253,7 +13253,7 @@ test_write_bond_slave (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -13444,7 +13444,7 @@ test_write_infiniband (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -13621,7 +13621,7 @@ test_write_bond_slave_ib (void) char *route6file = NULL; gboolean ignore_error = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -13793,7 +13793,7 @@ test_write_dcb_basic (void) const guint traffic_classes[8] = { 3, 4, 7, 2, 1, 0, 5, 6 }; const gboolean pfcs[8] = { TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE }; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_con = (NMSettingConnection *) nm_setting_connection_new (); nm_connection_add_setting (connection, NM_SETTING (s_con)); @@ -14066,7 +14066,7 @@ test_write_fcoe_mode (gconstpointer user_data) gboolean success, ignore_error; char *uuid, *testfile; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_con = (NMSettingConnection *) nm_setting_connection_new (); nm_connection_add_setting (connection, NM_SETTING (s_con)); @@ -14189,7 +14189,7 @@ test_write_team_master (void) const char *escaped_expected_config = "\"{ \\\"device\\\": \\\"team0\\\", \\\"link_watch\\\": { \\\"name\\\": \\\"ethtool\\\" } }\""; shvarFile *f; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -14309,7 +14309,7 @@ test_write_team_port (void) const char *escaped_expected_config = "\"{ \\\"p4p1\\\": { \\\"prio\\\": -10, \\\"sticky\\\": true } }\""; shvarFile *f; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c index 0efdc94cc6..86a734bee2 100644 --- a/src/settings/plugins/ifnet/connection_parser.c +++ b/src/settings/plugins/ifnet/connection_parser.c @@ -1618,7 +1618,7 @@ ifnet_update_connection_from_config_block (const char *conn_name, gchar *id, *uuid; gboolean success = FALSE; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); setting = nm_connection_get_setting_connection (connection); if (!setting) { setting = NM_SETTING_CONNECTION (nm_setting_connection_new ()); diff --git a/src/settings/plugins/ifupdown/tests/test-ifupdown.c b/src/settings/plugins/ifupdown/tests/test-ifupdown.c index 8cae19eb20..07102c803a 100644 --- a/src/settings/plugins/ifupdown/tests/test-ifupdown.c +++ b/src/settings/plugins/ifupdown/tests/test-ifupdown.c @@ -481,7 +481,7 @@ test17_read_static_ipv4 (const char *path) init_ifparser_with_file (path, file); block = ifparser_getfirst (); - connection = nm_connection_new(); + connection = nm_simple_connection_new(); ifupdown_update_connection_from_if_block(connection, block, &error); ASSERT (connection != NULL, @@ -659,7 +659,7 @@ test18_read_static_ipv6 (const char *path) init_ifparser_with_file (path, file); block = ifparser_getfirst (); - connection = nm_connection_new(); + connection = nm_simple_connection_new(); ifupdown_update_connection_from_if_block(connection, block, &error); ASSERT (connection != NULL, @@ -853,7 +853,7 @@ test19_read_static_ipv4_plen (const char *path) init_ifparser_with_file (path, file); block = ifparser_getfirst (); - connection = nm_connection_new(); + connection = nm_simple_connection_new(); ifupdown_update_connection_from_if_block(connection, block, &error); ASSERT (connection != NULL, diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index 46dc108b32..3c148568cc 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -1259,7 +1259,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error) if (!g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, error)) goto out; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); groups = g_key_file_get_groups (key_file, &length); for (i = 0; i < length; i++) { diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c index 4a1c9effdf..acbf86dd9d 100644 --- a/src/settings/plugins/keyfile/tests/test-keyfile.c +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c @@ -561,7 +561,7 @@ test_write_wired_connection (void) const char *route6_4_nh = "::"; guint64 timestamp = 0x12345678L; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ @@ -799,7 +799,7 @@ test_write_ip6_wired_connection (void) const char *address = "abcd::beef"; const char *gw = "dcba::beef"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ @@ -1177,7 +1177,7 @@ test_write_wireless_connection (void) uid_t owner_uid; guint64 timestamp = 0x12344433L; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ @@ -1314,7 +1314,7 @@ test_write_string_ssid (void) uid_t owner_uid; GKeyFile *keyfile; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ @@ -1438,7 +1438,7 @@ test_write_intlist_ssid (void) gint *intlist; gsize len = 0, i; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -1594,7 +1594,7 @@ test_write_intlike_ssid (void) GKeyFile *keyfile; char *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -1682,7 +1682,7 @@ test_write_intlike_ssid_2 (void) GKeyFile *keyfile; char *tmp; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -1929,7 +1929,7 @@ test_write_bt_dun_connection (void) uid_t owner_uid; guint64 timestamp = 0x12344433L; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ @@ -2175,7 +2175,7 @@ test_write_gsm_connection (void) uid_t owner_uid; guint64 timestamp = 0x12344433L; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ @@ -2508,7 +2508,7 @@ create_wired_tls_connection (NMSetting8021xCKScheme scheme) gboolean success; GError *error = NULL; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection != NULL); /* Connection setting */ @@ -2819,7 +2819,7 @@ test_write_infiniband_connection (void) pid_t owner_grp; uid_t owner_uid; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -2947,7 +2947,7 @@ test_write_bridge_main (void) pid_t owner_grp; uid_t owner_uid; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -3079,7 +3079,7 @@ test_write_bridge_component (void) pid_t owner_grp; uid_t owner_uid; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -3190,7 +3190,7 @@ test_write_new_wired_group_name (void) char *s; gint mtu; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); g_assert (connection); /* Connection setting */ @@ -3306,7 +3306,7 @@ test_write_new_wireless_group_names (void) GKeyFile *kf; char *s; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ diff --git a/src/settings/tests/test-wired-defname.c b/src/settings/tests/test-wired-defname.c index 2d88dd7759..f8944fcd01 100644 --- a/src/settings/tests/test-wired-defname.c +++ b/src/settings/tests/test-wired-defname.c @@ -21,7 +21,7 @@ #include #include -#include +#include #include #include "nm-settings-utils.h" @@ -31,7 +31,7 @@ _new_connection (const char *id) NMConnection *a; NMSetting *setting; - a = nm_connection_new (); + a = nm_simple_connection_new (); setting = nm_setting_connection_new (); g_object_set (setting, NM_SETTING_CONNECTION_ID, id, NULL); nm_connection_add_setting (a, setting); diff --git a/src/supplicant-manager/tests/test-supplicant-config.c b/src/supplicant-manager/tests/test-supplicant-config.c index 08f8d1221a..73f199cf5b 100644 --- a/src/supplicant-manager/tests/test-supplicant-config.c +++ b/src/supplicant-manager/tests/test-supplicant-config.c @@ -126,7 +126,7 @@ test_wifi_open (void) const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; const char *bssid_str = "11:22:33:44:55:66"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -227,7 +227,7 @@ test_wifi_wep_key (const char *detail, const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; const char *bssid_str = "11:22:33:44:55:66"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); @@ -370,7 +370,7 @@ test_wifi_wpa_psk (const char *detail, const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; const char *bssid_str = "11:22:33:44:55:66"; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); /* Connection setting */ s_con = (NMSettingConnection *) nm_setting_connection_new (); diff --git a/src/tests/test-general.c b/src/tests/test-general.c index c91b6be7f6..9da8c2da0e 100644 --- a/src/tests/test-general.c +++ b/src/tests/test-general.c @@ -238,7 +238,7 @@ _match_connection_new (void) NMSettingIP6Config *s_ip6; char *uuid; - connection = nm_connection_new (); + connection = nm_simple_connection_new (); s_con = (NMSettingConnection *) nm_setting_connection_new (); nm_connection_add_setting (connection, (NMSetting *) s_con); @@ -277,7 +277,7 @@ test_connection_match_basic (void) NMSettingIP4Config *s_ip4; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); matched = nm_utils_match_connection (connections, orig, TRUE, NULL, NULL); @@ -305,7 +305,7 @@ test_connection_match_ip6_method (void) NMSettingIP6Config *s_ip6; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); /* Check that if the generated connection is IPv6 method=link-local, and the @@ -341,7 +341,7 @@ test_connection_match_ip6_method_ignore (void) NMSettingIP6Config *s_ip6; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); /* Check that if the generated connection is IPv6 method=link-local, and the @@ -375,7 +375,7 @@ test_connection_match_ip6_method_ignore_auto (void) NMSettingIP6Config *s_ip6; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); /* Check that if the generated connection is IPv6 method=auto, and the @@ -410,7 +410,7 @@ test_connection_match_ip4_method (void) NMSettingIP4Config *s_ip4; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); /* Check that if the generated connection is IPv4 method=disabled, and the @@ -450,7 +450,7 @@ test_connection_match_interface_name (void) NMSettingConnection *s_con; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); /* Check that if the generated connection has an interface name and the @@ -490,7 +490,7 @@ test_connection_match_wired (void) g_ptr_array_add (subchan_arr, "0.0.8002"); orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); mac = nm_utils_hwaddr_atoba ("52:54:00:ab:db:23", ETH_ALEN); @@ -531,7 +531,7 @@ test_connection_no_match_ip4_addr (void) guint32 addr, gw; orig = _match_connection_new (); - copy = nm_connection_duplicate (orig); + copy = nm_simple_connection_new_clone (orig); connections = g_slist_append (connections, copy); /* Check that if we have two differences, ipv6.method (exception we allow) and diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c index e2cf8dd11f..5ccf294706 100644 --- a/src/vpn-manager/nm-vpn-connection.c +++ b/src/vpn-manager/nm-vpn-connection.c @@ -1468,7 +1468,7 @@ _hash_with_username (NMConnection *connection, const char *username) if (username == NULL || existing) return nm_connection_to_hash (connection, NM_SETTING_HASH_FLAG_ALL); - dup = nm_connection_duplicate (connection); + dup = nm_simple_connection_new_clone (connection); g_assert (dup); s_vpn = nm_connection_get_setting_vpn (dup); g_assert (s_vpn); From 0fdd71fe6ece66a801f5ff66e0d26b7d26953c14 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 13 Aug 2014 15:00:41 -0400 Subject: [PATCH 6/6] libnm: make NMRemoteConnection an NMObject --- libnm/nm-object.c | 13 +-- libnm/nm-remote-connection.c | 192 +++++++++-------------------------- libnm/nm-remote-connection.h | 8 +- 3 files changed, 54 insertions(+), 159 deletions(-) diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 5afca64413..a8544a1100 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -625,17 +625,6 @@ create_async_complete (GObject *object, NMObjectTypeAsyncData *async_data) g_slice_free (NMObjectTypeAsyncData, async_data); } -static const char * -nm_object_or_connection_get_path (gpointer instance) -{ - if (NM_IS_OBJECT (instance)) - return nm_object_get_path (instance); - else if (NM_IS_CONNECTION (instance)) - return nm_connection_get_path (instance); - - g_assert_not_reached (); -} - static void async_inited (GObject *object, GAsyncResult *result, gpointer user_data) { @@ -644,7 +633,7 @@ async_inited (GObject *object, GAsyncResult *result, gpointer user_data) if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error)) { dbgmsg ("Could not create object for %s: %s", - nm_object_or_connection_get_path (object), + nm_object_get_path (NM_OBJECT (object)), error->message); g_error_free (error); object = NULL; diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index e7433ad579..835be01774 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -36,8 +36,10 @@ static void nm_remote_connection_connection_iface_init (NMConnectionInterface *iface); static void nm_remote_connection_initable_iface_init (GInitableIface *iface); static void nm_remote_connection_async_initable_iface_init (GAsyncInitableIface *iface); +static GInitableIface *nm_remote_connection_parent_initable_iface; +static GAsyncInitableIface *nm_remote_connection_parent_async_initable_iface; -G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, G_TYPE_OBJECT, +G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, NM_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION, nm_remote_connection_connection_iface_init); G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_remote_connection_initable_iface_init); G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_remote_connection_async_initable_iface_init); @@ -45,8 +47,6 @@ G_DEFINE_TYPE_WITH_CODE (NMRemoteConnection, nm_remote_connection, G_TYPE_OBJECT enum { PROP_0, - PROP_DBUS_CONNECTION, - PROP_PATH, PROP_UNSAVED, PROP_VISIBLE, @@ -66,9 +66,7 @@ struct RemoteCall { }; typedef struct { - DBusGConnection *bus; DBusGProxy *proxy; - DBusGProxy *props_proxy; gboolean proxy_is_destroyed; GSList *calls; @@ -496,63 +494,33 @@ updated_cb (DBusGProxy *proxy, gpointer user_data) } } -static void -properties_changed_cb (DBusGProxy *proxy, - GHashTable *properties, - gpointer user_data) -{ - NMRemoteConnection *self = NM_REMOTE_CONNECTION (user_data); - GHashTableIter iter; - const char *key; - GValue *value; - - g_hash_table_iter_init (&iter, properties); - while (g_hash_table_iter_next (&iter, (gpointer) &key, (gpointer) &value)) { - if (!strcmp (key, "Unsaved")) { - NM_REMOTE_CONNECTION_GET_PRIVATE (self)->unsaved = g_value_get_boolean (value); - g_object_notify (G_OBJECT (self), NM_REMOTE_CONNECTION_UNSAVED); - } - } -} - /****************************************************************/ static void -init_common (NMRemoteConnection *self) +init_dbus (NMObject *object) { - NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (self); + NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); + const NMPropertiesInfo property_info[] = { + { NM_REMOTE_CONNECTION_UNSAVED, &priv->unsaved }, + { NULL }, + }; - g_assert (priv->bus); - g_assert (nm_connection_get_path (NM_CONNECTION (self))); + NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object); - priv->proxy = _nm_dbus_new_proxy_for_connection (priv->bus, - nm_connection_get_path (NM_CONNECTION (self)), + priv->proxy = _nm_dbus_new_proxy_for_connection (nm_object_get_dbus_connection (object), + nm_connection_get_path (NM_CONNECTION (object)), NM_DBUS_INTERFACE_SETTINGS_CONNECTION); g_assert (priv->proxy); dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT); + _nm_object_register_properties (object, + priv->proxy, + property_info); + dbus_g_proxy_add_signal (priv->proxy, "Updated", G_TYPE_INVALID); - dbus_g_proxy_connect_signal (priv->proxy, "Updated", G_CALLBACK (updated_cb), self, NULL); + dbus_g_proxy_connect_signal (priv->proxy, "Updated", G_CALLBACK (updated_cb), object, NULL); - g_signal_connect (priv->proxy, "destroy", G_CALLBACK (proxy_destroy_cb), self); - - /* Monitor properties */ - dbus_g_object_register_marshaller (g_cclosure_marshal_VOID__BOXED, - G_TYPE_NONE, - DBUS_TYPE_G_MAP_OF_VARIANT, - G_TYPE_INVALID); - dbus_g_proxy_add_signal (priv->proxy, "PropertiesChanged", - DBUS_TYPE_G_MAP_OF_VARIANT, - G_TYPE_INVALID); - dbus_g_proxy_connect_signal (priv->proxy, "PropertiesChanged", - G_CALLBACK (properties_changed_cb), - self, - NULL); - - priv->props_proxy = _nm_dbus_new_proxy_for_connection (priv->bus, - nm_connection_get_path (NM_CONNECTION (self)), - DBUS_INTERFACE_PROPERTIES); - g_assert (priv->props_proxy); + g_signal_connect (priv->proxy, "destroy", G_CALLBACK (proxy_destroy_cb), object); } static gboolean @@ -562,7 +530,8 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (initable); GHashTable *hash; - init_common (self); + if (!nm_remote_connection_parent_initable_iface->init (initable, cancellable, error)) + return FALSE; if (!dbus_g_proxy_call (priv->proxy, "GetSettings", error, G_TYPE_INVALID, @@ -573,17 +542,6 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error) replace_settings (self, hash); g_hash_table_destroy (hash); - /* Get properties */ - hash = NULL; - if (!dbus_g_proxy_call (priv->props_proxy, "GetAll", error, - G_TYPE_STRING, NM_DBUS_INTERFACE_SETTINGS_CONNECTION, - G_TYPE_INVALID, - DBUS_TYPE_G_MAP_OF_VARIANT, &hash, - G_TYPE_INVALID)) - return FALSE; - properties_changed_cb (priv->props_proxy, hash, self); - g_hash_table_destroy (hash); - return TRUE; } @@ -605,23 +563,6 @@ init_async_complete (NMRemoteConnectionInitData *init_data, GError *error) g_slice_free (NMRemoteConnectionInitData, init_data); } -static void -init_async_got_properties (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data) -{ - NMRemoteConnectionInitData *init_data = user_data; - NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (init_data->connection); - GHashTable *props; - GError *error = NULL; - - if (dbus_g_proxy_end_call (proxy, call, &error, - DBUS_TYPE_G_MAP_OF_VARIANT, &props, - G_TYPE_INVALID)) { - properties_changed_cb (priv->props_proxy, props, init_data->connection); - g_hash_table_destroy (props); - } - init_async_complete (init_data, error); -} - static void init_get_settings_cb (DBusGProxy *proxy, DBusGProxyCall *call, @@ -644,10 +585,23 @@ init_get_settings_cb (DBusGProxy *proxy, replace_settings (init_data->connection, settings); g_hash_table_destroy (settings); - /* Grab properties */ - dbus_g_proxy_begin_call (priv->props_proxy, "GetAll", - init_async_got_properties, init_data, NULL, - G_TYPE_STRING, NM_DBUS_INTERFACE_SETTINGS_CONNECTION, + init_async_complete (init_data, NULL); +} + +static void +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); + 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; + } + + dbus_g_proxy_begin_call (priv->proxy, "GetSettings", + init_get_settings_cb, init_data, NULL, G_TYPE_INVALID); } @@ -657,18 +611,14 @@ 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->result = g_simple_async_result_new (G_OBJECT (initable), callback, user_data, init_async); - init_common (init_data->connection); - - dbus_g_proxy_begin_call (priv->proxy, "GetSettings", - init_get_settings_cb, init_data, NULL, - G_TYPE_INVALID); + nm_remote_connection_parent_async_initable_iface-> + init_async (initable, io_priority, cancellable, init_async_parent_inited, init_data); } static gboolean @@ -692,9 +642,6 @@ get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { switch (prop_id) { - case PROP_PATH: - g_value_set_string (value, nm_connection_get_path (NM_CONNECTION (object))); - break; case PROP_UNSAVED: g_value_set_boolean (value, NM_REMOTE_CONNECTION_GET_PRIVATE (object)->unsaved); break; @@ -708,24 +655,10 @@ get_property (GObject *object, guint prop_id, } static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) +constructed (GObject *object) { - NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_DBUS_CONNECTION: - /* Construct only */ - priv->bus = g_value_dup_boxed (value); - break; - case PROP_PATH: - /* Construct only */ - nm_connection_set_path (NM_CONNECTION (object), g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + nm_connection_set_path (NM_CONNECTION (object), + nm_object_get_path (NM_OBJECT (object))); } static void @@ -740,12 +673,6 @@ dispose (GObject *object) g_signal_handlers_disconnect_by_func (priv->proxy, proxy_destroy_cb, object); g_clear_object (&priv->proxy); } - g_clear_object (&priv->props_proxy); - - if (priv->bus) { - dbus_g_connection_unref (priv->bus); - priv->bus = NULL; - } G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object); } @@ -754,41 +681,18 @@ static void nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) { GObjectClass *object_class = G_OBJECT_CLASS (remote_class); + NMObjectClass *nm_object_class = NM_OBJECT_CLASS (remote_class); g_type_class_add_private (object_class, sizeof (NMRemoteConnectionPrivate)); /* virtual methods */ + object_class->constructed = constructed; object_class->get_property = get_property; - object_class->set_property = set_property; object_class->dispose = dispose; + nm_object_class->init_dbus = init_dbus; + /* Properties */ - /** - * NMRemoteConnection:dbus-connection: - * - * The #DBusGConnection that the #NMRemoteConnection is connected to. - */ - g_object_class_install_property - (object_class, PROP_DBUS_CONNECTION, - g_param_spec_boxed (NM_REMOTE_CONNECTION_DBUS_CONNECTION, "", "", - DBUS_TYPE_G_CONNECTION, - G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); - - /** - * NMRemoteConnection:path: - * - * The D-Bus path of the connection that the #NMRemoteConnection represents. - */ - g_object_class_install_property - (object_class, PROP_PATH, - g_param_spec_string (NM_REMOTE_CONNECTION_PATH, "", "", - NULL, - G_PARAM_WRITABLE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); - /** * NMRemoteConnection:unsaved: * @@ -829,12 +733,16 @@ nm_remote_connection_connection_iface_init (NMConnectionInterface *iface) static void nm_remote_connection_initable_iface_init (GInitableIface *iface) { + nm_remote_connection_parent_initable_iface = g_type_interface_peek_parent (iface); + iface->init = init_sync; } static void 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; } diff --git a/libnm/nm-remote-connection.h b/libnm/nm-remote-connection.h index 01db85c363..d5668298a7 100644 --- a/libnm/nm-remote-connection.h +++ b/libnm/nm-remote-connection.h @@ -26,10 +26,8 @@ #error "Only can be included directly." #endif -#include -#include - #include +#include G_BEGIN_DECLS @@ -61,11 +59,11 @@ GQuark nm_remote_connection_error_quark (void); #define NM_REMOTE_CONNECTION_VISIBLE "visible" typedef struct { - GObject parent; + NMObject parent; } NMRemoteConnection; typedef struct { - GObjectClass parent_class; + NMObjectClass parent_class; /*< private >*/ gpointer padding[8];