diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2015-08-24 18:06:54 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2015-10-13 19:46:05 +0200 |
commit | a9fad49eceb1928fb7dd5ff63f4b4b384f35c81a (patch) | |
tree | 923aeff34dccf99c717f1705a1628a67a7f9c90b | |
parent | 244d29227bebe32e104578bbc59ba8b5027b5f86 (diff) |
service: port to libnm
-rw-r--r-- | auth-dialog/main.c | 2 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/nm-iodine-service.c | 195 | ||||
-rw-r--r-- | src/nm-iodine-service.h | 7 |
4 files changed, 93 insertions, 115 deletions
diff --git a/auth-dialog/main.c b/auth-dialog/main.c index f482cf0..d0ddc3a 100644 --- a/auth-dialog/main.c +++ b/auth-dialog/main.c @@ -38,7 +38,7 @@ #include <nm-vpn-plugin-utils.h> #include <nm-vpn-password-dialog.h> -#include "src/nm-iodine-service.h" +#include "../src/nm-iodine-service-defines.h" #define KEYRING_UUID_TAG "connection-uuid" #define KEYRING_SN_TAG "setting-name" diff --git a/src/Makefile.am b/src/Makefile.am index 904c8b4..d412962 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ AM_CPPFLAGS = \ - $(LIBNM_GLIB_CFLAGS) \ + $(LIBNM_CFLAGS) \ -DG_DISABLE_DEPRECATED \ -DBINDIR=\"$(bindir)\" \ -DPREFIX=\""$(prefix)"\" \ @@ -19,6 +19,6 @@ nm_iodine_service_SOURCES = \ nm-iodine-service-defines.h nm_iodine_service_LDADD = \ - $(LIBNM_GLIB_LIBS) + $(LIBNM_LIBS) CLEANFILES = *~ diff --git a/src/nm-iodine-service.c b/src/nm-iodine-service.c index cd71980..89023d4 100644 --- a/src/nm-iodine-service.c +++ b/src/nm-iodine-service.c @@ -40,20 +40,22 @@ #include <pwd.h> #include <grp.h> #include <glib/gi18n.h> +#include <arpa/inet.h> -#include <nm-setting-vpn.h> +#include <NetworkManager.h> +#include <nm-vpn-service-plugin.h> #include "nm-iodine-service.h" #include "nm-utils.h" #define NM_IODINE_USER "nm-iodine" #define NM_IODINE_RUNDIR LOCALSTATEDIR "/run/" NM_IODINE_USER -G_DEFINE_TYPE (NMIodinePlugin, nm_iodine_plugin, NM_TYPE_VPN_PLUGIN) +G_DEFINE_TYPE (NMIodinePlugin, nm_iodine_plugin, NM_TYPE_VPN_SERVICE_PLUGIN) typedef struct { GPid pid; - NMVPNPluginFailure failure; - GHashTable *ip4config; + NMVpnPluginFailure failure; + GVariantBuilder ip4config; } NMIodinePluginPrivate; #define NM_IODINE_PLUGIN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IODINE_PLUGIN, NMIodinePluginPrivate)) @@ -166,7 +168,7 @@ validate_one_property (const char *key, const char *value, gpointer user_data) } static gboolean -nm_iodine_properties_validate (NMSettingVPN *s_vpn, GError **error) +nm_iodine_properties_validate (NMSettingVpn *s_vpn, GError **error) { ValidateInfo info = { &valid_properties[0], error, FALSE }; @@ -185,7 +187,7 @@ nm_iodine_properties_validate (NMSettingVPN *s_vpn, GError **error) static gboolean -nm_iodine_secrets_validate (NMSettingVPN *s_vpn, GError **error) +nm_iodine_secrets_validate (NMSettingVpn *s_vpn, GError **error) { ValidateInfo info = { &valid_secrets[0], error, FALSE }; @@ -202,11 +204,9 @@ nm_iodine_secrets_validate (NMSettingVPN *s_vpn, GError **error) return *error ? FALSE : TRUE; } -static GValue * -str_to_gvalue (const char *str, gboolean try_convert) +static GVariant * +str_to_gvariant (const char *str, gboolean try_convert) { - GValue *val; - /* Empty */ if (!str || strlen (str) < 1) return NULL; @@ -225,29 +225,11 @@ str_to_gvalue (const char *str, gboolean try_convert) return NULL; } - val = g_slice_new0 (GValue); - g_value_init (val, G_TYPE_STRING); - g_value_set_string (val, str); - return val; -} - -static GValue * -uint_to_gvalue (guint32 num) -{ - GValue *val; - - if (num == 0) - return NULL; - - val = g_slice_new0 (GValue); - g_value_init (val, G_TYPE_UINT); - g_value_set_uint (val, num); - - return val; + return g_variant_new_string (str); } -static GValue * -addr_to_gvalue (const char *str) +static GVariant * +addr4_to_gvariant (const char *str) { struct in_addr temp_addr; @@ -258,26 +240,16 @@ addr_to_gvalue (const char *str) if (inet_pton (AF_INET, str, &temp_addr) <= 0) return NULL; - return uint_to_gvalue (temp_addr.s_addr); -} - -static void -value_destroy (gpointer data) -{ - GValue *val = (GValue *) data; - - g_value_unset (val); - g_slice_free (GValue, val); + return g_variant_new_uint32 (temp_addr.s_addr); } static gint -iodine_parse_stderr_line (NMVPNPlugin *plugin, - const char* line, - GHashTable *ip4config) +iodine_parse_stderr_line (NMVpnServicePlugin *plugin, + const char* line) { NMIodinePluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin); gchar **split = NULL; - GValue *val; + GVariant *val; gint len; gint ret = 1; @@ -295,60 +267,60 @@ iodine_parse_stderr_line (NMVPNPlugin *plugin, if (g_str_has_prefix(line, "Server tunnel IP is ")) { g_message("PTP address: %s", split[len-1]); - val = addr_to_gvalue (split[len-1]); + val = addr4_to_gvariant (split[len-1]); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_PTP, - val); - val = addr_to_gvalue (split[len-1]); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_PTP, + val); + val = addr4_to_gvariant (split[len-1]); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY, - val); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_INT_GATEWAY, + val); } else if (g_str_has_prefix(line, "Sending DNS queries for ")) { g_message("External gw: %s", split[len-1]); - val = addr_to_gvalue (split[len-1]); + val = addr4_to_gvariant (split[len-1]); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, - val); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, + val); } else if (g_str_has_prefix(line, "Sending raw traffic directly to ")) { /* If the DNS server is directly reachable we need to set it as external gateway overwriting the above valus */ g_message("Overwrite ext. gw. address: %s", split[len-1]); - val = addr_to_gvalue (split[len-1]); + val = addr4_to_gvariant (split[len-1]); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, - val); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_EXT_GATEWAY, + val); } else if (g_str_has_prefix(line, "Setting IP of dns")) { g_message("Address: %s", split[len-1]); - val = addr_to_gvalue (split[len-1]); + val = addr4_to_gvariant (split[len-1]); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS, - val); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS, + val); } else if (g_str_has_prefix(line, "Setting MTU of ")) { g_message("MTU: %s", split[len-1]); - val = addr_to_gvalue (split[len-1]); + val = addr4_to_gvariant (split[len-1]); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_MTU, - val); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_MTU, + val); } else if (g_str_has_prefix(line, "Opened dns")) { g_message("Interface: %s", split[len-1]); - val = str_to_gvalue (split[len-1], FALSE); + val = str_to_gvariant (split[len-1], FALSE); if (val) - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, - val); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, + val); } else if (g_str_has_prefix(line, "Connection setup complete, " "transmitting data.")) { - val = uint_to_gvalue(27); - g_hash_table_insert (ip4config, - NM_VPN_PLUGIN_IP4_CONFIG_PREFIX, - val); + val = g_variant_new_uint32 (27); + g_variant_builder_add (&priv->ip4config, "{sv}", + NM_VPN_PLUGIN_IP4_CONFIG_PREFIX, + val); ret = 0; /* success */ } else g_message("%s", line); @@ -378,13 +350,11 @@ iodine_stderr_cb (GIOChannel *source, GIOCondition condition, gpointer plugin) if (l) line[l-1] = '\0'; - ret = iodine_parse_stderr_line(plugin, line, priv->ip4config); + ret = iodine_parse_stderr_line(plugin, line); if (!ret) { g_message("Parsing done, sending IP4 config"); - nm_vpn_plugin_set_ip4_config(plugin, priv->ip4config); - - g_hash_table_destroy (priv->ip4config); - priv->ip4config = NULL; + nm_vpn_service_plugin_set_ip4_config(plugin, + g_variant_builder_end (&priv->ip4config)); } g_free (line); return TRUE; @@ -416,12 +386,12 @@ iodine_watch_cb (GPid pid, gint status, gpointer user_data) priv->pid = 0; if (priv->failure >= 0) { - nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), priv->failure); + nm_vpn_service_plugin_failure (NM_VPN_SERVICE_PLUGIN (plugin), priv->failure); } else if (error) { - nm_vpn_plugin_failure (NM_VPN_PLUGIN (plugin), NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED); + nm_vpn_service_plugin_failure (NM_VPN_SERVICE_PLUGIN (plugin), NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED); + } else { + nm_vpn_service_plugin_disconnect (NM_VPN_SERVICE_PLUGIN (plugin), NULL); } - - nm_vpn_plugin_set_state (NM_VPN_PLUGIN (plugin), NM_VPN_SERVICE_STATE_STOPPED); } static gboolean @@ -432,7 +402,7 @@ has_user(const char* user) static void -send_password(gint fd, NMSettingVPN *s_vpn) +send_password(gint fd, NMSettingVpn *s_vpn) { const char *passwd; ssize_t ret; @@ -453,7 +423,7 @@ send_password(gint fd, NMSettingVPN *s_vpn) static gint nm_iodine_start_iodine_binary (NMIodinePlugin *plugin, - NMSettingVPN *s_vpn, + NMSettingVpn *s_vpn, GError **error) { GPid pid; @@ -548,11 +518,11 @@ nm_iodine_start_iodine_binary (NMIodinePlugin *plugin, } static gboolean -real_connect (NMVPNPlugin *plugin, - NMConnection *connection, - GError **error) +real_connect (NMVpnServicePlugin *plugin, + NMConnection *connection, + GError **error) { - NMSettingVPN *s_vpn; + NMSettingVpn *s_vpn; gint ret = -1; s_vpn = nm_connection_get_setting_vpn (connection); @@ -572,21 +542,21 @@ real_connect (NMVPNPlugin *plugin, } static gboolean -real_need_secrets (NMVPNPlugin *plugin, - NMConnection *connection, - char **setting_name, - GError **error) +real_need_secrets (NMVpnServicePlugin *plugin, + NMConnection *connection, + const char **setting_name, + GError **error) { - NMSettingVPN *s_vpn; + NMSettingVpn *s_vpn; - g_return_val_if_fail (NM_IS_VPN_PLUGIN (plugin), FALSE); + g_return_val_if_fail (NM_IS_VPN_SERVICE_PLUGIN (plugin), FALSE); g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE); s_vpn = nm_connection_get_setting_vpn (connection); if (!s_vpn) { g_set_error (error, NM_VPN_PLUGIN_ERROR, - NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID, + NM_VPN_PLUGIN_ERROR_INVALID_CONNECTION, "%s", "Could not process the request because the VPN " "connection settings were invalid."); @@ -613,7 +583,7 @@ ensure_killed (gpointer data) } static gboolean -real_disconnect (NMVPNPlugin *plugin, GError **err) +real_disconnect (NMVpnServicePlugin *plugin, GError **err) { NMIodinePluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin); @@ -635,10 +605,7 @@ nm_iodine_plugin_init (NMIodinePlugin *plugin) { NMIodinePluginPrivate *priv = NM_IODINE_PLUGIN_GET_PRIVATE (plugin); - priv->ip4config = g_hash_table_new_full (g_str_hash, - g_str_equal, - NULL, - value_destroy); + g_variant_builder_init (&priv->ip4config, G_VARIANT_TYPE_VARDICT); priv->failure = -1; } @@ -646,7 +613,7 @@ static void nm_iodine_plugin_class_init (NMIodinePluginClass *iodine_class) { GObjectClass *object_class = G_OBJECT_CLASS (iodine_class); - NMVPNPluginClass *parent_class = NM_VPN_PLUGIN_CLASS (iodine_class); + NMVpnServicePluginClass *parent_class = NM_VPN_SERVICE_PLUGIN_CLASS (iodine_class); g_type_class_add_private (object_class, sizeof (NMIodinePluginPrivate)); @@ -659,10 +626,20 @@ nm_iodine_plugin_class_init (NMIodinePluginClass *iodine_class) NMIodinePlugin * nm_iodine_plugin_new (void) { - return (NMIodinePlugin *) g_object_new (NM_TYPE_IODINE_PLUGIN, - NM_VPN_PLUGIN_DBUS_SERVICE_NAME, - NM_DBUS_SERVICE_IODINE, - NULL); + NMIodinePlugin *plugin; + GError *error = NULL; + + plugin = (NMIodinePlugin *) g_initable_new (NM_TYPE_IODINE_PLUGIN, NULL, &error, + NM_VPN_SERVICE_PLUGIN_DBUS_SERVICE_NAME, + NM_DBUS_SERVICE_IODINE, + NULL); + + if (!plugin) { + g_warning ("Failed to initialize a plugin instance: %s", error->message); + g_error_free (error); + } + + return plugin; } static void diff --git a/src/nm-iodine-service.h b/src/nm-iodine-service.h index 4a5604c..1102cc0 100644 --- a/src/nm-iodine-service.h +++ b/src/nm-iodine-service.h @@ -22,7 +22,8 @@ #define NM_IODINE_PLUGIN_H #include <glib.h> -#include <nm-vpn-plugin.h> +#include <NetworkManager.h> +#include <nm-vpn-service-plugin.h> #include "nm-iodine-service-defines.h" @@ -34,11 +35,11 @@ #define NM_IODINE_PLUGIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_IODINE_PLUGIN, NMIodinePluginClass)) typedef struct { - NMVPNPlugin parent; + NMVpnServicePlugin parent; } NMIodinePlugin; typedef struct { - NMVPNPluginClass parent; + NMVpnServicePluginClass parent; } NMIodinePluginClass; GType nm_iodine_plugin_get_type (void); |