diff options
author | Tambet Ingo <tambet@gmail.com> | 2007-09-12 16:23:53 +0000 |
---|---|---|
committer | Tambet Ingo <tambet@gmail.com> | 2007-09-12 16:23:53 +0000 |
commit | 326d1e8679f08135c1a7a16382e26b34eda20db4 (patch) | |
tree | 57001957ab63b1d1554ab84adc2d8b241c4f8b5e /libnm-glib/nm-vpn-connection.c | |
parent | be3a380b08ab2d07f257eff662fa49cfd9e109f6 (diff) | |
download | NetworkManager-326d1e8679f08135c1a7a16382e26b34eda20db4.tar.gz |
2007-09-12 Tambet Ingo <tambet@gmail.com>
* src/vpn-manager/nm-vpn-connection.[ch]:
* src/vpn-manager/nm-vpn-manager.[ch]:
* src/vpn-manager/nm-vpn-service.[ch]: Rewrite the vpn handling
* code. Using
dbus-glib, GObjects, signals etc.
* libnm-glib/nm-vpn-manager.[ch]:
* libnm-glib/nm-vpn-connection.[ch]: Now that the NM
* implementation changed
so much, rewrite these too.
* libnm-glib/Makefile.am: Add new files to build, build new
* binding files for
the new introspection files.
* libnm-glib/nm-client.[ch]: Remove all VPN related stuff from
* here.
* libnm-glib/nm-dbus-utils.[ch]: Renamed from nm-utils.[ch] that
* was shadowing
the header with the same name from libnm-utils.
* libnm-glib/nm-vpn-plugin.[ch]: Implement.
* libnm-util/Makefile.am: Add nm-utils.[ch] to build.
* introspection/nm-vpn-plugin.xml: Implement.
* introspection/nm-vpn-connection.xml: Implement.
* introspection/nm-vpn-manager.xml: Implement.
* src/NetworkManagerSystem.c
* (nm_system_vpn_device_set_from_ip4_config): Remove
the named manager argument, it can just as easily get it as the
caller.
(nm_system_vpn_device_unset_from_ip4_config): Ditto.
* src/vpn-manager/nm-dbus-vpn.[ch]: Remove.
* src/nm-dbus-manager.h: Fix up the name_owner signal signature.
* src/dhcp-manager/nm-dhcp-manager.c (garray_to_string): Remove,
* use one from
libnm-utils.
* libnm-util/nm-connection.c: Ditto.
* src/NetworkManagerMain.h: Remove, it's finally empty.
* configure.in: Remove utils/ from build.
* include/NetworkManagerVPN.h: Add some more defines to reduce
* the amount
of hard-coded strings.
* utils/: Move it over to libnm-util.
* test/Makefile.am: Link against libnm-util now that util/ is
* gone.
* dispatcher-daemon/Makefile.am: Ditto.
* src/Makefile.am: Ditto.
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2798 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Diffstat (limited to 'libnm-glib/nm-vpn-connection.c')
-rw-r--r-- | libnm-glib/nm-vpn-connection.c | 289 |
1 files changed, 96 insertions, 193 deletions
diff --git a/libnm-glib/nm-vpn-connection.c b/libnm-glib/nm-vpn-connection.c index 1f6c10d70a..a1a0b9540a 100644 --- a/libnm-glib/nm-vpn-connection.c +++ b/libnm-glib/nm-vpn-connection.c @@ -1,3 +1,4 @@ +/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */ /* NetworkManager Wireless Applet -- Display wireless access points and allow user control * * Dan Williams <dcbw@redhat.com> @@ -21,21 +22,21 @@ #include <string.h> #include "nm-vpn-connection.h" +#include "NetworkManager.h" +#include "nm-utils.h" +#include "nm-vpn-connection-bindings.h" -G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, G_TYPE_OBJECT) +G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_OBJECT) #define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVPNConnectionPrivate)) typedef struct { DBusGProxy *proxy; char *name; - char *user_name; - char *service; NMVPNConnectionState state; } NMVPNConnectionPrivate; enum { - UPDATED, STATE_CHANGED, LAST_SIGNAL @@ -43,240 +44,142 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; -static void -nm_vpn_connection_init (NMVPNConnection *connection) -{ - NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - - priv->state = NM_VPN_CONNECTION_STATE_UNKNOWN; -} - -static void -finalize (GObject *object) -{ - NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object); - - g_free (priv->name); - g_free (priv->user_name); - g_free (priv->service); -} -static void -nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class) +NMVPNConnection * +nm_vpn_connection_new (DBusGConnection *dbus_connection, + const char *path) { - GObjectClass *object_class = G_OBJECT_CLASS (connection_class); + NMVPNConnection *connection; - g_type_class_add_private (connection_class, sizeof (NMVPNConnectionPrivate)); + g_return_val_if_fail (dbus_connection != NULL, NULL); + g_return_val_if_fail (path != NULL, NULL); - /* virtual methods */ - object_class->finalize = finalize; + connection = (NMVPNConnection *) g_object_new (NM_TYPE_VPN_CONNECTION, + NM_OBJECT_CONNECTION, dbus_connection, + NM_OBJECT_PATH, path, + NULL); - /* signals */ - signals[UPDATED] = - g_signal_new ("updated", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMVPNConnectionClass, updated), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - signals[STATE_CHANGED] = - g_signal_new ("state-changed", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (NMVPNConnectionClass, state_changed), - NULL, NULL, - g_cclosure_marshal_VOID__UINT, - G_TYPE_NONE, 1, - G_TYPE_UINT); + nm_vpn_connection_get_name (connection); + return connection; } -static gboolean -update_properties (NMVPNConnection *connection) +const char * +nm_vpn_connection_get_name (NMVPNConnection *vpn) { NMVPNConnectionPrivate *priv; - char *name = NULL; - char *user_name = NULL; - char *service = NULL; - NMVPNConnectionState state; - GError *err = NULL; - priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - - if (!dbus_g_proxy_call (priv->proxy, "getVPNConnectionProperties", &err, - G_TYPE_STRING, priv->name, - G_TYPE_INVALID, - G_TYPE_STRING, &name, - G_TYPE_STRING, &user_name, - G_TYPE_STRING, &service, - G_TYPE_UINT, &state, - G_TYPE_INVALID)) { - g_warning ("Error while updating VPN connection: %s", err->message); - g_error_free (err); - return FALSE; - } - - g_free (priv->name); - g_free (priv->user_name); - g_free (priv->service); - - priv->name = name; - priv->user_name = user_name; - priv->service = service; - - nm_vpn_connection_set_state (connection, (NMVPNConnectionState) state); + g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL); - return TRUE; + priv = NM_VPN_CONNECTION_GET_PRIVATE (vpn); + if (!priv->name) + priv->name = nm_object_get_string_property (NM_OBJECT (vpn), + NM_DBUS_INTERFACE_VPN_CONNECTION, + "Name"); + return priv->name; } -NMVPNConnection * -nm_vpn_connection_new (DBusGProxy *proxy, const char *name) +NMVPNConnectionState +nm_vpn_connection_get_state (NMVPNConnection *vpn) { - GObject *object; - NMVPNConnectionPrivate *priv; - - g_return_val_if_fail (DBUS_IS_G_PROXY (proxy), NULL); - g_return_val_if_fail (name != NULL, NULL); - - object = g_object_new (NM_TYPE_VPN_CONNECTION, NULL); - if (!object) - return NULL; - - priv = NM_VPN_CONNECTION_GET_PRIVATE (object); - priv->proxy = proxy; - priv->name = g_strdup (name); - - if (!update_properties ((NMVPNConnection *) object)) { - g_object_unref (object); - return NULL; - } + g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NM_VPN_CONNECTION_STATE_UNKNOWN); - return (NMVPNConnection *) object; + return NM_VPN_CONNECTION_GET_PRIVATE (vpn)->state; } -gboolean -nm_vpn_connection_update (NMVPNConnection *vpn) +static void +state_changed_proxy (DBusGProxy *proxy, NMVPNConnectionState state, gpointer user_data) { - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE); + NMVPNConnection *connection = NM_VPN_CONNECTION (user_data); + NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - if (update_properties (vpn)) { - g_signal_emit (vpn, signals[UPDATED], 0); - return TRUE; + if (priv->state != state) { + priv->state = state; + g_signal_emit (connection, signals[STATE_CHANGED], 0, state); } - - return FALSE; } -const char * -nm_vpn_connection_get_name (NMVPNConnection *vpn) +void +nm_vpn_connection_disconnect (NMVPNConnection *vpn) { - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL); - - return NM_VPN_CONNECTION_GET_PRIVATE (vpn)->name; -} + GError *err = NULL; -const char * -nm_vpn_connection_get_user_name (NMVPNConnection *vpn) -{ - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL); + g_return_if_fail (NM_IS_VPN_CONNECTION (vpn)); - return NM_VPN_CONNECTION_GET_PRIVATE (vpn)->user_name; + org_freedesktop_NetworkManager_VPN_Connection_disconnect (NM_VPN_CONNECTION_GET_PRIVATE (vpn)->proxy, &err); + if (err) { + nm_warning ("Error in VPN disconnect: %s", err->message); + g_error_free (err); + } } -const char * -nm_vpn_connection_get_service (NMVPNConnection *vpn) -{ - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL); - - return NM_VPN_CONNECTION_GET_PRIVATE (vpn)->service; -} +/*****************************************************************************/ -NMVPNConnectionState -nm_vpn_connection_get_state (NMVPNConnection *vpn) +static void +nm_vpn_connection_init (NMVPNConnection *connection) { - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NM_VPN_CONNECTION_STATE_UNKNOWN); + NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection); - return NM_VPN_CONNECTION_GET_PRIVATE (vpn)->state; + priv->state = NM_VPN_CONNECTION_STATE_UNKNOWN; } -void -nm_vpn_connection_set_state (NMVPNConnection *vpn, NMVPNConnectionState state) +static GObject* +constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) { + NMObject *object; NMVPNConnectionPrivate *priv; - g_return_if_fail (NM_IS_VPN_CONNECTION (vpn)); + object = (NMObject *) G_OBJECT_CLASS (nm_vpn_connection_parent_class)->constructor (type, + n_construct_params, + construct_params); + if (!object) + return NULL; - priv = NM_VPN_CONNECTION_GET_PRIVATE (vpn); - if (priv->state != state) { - priv->state = state; - g_signal_emit (vpn, signals[STATE_CHANGED], 0, state); - } + priv = NM_VPN_CONNECTION_GET_PRIVATE (object); + + priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (object), + NM_DBUS_SERVICE, + nm_object_get_path (object), + NM_DBUS_INTERFACE_VPN_CONNECTION); + + dbus_g_proxy_add_signal (priv->proxy, "StateChanged", G_TYPE_UINT, G_TYPE_INVALID); + dbus_g_proxy_connect_signal (priv->proxy, + "StateChanged", + G_CALLBACK (state_changed_proxy), + object, + NULL); + return G_OBJECT (object); } -gboolean -nm_vpn_connection_is_activating (NMVPNConnection *vpn) +static void +finalize (GObject *object) { - NMVPNConnectionState state; - - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE); - - state = nm_vpn_connection_get_state (vpn); - if (state == NM_VPN_CONNECTION_STATE_PREPARE || - state == NM_VPN_CONNECTION_STATE_CONNECT || - state == NM_VPN_CONNECTION_STATE_IP_CONFIG_GET) - return TRUE; + NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object); - return FALSE; + g_object_unref (priv->proxy); } -gboolean -nm_vpn_connection_activate (NMVPNConnection *vpn, GSList *passwords) +static void +nm_vpn_connection_class_init (NMVPNConnectionClass *connection_class) { - char **password_strings; - GSList *iter; - int i; - - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE); - g_return_val_if_fail (passwords != NULL, FALSE); - - if (nm_vpn_connection_get_state (vpn) != NM_VPN_CONNECTION_STATE_DISCONNECTED) { - g_warning ("VPN connection is already connected or connecting"); - return FALSE; - } + GObjectClass *object_class = G_OBJECT_CLASS (connection_class); - i = 0; - password_strings = g_new (char *, g_slist_length (passwords) + 1); - for (iter = passwords; iter; iter = iter->next) - password_strings[i++] = iter->data; - password_strings[i] = NULL; - - /* FIXME: This has to be ASYNC for now since NM will call back to get routes. - We should just pass the routes along with this call */ - dbus_g_proxy_call_no_reply (NM_VPN_CONNECTION_GET_PRIVATE (vpn)->proxy, - "activateVPNConnection", - G_TYPE_STRING, nm_vpn_connection_get_name (vpn), - G_TYPE_STRV, password_strings, - G_TYPE_INVALID, - G_TYPE_INVALID); - g_free (password_strings); - - return TRUE; -} + g_type_class_add_private (connection_class, sizeof (NMVPNConnectionPrivate)); -gboolean -nm_vpn_connection_deactivate (NMVPNConnection *vpn) -{ - g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), FALSE); + /* virtual methods */ + object_class->constructor = constructor; + object_class->finalize = finalize; - if (nm_vpn_connection_get_state (vpn) != NM_VPN_CONNECTION_STATE_ACTIVATED && - !nm_vpn_connection_is_activating (vpn)) { - g_warning ("VPN connection isn't activated"); - return FALSE; - } - - dbus_g_proxy_call_no_reply (NM_VPN_CONNECTION_GET_PRIVATE (vpn)->proxy, - "deactivateVPNConnection", - G_TYPE_INVALID, G_TYPE_INVALID); - return TRUE; + /* signals */ + signals[STATE_CHANGED] = + g_signal_new ("state-changed", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (NMVPNConnectionClass, state_changed), + NULL, NULL, + g_cclosure_marshal_VOID__UINT, + G_TYPE_NONE, 1, + G_TYPE_UINT); } |