summaryrefslogtreecommitdiff
path: root/libnm-glib/nm-vpn-connection.c
diff options
context:
space:
mode:
authorTambet Ingo <tambet@gmail.com>2007-09-12 16:23:53 +0000
committerTambet Ingo <tambet@gmail.com>2007-09-12 16:23:53 +0000
commit326d1e8679f08135c1a7a16382e26b34eda20db4 (patch)
tree57001957ab63b1d1554ab84adc2d8b241c4f8b5e /libnm-glib/nm-vpn-connection.c
parentbe3a380b08ab2d07f257eff662fa49cfd9e109f6 (diff)
downloadNetworkManager-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.c289
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);
}