vpn: simplify duplicate service checking

This commit is contained in:
Dan Williams
2014-05-15 17:03:02 -05:00
parent 063411df42
commit c9d183f7fc
3 changed files with 14 additions and 35 deletions

View File

@@ -184,58 +184,37 @@ nm_vpn_manager_deactivate_connection (NMVPNManager *self,
return success; return success;
} }
static char *
service_name_from_file (const char *path)
{
GKeyFile *kf = NULL;
char *service_name = NULL;
g_return_val_if_fail (g_path_is_absolute (path), NULL);
if (!g_str_has_suffix (path, ".name"))
return NULL;
kf = g_key_file_new ();
if (g_key_file_load_from_file (kf, path, G_KEY_FILE_NONE, NULL))
service_name = g_key_file_get_string (kf, VPN_CONNECTION_GROUP, "service", NULL);
g_key_file_free (kf);
return service_name;
}
static void static void
try_add_service (NMVPNManager *self, const char *namefile) try_add_service (NMVPNManager *self, const char *namefile)
{ {
NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self); NMVPNManagerPrivate *priv = NM_VPN_MANAGER_GET_PRIVATE (self);
NMVPNService *service = NULL; NMVPNService *service = NULL;
GHashTableIter iter;
GError *error = NULL; GError *error = NULL;
const char *service_name; const char *service_name;
char *tmp;
g_return_if_fail (g_path_is_absolute (namefile)); g_return_if_fail (g_path_is_absolute (namefile));
/* Make sure we don't add dupes */ /* Make sure we don't add dupes */
tmp = service_name_from_file (namefile); g_hash_table_iter_init (&iter, priv->services);
if (tmp) while (g_hash_table_iter_next (&iter, NULL, (gpointer) &service)) {
service = g_hash_table_lookup (priv->services, tmp); if (g_strcmp0 (namefile, nm_vpn_service_get_name_file (service)) == 0)
g_free (tmp); return;
if (service) }
return;
/* New service, add it */ /* New service */
service = nm_vpn_service_new (namefile, &error); service = nm_vpn_service_new (namefile, &error);
if (!service) { if (service) {
service_name = nm_vpn_service_get_dbus_service (service);
g_hash_table_insert (priv->services, (char *) service_name, service);
nm_log_info (LOGD_VPN, "VPN: loaded %s", service_name);
} else {
nm_log_warn (LOGD_VPN, "failed to load VPN service file %s: (%d) %s", nm_log_warn (LOGD_VPN, "failed to load VPN service file %s: (%d) %s",
namefile, namefile,
error ? error->code : -1, error ? error->code : -1,
error && error->message ? error->message : "(unknown)"); error && error->message ? error->message : "(unknown)");
g_clear_error (&error); g_clear_error (&error);
return;
} }
service_name = nm_vpn_service_get_dbus_service (service);
g_hash_table_insert (priv->services, (char *) service_name, service);
nm_log_info (LOGD_VPN, "VPN: loaded %s", service_name);
} }
static void static void

View File

@@ -52,6 +52,8 @@ typedef struct {
#define NM_VPN_SERVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_SERVICE, NMVPNServicePrivate)) #define NM_VPN_SERVICE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_SERVICE, NMVPNServicePrivate))
#define VPN_CONNECTION_GROUP "VPN Connection"
NMVPNService * NMVPNService *
nm_vpn_service_new (const char *namefile, GError **error) nm_vpn_service_new (const char *namefile, GError **error)
{ {

View File

@@ -34,8 +34,6 @@
#define NM_IS_VPN_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_SERVICE)) #define NM_IS_VPN_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_VPN_SERVICE))
#define NM_VPN_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_SERVICE, NMVPNServiceClass)) #define NM_VPN_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_SERVICE, NMVPNServiceClass))
#define VPN_CONNECTION_GROUP "VPN Connection"
typedef struct { typedef struct {
GObject parent; GObject parent;
} NMVPNService; } NMVPNService;