summaryrefslogtreecommitdiff
path: root/libnm-glib/nm-vpn-connection.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-10-01 17:57:36 +0000
committerDan Williams <dcbw@redhat.com>2007-10-01 17:57:36 +0000
commite5b834c1f9c6f6e92546695a14bc37ec7aec09c6 (patch)
tree6dea24d6fefee7d18cfe14d5f44ff84aeeb12171 /libnm-glib/nm-vpn-connection.c
parent485bcfe5710e2b5f179255a9510e283a595cc2bb (diff)
downloadNetworkManager-e5b834c1f9c6f6e92546695a14bc37ec7aec09c6.tar.gz
2007-10-01 Dan Williams <dcbw@redhat.com>
* include/NetworkManagerVPN.h - define VPN connection state change reason codes * src/vpn-manager/Makefile.am src/vpn-manager/nm-vpn-marshal.list src/vpn-manager/nm-vpn-marshal-main.c - Add marshallers for StateChanged signal * introspection/nm-vpn-connection.xml - New Banner property - StateChanged signal now includes a 'reason' argument * src/vpn-manager/nm-vpn-connection.c src/vpn-manager/nm-vpn-connection.h - Add a "Banner" property that contains the returned VPN server login banner (if any); valid only in the ACTIVATED state - (nm_vpn_connection_set_state, nm_vpn_connection_disconnect): now takes a 'reason' argument and emits that reason along with the state-changed signal - Fix up calls to nm_vpn_connection_set_state() to include a reason - (nm_vpn_connection_ip4_config_get): save banner for later - (nm_vpn_connection_get_banner, get_property, nm_vpn_connection_class_init): implement Banner property * src/vpn-manager/nm-vpn-service.c - (nm_vpn_service_connections_stop): take a reason argument; copy the connection list because elements may get added/removed from it while iterating over the list - (connection_state_changed): signal now includes the 'reason' argument * libnm-glib/nm-vpn-connection.c libnm-glib/nm-vpn-connection.h - (nm_vpn_connection_get_banner): new function - (state_changed_proxy): handle reason argument git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2916 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Diffstat (limited to 'libnm-glib/nm-vpn-connection.c')
-rw-r--r--libnm-glib/nm-vpn-connection.c49
1 files changed, 43 insertions, 6 deletions
diff --git a/libnm-glib/nm-vpn-connection.c b/libnm-glib/nm-vpn-connection.c
index 32b13b6080..e524bcb06c 100644
--- a/libnm-glib/nm-vpn-connection.c
+++ b/libnm-glib/nm-vpn-connection.c
@@ -25,6 +25,7 @@
#include "NetworkManager.h"
#include "nm-utils.h"
#include "nm-vpn-connection-bindings.h"
+#include "nm-marshal.h"
G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_OBJECT)
@@ -33,6 +34,7 @@ G_DEFINE_TYPE (NMVPNConnection, nm_vpn_connection, NM_TYPE_OBJECT)
typedef struct {
DBusGProxy *proxy;
char *name;
+ char *banner;
NMVPNConnectionState state;
} NMVPNConnectionPrivate;
@@ -79,6 +81,29 @@ nm_vpn_connection_get_name (NMVPNConnection *vpn)
return priv->name;
}
+const char *
+nm_vpn_connection_get_banner (NMVPNConnection *vpn)
+{
+ NMVPNConnectionPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (vpn), NULL);
+
+ priv = NM_VPN_CONNECTION_GET_PRIVATE (vpn);
+ if (priv->state != NM_VPN_CONNECTION_STATE_ACTIVATED)
+ return NULL;
+
+ if (!priv->banner) {
+ priv->banner = nm_object_get_string_property (NM_OBJECT (vpn),
+ NM_DBUS_INTERFACE_VPN_CONNECTION,
+ "Banner");
+ if (priv->banner && !strlen (priv->banner)) {
+ g_free (priv->banner);
+ priv->banner = NULL;
+ }
+ }
+ return priv->banner;
+}
+
NMVPNConnectionState
nm_vpn_connection_get_state (NMVPNConnection *vpn)
{
@@ -96,14 +121,17 @@ nm_vpn_connection_get_state (NMVPNConnection *vpn)
}
static void
-state_changed_proxy (DBusGProxy *proxy, NMVPNConnectionState state, gpointer user_data)
+state_changed_proxy (DBusGProxy *proxy,
+ NMVPNConnectionState state,
+ NMVPNConnectionStateReason reason,
+ gpointer user_data)
{
NMVPNConnection *connection = NM_VPN_CONNECTION (user_data);
NMVPNConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (connection);
if (priv->state != state) {
priv->state = state;
- g_signal_emit (connection, signals[STATE_CHANGED], 0, state);
+ g_signal_emit (connection, signals[STATE_CHANGED], 0, state, reason);
}
}
@@ -152,7 +180,11 @@ constructor (GType type,
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_object_register_marshaller (nm_marshal_VOID__UINT_UINT,
+ G_TYPE_NONE,
+ G_TYPE_UINT, G_TYPE_UINT,
+ G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (priv->proxy, "StateChanged", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (priv->proxy,
"StateChanged",
G_CALLBACK (state_changed_proxy),
@@ -166,6 +198,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);
}
@@ -187,7 +224,7 @@ nm_vpn_connection_class_init (NMVPNConnectionClass *connection_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_marshal_VOID__UINT_UINT,
+ G_TYPE_NONE, 2,
+ G_TYPE_UINT, G_TYPE_UINT);
}