summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2013-01-28 16:27:47 -0500
committerDan Winship <danw@gnome.org>2013-01-30 10:51:17 -0500
commit7f3512a50b2313f4f4a689c3a8a2df9990919f48 (patch)
tree7c3faa8d842a2344f0e0b610d230c3a99a83ce74
parentd6fb8a7d5f3cf019c04ae05d89844e23a46b80a4 (diff)
downloadgnome-control-center-wip/networking3.tar.gz
network: add net_device_get_valid_connections() and use it everywherewip/networking3
In addition to simplifying a bunch of places that were calling nm_remote_settings_list_connections() + nm_device_filter_connections(), this also ensures we filter out slave connections everywhere (except when they are the active connection). https://bugzilla.gnome.org/show_bug.cgi?id=677145
-rw-r--r--panels/network/net-device-ethernet.c35
-rw-r--r--panels/network/net-device-mobile.c10
-rw-r--r--panels/network/net-device-wifi.c41
-rw-r--r--panels/network/net-device.c64
-rw-r--r--panels/network/net-device.h2
5 files changed, 49 insertions, 103 deletions
diff --git a/panels/network/net-device-ethernet.c b/panels/network/net-device-ethernet.c
index d86baeef2..762448a4c 100644
--- a/panels/network/net-device-ethernet.c
+++ b/panels/network/net-device-ethernet.c
@@ -56,35 +56,6 @@ device_ethernet_get_speed (NetDeviceSimple *device_simple)
return NULL;
}
-static GSList *
-valid_connections_for_device (NMRemoteSettings *remote_settings,
- NetDevice *device)
-{
- GSList *all, *filtered, *iterator, *valid;
- NMConnection *connection;
- NMSettingConnection *s_con;
-
- all = nm_remote_settings_list_connections (remote_settings);
- filtered = nm_device_filter_connections (net_device_get_nm_device (device), all);
- g_slist_free (all);
-
- valid = NULL;
- for (iterator = filtered; iterator; iterator = iterator->next) {
- connection = iterator->data;
- s_con = nm_connection_get_setting_connection (connection);
- if (!s_con)
- continue;
-
- if (nm_setting_connection_get_master (s_con))
- continue;
-
- valid = g_slist_prepend (valid, connection);
- }
- g_slist_free (filtered);
-
- return g_slist_reverse (valid);
-}
-
static GtkWidget *
device_ethernet_add_to_notebook (NetObject *object,
GtkNotebook *notebook,
@@ -391,7 +362,6 @@ connection_removed (NMRemoteConnection *connection,
static void
populate_ui (NetDeviceEthernet *device)
{
- NMRemoteSettings *settings;
GList *children, *c;
GSList *connections, *l;
NMConnection *connection;
@@ -409,10 +379,7 @@ populate_ui (NetDeviceEthernet *device)
}
g_list_free (children);
- settings = net_object_get_remote_settings (NET_OBJECT (device));
- connections = valid_connections_for_device (settings, NET_DEVICE (device));
-
-
+ connections = net_device_get_valid_connections (NET_DEVICE (device));
for (l = connections; l; l = l->next) {
NMConnection *connection = l->data;
if (!g_object_get_data (G_OBJECT (connection), "removed_signal_handler")) {
diff --git a/panels/network/net-device-mobile.c b/panels/network/net-device-mobile.c
index 195271839..1ca25322a 100644
--- a/panels/network/net-device-mobile.c
+++ b/panels/network/net-device-mobile.c
@@ -184,21 +184,16 @@ device_add_device_connections (NetDeviceMobile *device_mobile,
GtkComboBox *combobox)
{
NetDeviceMobilePrivate *priv = device_mobile->priv;
- GSList *filtered;
GSList *list, *l;
GtkTreeIter treeiter;
NMActiveConnection *active_connection;
NMConnection *connection;
- NMRemoteSettings *remote_settings;
/* get the list of available connections for this device */
- remote_settings = net_object_get_remote_settings (NET_OBJECT (device_mobile));
- g_assert (remote_settings != NULL);
- list = nm_remote_settings_list_connections (remote_settings);
- filtered = nm_device_filter_connections (nm_device, list);
+ list = net_device_get_valid_connections (NET_DEVICE (device_mobile));
gtk_list_store_clear (liststore);
active_connection = nm_device_get_active_connection (nm_device);
- for (l = filtered; l; l = g_slist_next (l)) {
+ for (l = list; l; l = g_slist_next (l)) {
connection = NM_CONNECTION (l->data);
gtk_list_store_append (liststore, &treeiter);
gtk_list_store_set (liststore,
@@ -226,7 +221,6 @@ device_add_device_connections (NetDeviceMobile *device_mobile,
-1);
g_slist_free (list);
- g_slist_free (filtered);
}
static void
diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c
index aedf2d3d3..e08fa0a4e 100644
--- a/panels/network/net-device-wifi.c
+++ b/panels/network/net-device-wifi.c
@@ -700,11 +700,9 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
const GByteArray *ssid;
const gchar *ssid_tmp;
GSList *list, *l;
- GSList *filtered;
NMConnection *connection_activate = NULL;
NMDevice *device;
NMSettingWireless *setting_wireless;
- NMRemoteSettings *remote_settings;
NMClient *client;
if (device_wifi->priv->updating_device)
@@ -721,12 +719,9 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
ssid_target, ap_object_path);
/* look for an existing connection we can use */
- remote_settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
- list = nm_remote_settings_list_connections (remote_settings);
- g_debug ("%i existing remote connections available", g_slist_length (list));
- filtered = nm_device_filter_connections (device, list);
- g_debug ("%i suitable remote connections to check", g_slist_length (filtered));
- for (l = filtered; l; l = g_slist_next (l)) {
+ list = net_device_get_valid_connections (NET_DEVICE (device_wifi));
+ g_debug ("%i suitable remote connections to check", g_slist_length (list));
+ for (l = list; l; l = g_slist_next (l)) {
NMConnection *connection;
connection = NM_CONNECTION (l->data);
@@ -746,7 +741,6 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
}
g_slist_free (list);
- g_slist_free (filtered);
/* activate the connection */
client = net_object_get_client (NET_OBJECT (device_wifi));
@@ -974,27 +968,22 @@ start_shared_connection (NetDeviceWifi *device_wifi)
const gchar *str_mac;
struct ether_addr *bin_mac;
GSList *connections;
- GSList *filtered;
GSList *l;
NMClient *client;
- NMRemoteSettings *remote_settings;
device = net_device_get_nm_device (NET_DEVICE (device_wifi));
g_assert (nm_device_get_device_type (device) == NM_DEVICE_TYPE_WIFI);
- remote_settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
- connections = nm_remote_settings_list_connections (remote_settings);
- filtered = nm_device_filter_connections (device, connections);
- g_slist_free (connections);
+ connections = net_device_get_valid_connections (NET_DEVICE (device_wifi));
c = NULL;
- for (l = filtered; l; l = l->next) {
+ for (l = connections; l; l = l->next) {
tmp = l->data;
if (is_hotspot_connection (tmp)) {
c = tmp;
break;
}
}
- g_slist_free (filtered);
+ g_slist_free (connections);
client = net_object_get_client (NET_OBJECT (device_wifi));
if (c != NULL) {
@@ -1680,9 +1669,7 @@ open_history (NetDeviceWifi *device_wifi)
GtkWidget *button;
GtkWidget *forget;
GtkWidget *swin;
- NMRemoteSettings *settings;
GSList *connections;
- GSList *filtered;
GSList *l;
const GPtrArray *aps;
GPtrArray *aps_unique = NULL;
@@ -1743,15 +1730,13 @@ open_history (NetDeviceWifi *device_wifi)
nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi));
- settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
- connections = nm_remote_settings_list_connections (settings);
- filtered = nm_device_filter_connections (nm_device, connections);
+ connections = net_device_get_valid_connections (NET_DEVICE (device_wifi));
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device));
aps_unique = panel_get_strongest_unique_aps (aps);
active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (nm_device));
- for (l = filtered; l; l = l->next) {
+ for (l = connections; l; l = l->next) {
NMConnection *connection = l->data;
NMAccessPoint *ap = NULL;
NMSetting *setting;
@@ -1779,7 +1764,6 @@ open_history (NetDeviceWifi *device_wifi)
}
}
g_slist_free (connections);
- g_slist_free (filtered);
gtk_window_present (GTK_WINDOW (dialog));
}
@@ -1792,9 +1776,7 @@ populate_ap_list (NetDeviceWifi *device_wifi)
GtkSizeGroup *rows;
GtkSizeGroup *icons;
NMDevice *nm_device;
- NMRemoteSettings *settings;
GSList *connections;
- GSList *filtered;
GSList *l;
const GPtrArray *aps;
GPtrArray *aps_unique = NULL;
@@ -1819,9 +1801,7 @@ populate_ap_list (NetDeviceWifi *device_wifi)
nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi));
- settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
- connections = nm_remote_settings_list_connections (settings);
- filtered = nm_device_filter_connections (nm_device, connections);
+ connections = net_device_get_valid_connections (NET_DEVICE (device_wifi));
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device));
aps_unique = panel_get_strongest_unique_aps (aps);
@@ -1833,7 +1813,7 @@ populate_ap_list (NetDeviceWifi *device_wifi)
NMConnection *connection = NULL;
ap = NM_ACCESS_POINT (g_ptr_array_index (aps_unique, i));
ssid_ap = nm_access_point_get_ssid (ap);
- for (l = filtered; l; l = l->next) {
+ for (l = connections; l; l = l->next) {
connection = l->data;
NMSetting *setting;
const GByteArray *ssid;
@@ -1858,7 +1838,6 @@ populate_ap_list (NetDeviceWifi *device_wifi)
}
g_slist_free (connections);
- g_slist_free (filtered);
}
static void
diff --git a/panels/network/net-device.c b/panels/network/net-device.c
index 453946f38..ec8be06c1 100644
--- a/panels/network/net-device.c
+++ b/panels/network/net-device.c
@@ -165,35 +165,6 @@ compare_mac_device_with_mac_connection (NMDevice *device,
return FALSE;
}
-static GSList *
-valid_connections_for_device (NMRemoteSettings *remote_settings,
- NetDevice *device)
-{
- GSList *all, *filtered, *iterator, *valid;
- NMConnection *connection;
- NMSettingConnection *s_con;
-
- all = nm_remote_settings_list_connections (remote_settings);
- filtered = nm_device_filter_connections (device->priv->nm_device, all);
- g_slist_free (all);
-
- valid = NULL;
- for (iterator = filtered; iterator; iterator = iterator->next) {
- connection = iterator->data;
- s_con = nm_connection_get_setting_connection (connection);
- if (!s_con)
- continue;
-
- if (nm_setting_connection_get_master (s_con))
- continue;
-
- valid = g_slist_prepend (valid, connection);
- }
- g_slist_free (filtered);
-
- return g_slist_reverse (valid);
-}
-
static NMConnection *
net_device_real_get_find_connection (NetDevice *device)
{
@@ -211,7 +182,7 @@ net_device_real_get_find_connection (NetDevice *device)
}
/* not found in active connections - check all available connections */
- list = valid_connections_for_device (remote_settings, device);
+ list = net_device_get_valid_connections (device);
if (list != NULL) {
/* if list has only one connection, use this connection */
if (g_slist_length (list) == 1) {
@@ -387,3 +358,36 @@ net_device_new (void)
return NET_DEVICE (device);
}
+GSList *
+net_device_get_valid_connections (NetDevice *device)
+{
+ GSList *all, *filtered, *iterator, *valid;
+ NMConnection *connection;
+ NMSettingConnection *s_con;
+ NMActiveConnection *active_connection;
+ const char *active_uuid;
+
+ all = nm_remote_settings_list_connections (net_object_get_remote_settings (NET_OBJECT (device)));
+ filtered = nm_device_filter_connections (net_device_get_nm_device (device), all);
+ g_slist_free (all);
+
+ active_connection = nm_device_get_active_connection (net_device_get_nm_device (device));
+ active_uuid = active_connection ? nm_active_connection_get_uuid (active_connection) : NULL;
+
+ valid = NULL;
+ for (iterator = filtered; iterator; iterator = iterator->next) {
+ connection = iterator->data;
+ s_con = nm_connection_get_setting_connection (connection);
+ if (!s_con)
+ continue;
+
+ if (nm_setting_connection_get_master (s_con) &&
+ g_strcmp0 (nm_setting_connection_get_uuid (s_con), active_uuid) != 0)
+ continue;
+
+ valid = g_slist_prepend (valid, connection);
+ }
+ g_slist_free (filtered);
+
+ return g_slist_reverse (valid);
+}
diff --git a/panels/network/net-device.h b/panels/network/net-device.h
index f8e9dd06f..03fde5eb0 100644
--- a/panels/network/net-device.h
+++ b/panels/network/net-device.h
@@ -58,6 +58,8 @@ NetDevice *net_device_new (void);
NMDevice *net_device_get_nm_device (NetDevice *device);
NMConnection *net_device_get_find_connection (NetDevice *device);
+GSList *net_device_get_valid_connections (NetDevice *device);
+
G_END_DECLS
#endif /* __NET_DEVICE_H */