diff options
author | Dan Williams <dcbw@redhat.com> | 2007-10-01 17:57:36 +0000 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2007-10-01 17:57:36 +0000 |
commit | e5b834c1f9c6f6e92546695a14bc37ec7aec09c6 (patch) | |
tree | 6dea24d6fefee7d18cfe14d5f44ff84aeeb12171 /libnm-glib/nm-vpn-connection.c | |
parent | 485bcfe5710e2b5f179255a9510e283a595cc2bb (diff) | |
download | NetworkManager-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.c | 49 |
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); } |