diff --git a/src/vpn-manager/nm-vpn-manager.c b/src/vpn-manager/nm-vpn-manager.c index bee31dbc2c..066cfc0ea2 100644 --- a/src/vpn-manager/nm-vpn-manager.c +++ b/src/vpn-manager/nm-vpn-manager.c @@ -80,25 +80,15 @@ find_active_vpn_connection (NMVPNManager *self, NMConnection *connection) { NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self); GHashTableIter iter; - gpointer data; - const GSList *active, *aiter; + NMVPNService *service; NMVPNConnection *found = NULL; g_return_val_if_fail (connection, NULL); g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); g_hash_table_iter_init (&iter, priv->services); - while (g_hash_table_iter_next (&iter, NULL, &data) && (found == NULL)) { - active = nm_vpn_service_get_active_connections (NM_VPN_SERVICE (data)); - for (aiter = active; aiter; aiter = g_slist_next (aiter)) { - NMVPNConnection *vpn = NM_VPN_CONNECTION (aiter->data); - - if (nm_vpn_connection_get_connection (vpn) == connection) { - found = vpn; - break; - } - } - } + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &service) && !found) + found = nm_vpn_service_get_vpn_for_connection (service, connection); return found; } diff --git a/src/vpn-manager/nm-vpn-service.c b/src/vpn-manager/nm-vpn-service.c index 43d9cf335b..3af65fc2b0 100644 --- a/src/vpn-manager/nm-vpn-service.c +++ b/src/vpn-manager/nm-vpn-service.c @@ -284,12 +284,16 @@ nm_vpn_service_activate (NMVPNService *service, return TRUE; } -const GSList * -nm_vpn_service_get_active_connections (NMVPNService *service) +NMVPNConnection * +nm_vpn_service_get_vpn_for_connection (NMVPNService *service, NMConnection *connection) { - g_return_val_if_fail (NM_IS_VPN_SERVICE (service), NULL); + GSList *iter; - return NM_VPN_SERVICE_GET_PRIVATE (service)->connections; + for (iter = NM_VPN_SERVICE_GET_PRIVATE (service)->connections; iter; iter = iter->next) { + if (nm_vpn_connection_get_connection (NM_VPN_CONNECTION (iter->data)) == connection) + return NM_VPN_CONNECTION (iter->data); + } + return NULL; } static void diff --git a/src/vpn-manager/nm-vpn-service.h b/src/vpn-manager/nm-vpn-service.h index cfb199730d..9f8228fc0f 100644 --- a/src/vpn-manager/nm-vpn-service.h +++ b/src/vpn-manager/nm-vpn-service.h @@ -56,7 +56,8 @@ gboolean nm_vpn_service_activate (NMVPNService *service, NMVPNConnection *vpn, GError **error); -const GSList *nm_vpn_service_get_active_connections (NMVPNService *service); +NMVPNConnection *nm_vpn_service_get_vpn_for_connection (NMVPNService *service, + NMConnection *connection); void nm_vpn_service_connections_stop (NMVPNService *service, gboolean fail,