summaryrefslogtreecommitdiff
path: root/libnm-glib
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2008-03-26 13:43:01 +0000
committerDan Williams <dcbw@redhat.com>2008-03-26 13:43:01 +0000
commitec89663e7da344f54e11dbd5848c2828fa258b92 (patch)
treebc34dd46bf2e93a142a8a414e2fd9cc6f324278c /libnm-glib
parent7d694073be91c000ff02f55704f687390213d83f (diff)
downloadNetworkManager-ec89663e7da344f54e11dbd5848c2828fa258b92.tar.gz
2008-03-26 Dan Williams <dcbw@redhat.com>
Rework VPN connection handling for a more consistent D-Bus API. The VPNManager object has been removed, and active VPN connections are now the same as any other active connection. The Manager object's ActivateConnection and DeactivateConnection methods are used to start and stop a VPN connection, and the VPNConnection objects are subclasses of the ActiveConnection objects. When activating a VPN connection, pass the path of the active connection to which the VPN connection is tied in the 'specific_object' argument. Consequently, the libnm-glib API has been reworked to match this arrangement, with the VPNManager object removed, and the NMVPNConnection objects now being subclasses of NMActiveConnection. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3504 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Diffstat (limited to 'libnm-glib')
-rw-r--r--libnm-glib/Makefile.am6
-rw-r--r--libnm-glib/nm-active-connection.c38
-rw-r--r--libnm-glib/nm-active-connection.h2
-rw-r--r--libnm-glib/nm-client.c43
-rw-r--r--libnm-glib/nm-vpn-connection.c55
-rw-r--r--libnm-glib/nm-vpn-connection.h13
-rw-r--r--libnm-glib/nm-vpn-manager.c136
-rw-r--r--libnm-glib/nm-vpn-manager.h46
8 files changed, 94 insertions, 245 deletions
diff --git a/libnm-glib/Makefile.am b/libnm-glib/Makefile.am
index a88ca59e56..47d4f1e8e3 100644
--- a/libnm-glib/Makefile.am
+++ b/libnm-glib/Makefile.am
@@ -10,7 +10,6 @@ BUILT_SOURCES = \
nm-marshal.c \
nm-exported-connection-glue.h \
nm-settings-glue.h \
- nm-vpn-manager-bindings.h \
nm-vpn-connection-bindings.h \
nm-vpn-plugin-glue.h \
nm-active-connection-bindings.h
@@ -39,7 +38,6 @@ libnminclude_HEADERS = \
nm-gsm-device.h \
nm-cdma-device.h \
nm-vpn-connection.h \
- nm-vpn-manager.h \
nm-vpn-plugin.h \
nm-types.h \
nm-active-connection.h
@@ -61,7 +59,6 @@ libnm_glib_la_SOURCES = \
nm-gsm-device.c \
nm-cdma-device.c \
nm-vpn-connection.c \
- nm-vpn-manager.c \
nm-marshal-main.c \
nm-types.c \
nm-types-private.h \
@@ -123,9 +120,6 @@ nm-settings-glue.h: $(top_srcdir)/introspection/nm-settings.xml
nm-exported-connection-glue.h: $(top_srcdir)/introspection/nm-exported-connection.xml
dbus-binding-tool --prefix=nm_exported_connection --mode=glib-server --output=nm-exported-connection-glue.h $(top_srcdir)/introspection/nm-exported-connection.xml
-nm-vpn-manager-bindings.h: $(top_srcdir)/introspection/nm-vpn-manager.xml
- dbus-binding-tool --prefix=nm_vpn_manager --mode=glib-client --output=nm-vpn-manager-bindings.h $(top_srcdir)/introspection/nm-vpn-manager.xml
-
nm-vpn-connection-bindings.h: $(top_srcdir)/introspection/nm-vpn-connection.xml
dbus-binding-tool --prefix=nm_vpn_connection --mode=glib-client --output=nm-vpn-connection-bindings.h $(top_srcdir)/introspection/nm-vpn-connection.xml
diff --git a/libnm-glib/nm-active-connection.c b/libnm-glib/nm-active-connection.c
index d8d5dd0517..8ee8a8e3c0 100644
--- a/libnm-glib/nm-active-connection.c
+++ b/libnm-glib/nm-active-connection.c
@@ -7,6 +7,7 @@
#include "nm-object-private.h"
#include "nm-types-private.h"
#include "nm-device.h"
+#include "nm-connection.h"
#include "nm-active-connection-bindings.h"
@@ -22,6 +23,7 @@ typedef struct {
DBusGProxy *proxy;
char *service_name;
+ NMConnectionScope scope;
char *connection;
char *specific_object;
char *shared_service_name;
@@ -60,6 +62,17 @@ nm_active_connection_new (DBusGConnection *connection, const char *path)
NULL);
}
+static NMConnectionScope
+get_scope_for_service_name (const char *service_name)
+{
+ if (service_name && !strcmp (service_name, NM_DBUS_SERVICE_USER_SETTINGS))
+ return NM_CONNECTION_SCOPE_USER;
+ else if (service_name && !strcmp (service_name, NM_DBUS_SERVICE_SYSTEM_SETTINGS))
+ return NM_CONNECTION_SCOPE_SYSTEM;
+
+ return NM_CONNECTION_SCOPE_UNKNOWN;
+}
+
const char *
nm_active_connection_get_service_name (NMActiveConnection *connection)
{
@@ -72,11 +85,22 @@ nm_active_connection_get_service_name (NMActiveConnection *connection)
priv->service_name = nm_object_get_string_property (NM_OBJECT (connection),
NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
DBUS_PROP_SERVICE_NAME);
+ priv->scope = get_scope_for_service_name (priv->service_name);
}
return priv->service_name;
}
+NMConnectionScope
+nm_active_connection_get_scope (NMActiveConnection *connection)
+{
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NM_CONNECTION_SCOPE_UNKNOWN);
+
+ /* Make sure service_name and scope are up-to-date */
+ nm_active_connection_get_service_name (connection);
+ return NM_ACTIVE_CONNECTION_GET_PRIVATE (connection)->scope;
+}
+
const char *
nm_active_connection_get_connection (NMActiveConnection *connection)
{
@@ -256,12 +280,24 @@ demarshal_devices (NMObject *object, GParamSpec *pspec, GValue *value, gpointer
return TRUE;
}
+static gboolean
+demarshal_service (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field)
+{
+ NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
+
+ if (nm_object_demarshal_generic (object, pspec, value, field)) {
+ priv->scope = get_scope_for_service_name (priv->service_name);
+ return TRUE;
+ }
+ return FALSE;
+}
+
static void
register_for_property_changed (NMActiveConnection *connection)
{
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
const NMPropertiesChangedInfo property_changed_info[] = {
- { NM_ACTIVE_CONNECTION_SERVICE_NAME, nm_object_demarshal_generic, &priv->service_name },
+ { NM_ACTIVE_CONNECTION_SERVICE_NAME, demarshal_service, &priv->service_name },
{ NM_ACTIVE_CONNECTION_CONNECTION, nm_object_demarshal_generic, &priv->connection },
{ NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT, nm_object_demarshal_generic, &priv->specific_object },
{ NM_ACTIVE_CONNECTION_SHARED_SERVICE_NAME, nm_object_demarshal_generic, &priv->shared_service_name },
diff --git a/libnm-glib/nm-active-connection.h b/libnm-glib/nm-active-connection.h
index b42aa51221..bf4129f7f5 100644
--- a/libnm-glib/nm-active-connection.h
+++ b/libnm-glib/nm-active-connection.h
@@ -4,6 +4,7 @@
#include <glib/gtypes.h>
#include <glib-object.h>
#include "nm-object.h"
+#include <nm-connection.h>
G_BEGIN_DECLS
@@ -34,6 +35,7 @@ GType nm_active_connection_get_type (void);
GObject *nm_active_connection_new (DBusGConnection *connection, const char *path);
const char * nm_active_connection_get_service_name (NMActiveConnection *connection);
+NMConnectionScope nm_active_connection_get_scope (NMActiveConnection *connection);
const char * nm_active_connection_get_connection (NMActiveConnection *connection);
const char * nm_active_connection_get_specific_object (NMActiveConnection *connection);
const char * nm_active_connection_get_shared_service_name (NMActiveConnection *connection);
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index 1d028f4be8..126e658209 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -14,6 +14,7 @@
#include "nm-types-private.h"
#include "nm-object-private.h"
#include "nm-active-connection.h"
+#include "nm-vpn-connection.h"
#include "nm-object-cache.h"
#include "nm-dbus-glib-types.h"
@@ -131,6 +132,46 @@ wireless_enabled_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
poke_wireless_devices_with_rf_status (NM_CLIENT (object));
}
+static GObject *
+new_active_connection (DBusGConnection *connection, const char *path)
+{
+ DBusGProxy *proxy;
+ GError *error = NULL;
+ GValue value = {0,};
+ GObject *object = NULL;
+
+ proxy = dbus_g_proxy_new_for_name (connection,
+ NM_DBUS_SERVICE,
+ path,
+ "org.freedesktop.DBus.Properties");
+ if (!proxy) {
+ g_warning ("%s: couldn't create D-Bus object proxy.", __func__);
+ return NULL;
+ }
+
+ /* Have to create an NMVPNConnection if it's a VPN connection, otherwise
+ * a plain NMActiveConnection.
+ */
+ if (dbus_g_proxy_call (proxy,
+ "Get", &error,
+ G_TYPE_STRING, NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ G_TYPE_STRING, "Vpn",
+ G_TYPE_INVALID,
+ G_TYPE_VALUE, &value, G_TYPE_INVALID)) {
+ if (g_value_get_boolean (&value))
+ object = nm_vpn_connection_new (connection, path);
+ else
+ object = nm_active_connection_new (connection, path);
+ } else {
+ g_warning ("Error in getting active connection 'Vpn' property: (%d) %s",
+ error->code, error->message);
+ g_error_free (error);
+ }
+
+ g_object_unref (proxy);
+ return object;
+}
+
static gboolean
demarshal_active_connections (NMObject *object,
GParamSpec *pspec,
@@ -140,7 +181,7 @@ demarshal_active_connections (NMObject *object,
DBusGConnection *connection;
connection = nm_object_get_connection (object);
- if (!nm_object_array_demarshal (value, (GPtrArray **) field, connection, nm_active_connection_new))
+ if (!nm_object_array_demarshal (value, (GPtrArray **) field, connection, new_active_connection))
return FALSE;
nm_object_queue_notify (object, NM_CLIENT_ACTIVE_CONNECTIONS);
diff --git a/libnm-glib/nm-vpn-connection.c b/libnm-glib/nm-vpn-connection.c
index ff18de924f..e256bef3af 100644
--- a/libnm-glib/nm-vpn-connection.c
+++ b/libnm-glib/nm-vpn-connection.c
@@ -27,14 +27,14 @@
#include "nm-vpn-connection-bindings.h"
#include "nm-marshal.h"
#include "nm-object-private.h"
+#include "nm-active-connection.h"
-G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_OBJECT)
+G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
#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 *banner;
NMVPNConnectionState state;
} NMVPNConnectionPrivate;
@@ -48,38 +48,16 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
-NMVPNConnection *
-nm_vpn_connection_new (DBusGConnection *dbus_connection,
- const char *path)
+GObject *
+nm_vpn_connection_new (DBusGConnection *dbus_connection, const char *path)
{
- NMVPNConnection *connection;
-
g_return_val_if_fail (dbus_connection != NULL, NULL);
g_return_val_if_fail (path != NULL, NULL);
- connection = (NMVPNConnection *) g_object_new (NM_TYPE_VPN_CONNECTION,
- NM_OBJECT_DBUS_CONNECTION, dbus_connection,
- NM_OBJECT_DBUS_PATH, path,
- NULL);
-
- nm_vpn_connection_get_name (connection);
-
- return connection;
-}
-
-const char *
-nm_vpn_connection_get_name (NMVPNConnection *vpn)
-{
- NMVPNConnectionPrivate *priv;
-
- g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL);
-
- 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;
+ return g_object_new (NM_TYPE_VPN_CONNECTION,
+ NM_OBJECT_DBUS_CONNECTION, dbus_connection,
+ NM_OBJECT_DBUS_PATH, path,
+ NULL);
}
const char *
@@ -136,20 +114,6 @@ state_changed_proxy (DBusGProxy *proxy,
}
}
-void
-nm_vpn_connection_disconnect (NMVPNConnection *vpn)
-{
- GError *err = NULL;
-
- g_return_if_fail (NM_IS_VPN_CONNECTION (vpn));
-
- 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);
- }
-}
-
/*****************************************************************************/
static void
@@ -199,12 +163,11 @@ finalize (GObject *object)
{
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
- if (priv->name)
- g_free (priv->name);
if (priv->banner)
g_free (priv->banner);
g_object_unref (priv->proxy);
+
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->finalize (object);
}
diff --git a/libnm-glib/nm-vpn-connection.h b/libnm-glib/nm-vpn-connection.h
index a32cc66640..6b60988436 100644
--- a/libnm-glib/nm-vpn-connection.h
+++ b/libnm-glib/nm-vpn-connection.h
@@ -26,7 +26,7 @@
#include <glib/gtypes.h>
#include <glib-object.h>
#include <dbus/dbus-glib.h>
-#include "nm-object.h"
+#include "nm-active-connection.h"
#include "NetworkManagerVPN.h"
G_BEGIN_DECLS
@@ -39,11 +39,11 @@ G_BEGIN_DECLS
#define NM_VPN_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_CONNECTION, NMVPNConnectionClass))
typedef struct {
- NMObject parent;
+ NMActiveConnection parent;
} NMVPNConnection;
typedef struct {
- NMObjectClass parent;
+ NMActiveConnectionClass parent;
/* Signals */
void (*state_changed) (NMVPNConnection *connection,
@@ -53,16 +53,11 @@ typedef struct {
GType nm_vpn_connection_get_type (void);
+GObject * nm_vpn_connection_new (DBusGConnection *dbus_connection, const char *path);
-NMVPNConnection * nm_vpn_connection_new (DBusGConnection *dbus_connection,
- const char *path);
-
-const char * nm_vpn_connection_get_name (NMVPNConnection *vpn);
NMVPNConnectionState nm_vpn_connection_get_state (NMVPNConnection *vpn);
const char * nm_vpn_connection_get_banner (NMVPNConnection *vpn);
-void nm_vpn_connection_disconnect (NMVPNConnection *vpn);
-
G_END_DECLS
#endif /* NM_VPN_CONNECTION_H */
diff --git a/libnm-glib/nm-vpn-manager.c b/libnm-glib/nm-vpn-manager.c
deleted file mode 100644
index 2c57687884..0000000000
--- a/libnm-glib/nm-vpn-manager.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
-
-#include <dbus/dbus-glib.h>
-#include <string.h>
-#include "nm-vpn-manager.h"
-#include "nm-marshal.h"
-
-#include "nm-vpn-manager-bindings.h"
-
-G_DEFINE_TYPE (NMVPNManager, nm_vpn_manager, NM_TYPE_OBJECT)
-
-#define NM_VPN_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_MANAGER, NMVPNManagerPrivate))
-
-typedef struct {
- DBusGProxy *manager_proxy;
-} NMVPNManagerPrivate;
-
-NMVPNManager *
-nm_vpn_manager_new (void)
-{
- DBusGConnection *connection;
- GError *err = NULL;
-
- connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &err);
- if (!connection) {
- g_warning ("Couldn't connect to system bus: %s", err->message);
- g_error_free (err);
- return NULL;
- }
-
- return (NMVPNManager *) g_object_new (NM_TYPE_VPN_MANAGER,
- NM_OBJECT_DBUS_CONNECTION, connection,
- NM_OBJECT_DBUS_PATH, NM_DBUS_PATH_VPN,
- NULL);
-
-}
-
-NMVPNConnection *
-nm_vpn_manager_connect (NMVPNManager *manager,
- const char *connection_type,
- const char *connection_path,
- NMDevice *device)
-{
- char *vpn_connection = NULL;
- GError *err = NULL;
-
- g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
- g_return_val_if_fail (connection_type != NULL, NULL);
- g_return_val_if_fail (connection_path, NULL);
- g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
-
- if (!org_freedesktop_NetworkManager_VPN_Manager_connect (NM_VPN_MANAGER_GET_PRIVATE (manager)->manager_proxy,
- connection_type,
- connection_path,
- nm_object_get_path (NM_OBJECT (device)),
- &vpn_connection,
- &err)) {
- g_warning ("Error in VPN Connect: %s", err->message);
- g_error_free (err);
- return NULL;
- }
-
- return nm_vpn_connection_new (nm_object_get_connection (NM_OBJECT (manager)), vpn_connection);
-}
-
-GSList *
-nm_vpn_manager_get_connections (NMVPNManager *manager)
-{
- GPtrArray *array = NULL;
- GSList *list = NULL;
- DBusGConnection *dbus_connection;
- int i;
- GError *err = NULL;
-
- g_return_val_if_fail (NM_IS_VPN_MANAGER (manager), NULL);
-
- if (!org_freedesktop_NetworkManager_VPN_Manager_list_connections (NM_VPN_MANAGER_GET_PRIVATE (manager)->manager_proxy,
- &array, &err)) {
- g_warning ("Error in getting VPN connections: %s", err->message);
- g_error_free (err);
- return NULL;
- }
-
- dbus_connection = nm_object_get_connection (NM_OBJECT (manager));
-
- for (i = 0; i < array->len; i++)
- list = g_slist_prepend (list, nm_vpn_connection_new (dbus_connection, (char *) g_ptr_array_index (array, i)));
-
- return list;
-}
-
-/*****************************************************************************/
-
-static void
-nm_vpn_manager_init (NMVPNManager *manager)
-{
-}
-
-static GObject*
-constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- NMObject *object;
-
- object = (NMObject *) G_OBJECT_CLASS (nm_vpn_manager_parent_class)->constructor (type,
- n_construct_params,
- construct_params);
- if (!object)
- return NULL;
-
- NM_VPN_MANAGER_GET_PRIVATE (object)->manager_proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (object),
- NM_DBUS_SERVICE,
- nm_object_get_path (object),
- NM_DBUS_INTERFACE_VPN);
- return G_OBJECT (object);
-}
-
-static void
-finalize (GObject *object)
-{
- g_object_unref (NM_VPN_MANAGER_GET_PRIVATE (object)->manager_proxy);
- G_OBJECT_CLASS (nm_vpn_manager_parent_class)->finalize (object);
-}
-
-static void
-nm_vpn_manager_class_init (NMVPNManagerClass *manager_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (manager_class);
-
- g_type_class_add_private (manager_class, sizeof (NMVPNManagerPrivate));
-
- /* virtual methods */
- object_class->constructor = constructor;
- object_class->finalize = finalize;
-}
diff --git a/libnm-glib/nm-vpn-manager.h b/libnm-glib/nm-vpn-manager.h
deleted file mode 100644
index 50797b4c90..0000000000
--- a/libnm-glib/nm-vpn-manager.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C; tab-width: 5; indent-tabs-mode: t; c-basic-offset: 5 -*- */
-
-#ifndef NM_VPN_MANAGER_H
-#define NM_VPN_MANAGER_H 1
-
-#include <glib/gtypes.h>
-#include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include <NetworkManager.h>
-#include <NetworkManagerVPN.h>
-#include "nm-object.h"
-#include "nm-device.h"
-#include "nm-connection.h"
-#include "nm-vpn-connection.h"
-
-G_BEGIN_DECLS
-
-#define NM_TYPE_VPN_MANAGER (nm_vpn_manager_get_type ())
-#define NM_VPN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_VPN_MANAGER, NMVPNManager))
-#define NM_VPN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_VPN_MANAGER, NMVPNManagerClass))
-#define NM_IS_VPN_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_VPN_MANAGER))
-#define NM_IS_VPN_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_VPN_MANAGER))
-#define NM_VPN_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_VPN_MANAGER, NMVPNManagerClass))
-
-typedef struct {
- NMObject parent;
-} NMVPNManager;
-
-typedef struct {
- NMObjectClass parent;
-} NMVPNManagerClass;
-
-GType nm_vpn_manager_get_type (void);
-
-
-NMVPNManager *nm_vpn_manager_new (void);
-NMVPNConnection *nm_vpn_manager_connect (NMVPNManager *manager,
- const char *connection_type,
- const char *connection_path,
- NMDevice *device);
-
-GSList *nm_vpn_manager_get_connections (NMVPNManager *manager);
-
-G_END_DECLS
-
-#endif /* NM_MANAGER_H */