NetworkManager/libnm-glib/nm-vpn-manager.c
Dan Williams eda2d662cd 2007-12-07 Dan Williams <dcbw@redhat.com>
Noticed by Christian Persch <chpe@gnome.org>

	Always chain up to parent object in dispose and finalize handlers.
		(gnome.org #433112)



git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3154 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
2007-12-07 15:32:45 +00:00

136 lines
3.7 KiB
C

/* -*- 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_CONNECTION, connection,
NM_OBJECT_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;
}