network: add net_device_get_valid_connections() and use it everywhere
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
This commit is contained in:
parent
7246b2b7ef
commit
ebd863e714
5 changed files with 49 additions and 103 deletions
|
@ -56,35 +56,6 @@ device_ethernet_get_speed (NetDeviceSimple *device_simple)
|
||||||
return NULL;
|
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 *
|
static GtkWidget *
|
||||||
device_ethernet_add_to_notebook (NetObject *object,
|
device_ethernet_add_to_notebook (NetObject *object,
|
||||||
GtkNotebook *notebook,
|
GtkNotebook *notebook,
|
||||||
|
@ -391,7 +362,6 @@ connection_removed (NMRemoteConnection *connection,
|
||||||
static void
|
static void
|
||||||
populate_ui (NetDeviceEthernet *device)
|
populate_ui (NetDeviceEthernet *device)
|
||||||
{
|
{
|
||||||
NMRemoteSettings *settings;
|
|
||||||
GList *children, *c;
|
GList *children, *c;
|
||||||
GSList *connections, *l;
|
GSList *connections, *l;
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
@ -409,10 +379,7 @@ populate_ui (NetDeviceEthernet *device)
|
||||||
}
|
}
|
||||||
g_list_free (children);
|
g_list_free (children);
|
||||||
|
|
||||||
settings = net_object_get_remote_settings (NET_OBJECT (device));
|
connections = net_device_get_valid_connections (NET_DEVICE (device));
|
||||||
connections = valid_connections_for_device (settings, NET_DEVICE (device));
|
|
||||||
|
|
||||||
|
|
||||||
for (l = connections; l; l = l->next) {
|
for (l = connections; l; l = l->next) {
|
||||||
NMConnection *connection = l->data;
|
NMConnection *connection = l->data;
|
||||||
if (!g_object_get_data (G_OBJECT (connection), "removed_signal_handler")) {
|
if (!g_object_get_data (G_OBJECT (connection), "removed_signal_handler")) {
|
||||||
|
|
|
@ -184,21 +184,16 @@ device_add_device_connections (NetDeviceMobile *device_mobile,
|
||||||
GtkComboBox *combobox)
|
GtkComboBox *combobox)
|
||||||
{
|
{
|
||||||
NetDeviceMobilePrivate *priv = device_mobile->priv;
|
NetDeviceMobilePrivate *priv = device_mobile->priv;
|
||||||
GSList *filtered;
|
|
||||||
GSList *list, *l;
|
GSList *list, *l;
|
||||||
GtkTreeIter treeiter;
|
GtkTreeIter treeiter;
|
||||||
NMActiveConnection *active_connection;
|
NMActiveConnection *active_connection;
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
NMRemoteSettings *remote_settings;
|
|
||||||
|
|
||||||
/* get the list of available connections for this device */
|
/* get the list of available connections for this device */
|
||||||
remote_settings = net_object_get_remote_settings (NET_OBJECT (device_mobile));
|
list = net_device_get_valid_connections (NET_DEVICE (device_mobile));
|
||||||
g_assert (remote_settings != NULL);
|
|
||||||
list = nm_remote_settings_list_connections (remote_settings);
|
|
||||||
filtered = nm_device_filter_connections (nm_device, list);
|
|
||||||
gtk_list_store_clear (liststore);
|
gtk_list_store_clear (liststore);
|
||||||
active_connection = nm_device_get_active_connection (nm_device);
|
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);
|
connection = NM_CONNECTION (l->data);
|
||||||
gtk_list_store_append (liststore, &treeiter);
|
gtk_list_store_append (liststore, &treeiter);
|
||||||
gtk_list_store_set (liststore,
|
gtk_list_store_set (liststore,
|
||||||
|
@ -226,7 +221,6 @@ device_add_device_connections (NetDeviceMobile *device_mobile,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
g_slist_free (list);
|
g_slist_free (list);
|
||||||
g_slist_free (filtered);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -700,11 +700,9 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
|
||||||
const GByteArray *ssid;
|
const GByteArray *ssid;
|
||||||
const gchar *ssid_tmp;
|
const gchar *ssid_tmp;
|
||||||
GSList *list, *l;
|
GSList *list, *l;
|
||||||
GSList *filtered;
|
|
||||||
NMConnection *connection_activate = NULL;
|
NMConnection *connection_activate = NULL;
|
||||||
NMDevice *device;
|
NMDevice *device;
|
||||||
NMSettingWireless *setting_wireless;
|
NMSettingWireless *setting_wireless;
|
||||||
NMRemoteSettings *remote_settings;
|
|
||||||
NMClient *client;
|
NMClient *client;
|
||||||
|
|
||||||
if (device_wifi->priv->updating_device)
|
if (device_wifi->priv->updating_device)
|
||||||
|
@ -721,12 +719,9 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
|
||||||
ssid_target, ap_object_path);
|
ssid_target, ap_object_path);
|
||||||
|
|
||||||
/* look for an existing connection we can use */
|
/* look for an existing connection we can use */
|
||||||
remote_settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
|
list = net_device_get_valid_connections (NET_DEVICE (device_wifi));
|
||||||
list = nm_remote_settings_list_connections (remote_settings);
|
g_debug ("%i suitable remote connections to check", g_slist_length (list));
|
||||||
g_debug ("%i existing remote connections available", g_slist_length (list));
|
for (l = list; l; l = g_slist_next (l)) {
|
||||||
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)) {
|
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
|
||||||
connection = NM_CONNECTION (l->data);
|
connection = NM_CONNECTION (l->data);
|
||||||
|
@ -746,7 +741,6 @@ wireless_try_to_connect (NetDeviceWifi *device_wifi,
|
||||||
}
|
}
|
||||||
|
|
||||||
g_slist_free (list);
|
g_slist_free (list);
|
||||||
g_slist_free (filtered);
|
|
||||||
|
|
||||||
/* activate the connection */
|
/* activate the connection */
|
||||||
client = net_object_get_client (NET_OBJECT (device_wifi));
|
client = net_object_get_client (NET_OBJECT (device_wifi));
|
||||||
|
@ -974,27 +968,22 @@ start_shared_connection (NetDeviceWifi *device_wifi)
|
||||||
const gchar *str_mac;
|
const gchar *str_mac;
|
||||||
struct ether_addr *bin_mac;
|
struct ether_addr *bin_mac;
|
||||||
GSList *connections;
|
GSList *connections;
|
||||||
GSList *filtered;
|
|
||||||
GSList *l;
|
GSList *l;
|
||||||
NMClient *client;
|
NMClient *client;
|
||||||
NMRemoteSettings *remote_settings;
|
|
||||||
|
|
||||||
device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
||||||
g_assert (nm_device_get_device_type (device) == NM_DEVICE_TYPE_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 = net_device_get_valid_connections (NET_DEVICE (device_wifi));
|
||||||
connections = nm_remote_settings_list_connections (remote_settings);
|
|
||||||
filtered = nm_device_filter_connections (device, connections);
|
|
||||||
g_slist_free (connections);
|
|
||||||
c = NULL;
|
c = NULL;
|
||||||
for (l = filtered; l; l = l->next) {
|
for (l = connections; l; l = l->next) {
|
||||||
tmp = l->data;
|
tmp = l->data;
|
||||||
if (is_hotspot_connection (tmp)) {
|
if (is_hotspot_connection (tmp)) {
|
||||||
c = tmp;
|
c = tmp;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_slist_free (filtered);
|
g_slist_free (connections);
|
||||||
|
|
||||||
client = net_object_get_client (NET_OBJECT (device_wifi));
|
client = net_object_get_client (NET_OBJECT (device_wifi));
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
|
@ -1680,9 +1669,7 @@ open_history (NetDeviceWifi *device_wifi)
|
||||||
GtkWidget *button;
|
GtkWidget *button;
|
||||||
GtkWidget *forget;
|
GtkWidget *forget;
|
||||||
GtkWidget *swin;
|
GtkWidget *swin;
|
||||||
NMRemoteSettings *settings;
|
|
||||||
GSList *connections;
|
GSList *connections;
|
||||||
GSList *filtered;
|
|
||||||
GSList *l;
|
GSList *l;
|
||||||
const GPtrArray *aps;
|
const GPtrArray *aps;
|
||||||
GPtrArray *aps_unique = NULL;
|
GPtrArray *aps_unique = NULL;
|
||||||
|
@ -1743,15 +1730,13 @@ open_history (NetDeviceWifi *device_wifi)
|
||||||
|
|
||||||
nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
||||||
|
|
||||||
settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
|
connections = net_device_get_valid_connections (NET_DEVICE (device_wifi));
|
||||||
connections = nm_remote_settings_list_connections (settings);
|
|
||||||
filtered = nm_device_filter_connections (nm_device, connections);
|
|
||||||
|
|
||||||
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device));
|
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device));
|
||||||
aps_unique = panel_get_strongest_unique_aps (aps);
|
aps_unique = panel_get_strongest_unique_aps (aps);
|
||||||
active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (nm_device));
|
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;
|
NMConnection *connection = l->data;
|
||||||
NMAccessPoint *ap = NULL;
|
NMAccessPoint *ap = NULL;
|
||||||
NMSetting *setting;
|
NMSetting *setting;
|
||||||
|
@ -1779,7 +1764,6 @@ open_history (NetDeviceWifi *device_wifi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_slist_free (connections);
|
g_slist_free (connections);
|
||||||
g_slist_free (filtered);
|
|
||||||
|
|
||||||
gtk_window_present (GTK_WINDOW (dialog));
|
gtk_window_present (GTK_WINDOW (dialog));
|
||||||
}
|
}
|
||||||
|
@ -1792,9 +1776,7 @@ populate_ap_list (NetDeviceWifi *device_wifi)
|
||||||
GtkSizeGroup *rows;
|
GtkSizeGroup *rows;
|
||||||
GtkSizeGroup *icons;
|
GtkSizeGroup *icons;
|
||||||
NMDevice *nm_device;
|
NMDevice *nm_device;
|
||||||
NMRemoteSettings *settings;
|
|
||||||
GSList *connections;
|
GSList *connections;
|
||||||
GSList *filtered;
|
|
||||||
GSList *l;
|
GSList *l;
|
||||||
const GPtrArray *aps;
|
const GPtrArray *aps;
|
||||||
GPtrArray *aps_unique = NULL;
|
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));
|
nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi));
|
||||||
|
|
||||||
settings = net_object_get_remote_settings (NET_OBJECT (device_wifi));
|
connections = net_device_get_valid_connections (NET_DEVICE (device_wifi));
|
||||||
connections = nm_remote_settings_list_connections (settings);
|
|
||||||
filtered = nm_device_filter_connections (nm_device, connections);
|
|
||||||
|
|
||||||
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device));
|
aps = nm_device_wifi_get_access_points (NM_DEVICE_WIFI (nm_device));
|
||||||
aps_unique = panel_get_strongest_unique_aps (aps);
|
aps_unique = panel_get_strongest_unique_aps (aps);
|
||||||
|
@ -1833,7 +1813,7 @@ populate_ap_list (NetDeviceWifi *device_wifi)
|
||||||
NMConnection *connection = NULL;
|
NMConnection *connection = NULL;
|
||||||
ap = NM_ACCESS_POINT (g_ptr_array_index (aps_unique, i));
|
ap = NM_ACCESS_POINT (g_ptr_array_index (aps_unique, i));
|
||||||
ssid_ap = nm_access_point_get_ssid (ap);
|
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;
|
connection = l->data;
|
||||||
NMSetting *setting;
|
NMSetting *setting;
|
||||||
const GByteArray *ssid;
|
const GByteArray *ssid;
|
||||||
|
@ -1858,7 +1838,6 @@ populate_ap_list (NetDeviceWifi *device_wifi)
|
||||||
}
|
}
|
||||||
|
|
||||||
g_slist_free (connections);
|
g_slist_free (connections);
|
||||||
g_slist_free (filtered);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -165,35 +165,6 @@ compare_mac_device_with_mac_connection (NMDevice *device,
|
||||||
return FALSE;
|
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 *
|
static NMConnection *
|
||||||
net_device_real_get_find_connection (NetDevice *device)
|
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 */
|
/* 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 != NULL) {
|
||||||
/* if list has only one connection, use this connection */
|
/* if list has only one connection, use this connection */
|
||||||
if (g_slist_length (list) == 1) {
|
if (g_slist_length (list) == 1) {
|
||||||
|
@ -387,3 +358,36 @@ net_device_new (void)
|
||||||
return NET_DEVICE (device);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -58,6 +58,8 @@ NetDevice *net_device_new (void);
|
||||||
NMDevice *net_device_get_nm_device (NetDevice *device);
|
NMDevice *net_device_get_nm_device (NetDevice *device);
|
||||||
NMConnection *net_device_get_find_connection (NetDevice *device);
|
NMConnection *net_device_get_find_connection (NetDevice *device);
|
||||||
|
|
||||||
|
GSList *net_device_get_valid_connections (NetDevice *device);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __NET_DEVICE_H */
|
#endif /* __NET_DEVICE_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue