diff options
author | Dan Winship <danw@gnome.org> | 2014-10-09 09:24:05 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-10-09 09:24:05 -0400 |
commit | 41dd3e841cba9a8a1a79db2477ed60a7f436e45d (patch) | |
tree | 594391ccb2f43403c5197000bb23049b0c6799b7 | |
parent | 695f3d010d3f9b9aeff3c3b1e22cbba6d66d0574 (diff) | |
download | NetworkManager-41dd3e841cba9a8a1a79db2477ed60a7f436e45d.tar.gz |
libnm: make NMActiveConnection:connection and :master be objectsdanw/libnm-merge
NMActiveConnection:connection was an object path rather than an
NMRemoteConnection because in the past the NMObject property system
wasn't capable of handling NMRemoteConnection-valued properties.
NMActiveConnection:master was an object path rather than an NMDevice
entirely by accident. Fix both.
NMActiveConnection:specific-object still has to be an object path
because we don't know ahead of time what object type it is, and
NMObject can't deal with that.
-rw-r--r-- | clients/cli/connections.c | 73 | ||||
-rw-r--r-- | clients/tui/nmt-connect-connection-list.c | 7 | ||||
-rw-r--r-- | libnm/nm-active-connection.c | 49 | ||||
-rw-r--r-- | libnm/nm-active-connection.h | 30 |
4 files changed, 64 insertions, 95 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index cfaa669b06..b1325f26a3 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -594,7 +594,7 @@ get_ac_device_string (NMActiveConnection *active) static NMActiveConnection * get_ac_for_connection (const GPtrArray *active_cons, NMConnection *connection) { - const char *con_path; + const char *con_path, *ac_con_path; int i; NMActiveConnection *ac = NULL; @@ -602,8 +602,11 @@ get_ac_for_connection (const GPtrArray *active_cons, NMConnection *connection) con_path = nm_connection_get_path (connection); for (i = 0; i < active_cons->len; i++) { NMActiveConnection *candidate = g_ptr_array_index (active_cons, i); + NMRemoteConnection *con; - if (!g_strcmp0 (nm_active_connection_get_connection (candidate), con_path)) { + con = nm_active_connection_get_connection (candidate); + ac_con_path = nm_connection_get_path (NM_CONNECTION (con)); + if (!g_strcmp0 (ac_con_path, con_path)) { ac = candidate; break; } @@ -611,24 +614,6 @@ get_ac_for_connection (const GPtrArray *active_cons, NMConnection *connection) return ac; } -static NMConnection * -get_connection_for_active (const GSList *con_list, NMActiveConnection *active) -{ - const GSList *iter; - const char *path; - - path = nm_active_connection_get_connection (active); - g_return_val_if_fail (path != NULL, NULL); - - for (iter = con_list; iter; iter = g_slist_next (iter)) { - NMConnection *candidate = NM_CONNECTION (iter->data); - - if (strcmp (nm_connection_get_path (candidate), path) == 0) - return candidate; - } - return NULL; -} - static gboolean nmc_connection_profile_details (NMConnection *connection, NmCli *nmc) { @@ -713,15 +698,15 @@ find_active_connection (const GPtrArray *active_cons, for (i = start; i < active_cons->len; i++) { NMActiveConnection *candidate = g_ptr_array_index (active_cons, i); - path = nm_active_connection_get_connection (candidate); + con = NM_CONNECTION (nm_active_connection_get_connection (candidate)); + id = nm_connection_get_id (con); + + path = nm_connection_get_path (con); a_path = nm_object_get_path (NM_OBJECT (candidate)); uuid = nm_active_connection_get_uuid (candidate); path_num = path ? strrchr (path, '/') + 1 : NULL; a_path_num = a_path ? strrchr (a_path, '/') + 1 : NULL; - con = get_connection_for_active (cons, candidate); - id = nm_connection_get_id (con); - /* When filter_type is NULL, compare connection ID (filter_val) * against all types. Otherwise, only compare against the specific * type. If 'path' or 'apath' filter types are specified, comparison @@ -813,21 +798,25 @@ fill_output_active_connection (NMActiveConnection *active, gboolean with_group, guint32 o_flags) { - GSList *iter; - const char *active_path; + NMConnection *con; NMSettingConnection *s_con; const GPtrArray *devices; GString *dev_str; NMActiveConnectionState state; + NMDevice *master; int i; - GSList *con_list = nmc->connections; NmcOutputField *tmpl, *arr; size_t tmpl_len; int idx_start = with_group ? 0 : 1; - active_path = nm_active_connection_get_connection (active); + con = NM_CONNECTION (nm_active_connection_get_connection (active)); + s_con = nm_connection_get_setting_connection (con); + g_assert (s_con != NULL); + state = nm_active_connection_get_state (active); + master = nm_active_connection_get_master (active); + /* Get devices of the active connection */ dev_str = g_string_new (NULL); devices = nm_active_connection_get_devices (active); @@ -854,7 +843,7 @@ fill_output_active_connection (NMActiveConnection *active, arr = nmc_dup_fields_array (tmpl, tmpl_len, o_flags); if (with_group) set_val_strc (arr, 0, nmc_fields_con_active_details_groups[0].name); - set_val_strc (arr, 1-idx_start, _("N/A")); + set_val_strc (arr, 1-idx_start, nm_setting_connection_get_id (s_con)); set_val_strc (arr, 2-idx_start, nm_active_connection_get_uuid (active)); set_val_str (arr, 3-idx_start, dev_str->str); set_val_strc (arr, 4-idx_start, active_connection_state_to_string (state)); @@ -863,26 +852,10 @@ fill_output_active_connection (NMActiveConnection *active, set_val_strc (arr, 7-idx_start, nm_active_connection_get_specific_object (active)); set_val_strc (arr, 8-idx_start, NM_IS_VPN_CONNECTION (active) ? _("yes") : _("no")); set_val_strc (arr, 9-idx_start, nm_object_get_path (NM_OBJECT (active))); - set_val_strc (arr, 10-idx_start, nm_active_connection_get_connection (active)); - set_val_strc (arr, 11-idx_start, _("N/A")); - set_val_strc (arr, 12-idx_start, nm_active_connection_get_master (active)); - - for (iter = con_list; iter; iter = g_slist_next (iter)) { - NMConnection *connection = (NMConnection *) iter->data; - const char *con_path = nm_connection_get_path (connection); + set_val_strc (arr, 10-idx_start, nm_connection_get_path (con)); + set_val_strc (arr, 11-idx_start, nm_setting_connection_get_zone (s_con)); + set_val_strc (arr, 12-idx_start, master ? nm_object_get_path (NM_OBJECT (master)) : NULL); - if (!strcmp (active_path, con_path)) { - /* This connection is active */ - s_con = nm_connection_get_setting_connection (connection); - g_assert (s_con != NULL); - - /* Fill field values that depend on NMConnection */ - set_val_strc (arr, 1-idx_start, nm_setting_connection_get_id (s_con)); - set_val_strc (arr, 11-idx_start, nm_setting_connection_get_zone (s_con)); - - break; - } - } g_ptr_array_add (nmc->output_data, arr); g_string_free (dev_str, FALSE); @@ -1097,7 +1070,7 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc) char **vpn_data_array = NULL; guint32 items_num; - con = get_connection_for_active (nmc->connections, acon); + con = NM_CONNECTION (nm_active_connection_get_connection (acon)); s_con = nm_connection_get_setting_connection (con); g_assert (s_con != NULL); @@ -1350,7 +1323,7 @@ do_connections_show (NmCli *nmc, gboolean active_only, int argc, char **argv) if (!con) { acon = find_active_connection (active_cons, nmc->connections, selector, *argv, NULL); if (acon) - con = get_connection_for_active (nmc->connections, acon); + con = NM_CONNECTION (nm_active_connection_get_connection (acon)); } /* Print connection details */ diff --git a/clients/tui/nmt-connect-connection-list.c b/clients/tui/nmt-connect-connection-list.c index f4dc0cf98e..4b80a807ed 100644 --- a/clients/tui/nmt-connect-connection-list.c +++ b/clients/tui/nmt-connect-connection-list.c @@ -445,15 +445,14 @@ connection_find_ac (NMConnection *conn, const GPtrArray *acs) { NMActiveConnection *ac; - const char *path, *ac_path; + NMRemoteConnection *ac_conn; int i; - path = nm_connection_get_path (conn); for (i = 0; i < acs->len; i++) { ac = acs->pdata[i]; - ac_path = nm_active_connection_get_connection (ac); + ac_conn = nm_active_connection_get_connection (ac); - if (!g_strcmp0 (path, ac_path)) + if (conn == NM_CONNECTION (ac_conn)) return ac; } diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index 80ab449355..3a21ce2ef7 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -35,6 +35,7 @@ #include "nm-dhcp6-config.h" #include "nm-ip4-config.h" #include "nm-ip6-config.h" +#include "nm-remote-connection.h" static GType _nm_active_connection_decide_type (GVariant *value); @@ -48,7 +49,7 @@ G_DEFINE_TYPE_WITH_CODE (NMActiveConnection, nm_active_connection, NM_TYPE_OBJEC #define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate)) typedef struct { - char *connection; + NMRemoteConnection *connection; char *id; char *uuid; char *type; @@ -62,7 +63,7 @@ typedef struct { NMIP6Config *ip6_config; NMDhcp6Config *dhcp6_config; gboolean is_vpn; - char *master; + NMDevice *master; } NMActiveConnectionPrivate; enum { @@ -100,15 +101,12 @@ _nm_active_connection_decide_type (GVariant *value) * nm_active_connection_get_connection: * @connection: a #NMActiveConnection * - * Gets the #NMConnection's DBus object path. This is often used with - * nm_remote_settings_get_connection_by_path() to retrieve the - * #NMRemoteConnection object that describes the connection. + * Gets the #NMRemoteConnection associated with @connection. * - * Returns: the object path of the #NMConnection which this #NMActiveConnection - * is an active instance of. This is the internal string used by the - * connection, and must not be modified. + * Returns: (transfer none): the #NMRemoteConnection which this + * #NMActiveConnection is an active instance of. **/ -const char * +NMRemoteConnection * nm_active_connection_get_connection (NMActiveConnection *connection) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL); @@ -345,12 +343,11 @@ nm_active_connection_get_vpn (NMActiveConnection *connection) * nm_active_connection_get_master: * @connection: a #NMActiveConnection * - * Gets the path to the master #NMDevice of the connection. + * Gets the master #NMDevice of the connection. * - * Returns: the path of the master #NMDevice of the #NMActiveConnection. - * This is the internal string used by the connection, and must not be modified. + * Returns: (transfer none): the master #NMDevice of the #NMActiveConnection. **/ -const char * +NMDevice * nm_active_connection_get_master (NMActiveConnection *connection) { g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL); @@ -370,6 +367,8 @@ dispose (GObject *object) g_clear_pointer (&priv->devices, g_ptr_array_unref); + g_clear_object (&priv->connection); + g_clear_object (&priv->master); g_clear_object (&priv->ip4_config); g_clear_object (&priv->dhcp4_config); g_clear_object (&priv->ip6_config); @@ -383,12 +382,10 @@ finalize (GObject *object) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); - g_free (priv->connection); g_free (priv->id); g_free (priv->uuid); g_free (priv->type); g_free (priv->specific_object); - g_free (priv->master); G_OBJECT_CLASS (nm_active_connection_parent_class)->finalize (object); } @@ -403,7 +400,7 @@ get_property (GObject *object, switch (prop_id) { case PROP_CONNECTION: - g_value_set_string (value, nm_active_connection_get_connection (self)); + g_value_set_object (value, nm_active_connection_get_connection (self)); break; case PROP_ID: g_value_set_string (value, nm_active_connection_get_id (self)); @@ -415,7 +412,7 @@ get_property (GObject *object, g_value_set_string (value, nm_active_connection_get_connection_type (self)); break; case PROP_SPECIFIC_OBJECT: - g_value_set_boxed (value, nm_active_connection_get_specific_object (self)); + g_value_set_string (value, nm_active_connection_get_specific_object (self)); break; case PROP_DEVICES: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_active_connection_get_devices (self))); @@ -445,7 +442,7 @@ get_property (GObject *object, g_value_set_boolean (value, nm_active_connection_get_vpn (self)); break; case PROP_MASTER: - g_value_set_string (value, nm_active_connection_get_master (self)); + g_value_set_object (value, nm_active_connection_get_master (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -458,7 +455,7 @@ init_dbus (NMObject *object) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); const NMPropertiesInfo property_info[] = { - { NM_ACTIVE_CONNECTION_CONNECTION, &priv->connection }, + { NM_ACTIVE_CONNECTION_CONNECTION, &priv->connection, NULL, NM_TYPE_REMOTE_CONNECTION }, { NM_ACTIVE_CONNECTION_ID, &priv->id }, { NM_ACTIVE_CONNECTION_UUID, &priv->uuid }, { NM_ACTIVE_CONNECTION_TYPE, &priv->type }, @@ -472,7 +469,7 @@ init_dbus (NMObject *object) { NM_ACTIVE_CONNECTION_IP6_CONFIG, &priv->ip6_config, NULL, NM_TYPE_IP6_CONFIG }, { NM_ACTIVE_CONNECTION_DHCP6_CONFIG, &priv->dhcp6_config, NULL, NM_TYPE_DHCP6_CONFIG }, { NM_ACTIVE_CONNECTION_VPN, &priv->is_vpn }, - { NM_ACTIVE_CONNECTION_MASTER, &priv->master }, + { NM_ACTIVE_CONNECTION_MASTER, &priv->master, NULL, NM_TYPE_DEVICE }, { NULL }, }; @@ -507,12 +504,12 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class) /** * NMActiveConnection:connection: * - * The connection's path of the active connection. + * The connection that this is an active instance of. **/ g_object_class_install_property (object_class, PROP_CONNECTION, - g_param_spec_string (NM_ACTIVE_CONNECTION_CONNECTION, "", "", - NULL, + g_param_spec_object (NM_ACTIVE_CONNECTION_CONNECTION, "", "", + NM_TYPE_REMOTE_CONNECTION, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); @@ -678,12 +675,12 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class) /** * NMActiveConnection:master: * - * The path of the master device if one exists. + * The master device if one exists. **/ g_object_class_install_property (object_class, PROP_MASTER, - g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER, "", "", - NULL, + g_param_spec_object (NM_ACTIVE_CONNECTION_MASTER, "", "", + NM_TYPE_DEVICE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); } diff --git a/libnm/nm-active-connection.h b/libnm/nm-active-connection.h index 2b0d6821c1..d0522beddb 100644 --- a/libnm/nm-active-connection.h +++ b/libnm/nm-active-connection.h @@ -66,21 +66,21 @@ typedef struct { GType nm_active_connection_get_type (void); -const char * nm_active_connection_get_connection (NMActiveConnection *connection); -const char * nm_active_connection_get_id (NMActiveConnection *connection); -const char * nm_active_connection_get_uuid (NMActiveConnection *connection); -const char * nm_active_connection_get_connection_type (NMActiveConnection *connection); -const char * nm_active_connection_get_specific_object (NMActiveConnection *connection); -const GPtrArray *nm_active_connection_get_devices (NMActiveConnection *connection); -NMActiveConnectionState nm_active_connection_get_state (NMActiveConnection *connection); -const char * nm_active_connection_get_master (NMActiveConnection *connection); -gboolean nm_active_connection_get_default (NMActiveConnection *connection); -NMIP4Config * nm_active_connection_get_ip4_config (NMActiveConnection *connection); -NMDhcp4Config *nm_active_connection_get_dhcp4_config (NMActiveConnection *connection); -gboolean nm_active_connection_get_default6 (NMActiveConnection *connection); -NMIP6Config * nm_active_connection_get_ip6_config (NMActiveConnection *connection); -NMDhcp6Config *nm_active_connection_get_dhcp6_config (NMActiveConnection *connection); -gboolean nm_active_connection_get_vpn (NMActiveConnection *connection); +NMRemoteConnection *nm_active_connection_get_connection (NMActiveConnection *connection); +const char *nm_active_connection_get_id (NMActiveConnection *connection); +const char *nm_active_connection_get_uuid (NMActiveConnection *connection); +const char *nm_active_connection_get_connection_type (NMActiveConnection *connection); +const char *nm_active_connection_get_specific_object (NMActiveConnection *connection); +const GPtrArray *nm_active_connection_get_devices (NMActiveConnection *connection); +NMActiveConnectionState nm_active_connection_get_state (NMActiveConnection *connection); +NMDevice *nm_active_connection_get_master (NMActiveConnection *connection); +gboolean nm_active_connection_get_default (NMActiveConnection *connection); +NMIP4Config *nm_active_connection_get_ip4_config (NMActiveConnection *connection); +NMDhcp4Config *nm_active_connection_get_dhcp4_config (NMActiveConnection *connection); +gboolean nm_active_connection_get_default6 (NMActiveConnection *connection); +NMIP6Config *nm_active_connection_get_ip6_config (NMActiveConnection *connection); +NMDhcp6Config *nm_active_connection_get_dhcp6_config (NMActiveConnection *connection); +gboolean nm_active_connection_get_vpn (NMActiveConnection *connection); G_END_DECLS |