diff options
| author | Michael Biebl <biebl@debian.org> | 2013-02-03 14:49:22 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2013-02-03 14:49:22 +0100 |
| commit | 9c202e3e860b3be9e1f8882630b69affbb130102 (patch) | |
| tree | 8202bf39f2129486971fa7d5ae0dee61a561aa53 /src/nm-active-connection.c | |
| parent | 36cb2f364a821e1be50b23e03a18891ec55adb06 (diff) | |
Imported Upstream version 0.9.7.995 upstream/0.9.7.995
Diffstat (limited to 'src/nm-active-connection.c')
| -rw-r--r-- | src/nm-active-connection.c | 200 |
1 files changed, 167 insertions, 33 deletions
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c index 2de62197..15b4b485 100644 --- a/src/nm-active-connection.c +++ b/src/nm-active-connection.c @@ -19,12 +19,15 @@ */ #include <glib.h> +#include "nm-types.h" #include "nm-active-connection.h" #include "NetworkManager.h" #include "nm-logging.h" #include "nm-dbus-glib-types.h" #include "nm-dbus-manager.h" #include "nm-properties-changed-signal.h" +#include "nm-device.h" +#include "nm-settings-connection.h" #include "nm-active-connection-glue.h" @@ -36,16 +39,20 @@ G_DEFINE_ABSTRACT_TYPE (NMActiveConnection, nm_active_connection, G_TYPE_OBJECT) NMActiveConnectionPrivate)) typedef struct { - gboolean disposed; - NMConnection *connection; char *path; char *specific_object; - char *device_path; + NMDevice *device; + gboolean is_default; gboolean is_default6; NMActiveConnectionState state; gboolean vpn; + + gboolean user_requested; + gulong user_uid; + gboolean assumed; + NMDevice *master; } NMActiveConnectionPrivate; enum { @@ -60,6 +67,13 @@ enum { PROP_VPN, PROP_MASTER, + PROP_INT_CONNECTION, + PROP_INT_DEVICE, + PROP_INT_USER_REQUESTED, + PROP_INT_USER_UID, + PROP_INT_ASSUMED, + PROP_INT_MASTER, + LAST_PROP }; @@ -82,13 +96,30 @@ nm_active_connection_set_state (NMActiveConnection *self, NMActiveConnectionState new_state) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); + NMActiveConnectionState old_state; - if (priv->state != new_state) { - priv->state = new_state; - g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_STATE); + if (priv->state == new_state) + return; + + old_state = priv->state; + priv->state = new_state; + g_object_notify (G_OBJECT (self), NM_ACTIVE_CONNECTION_STATE); + + if ( new_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED + || old_state == NM_ACTIVE_CONNECTION_STATE_ACTIVATED) { + nm_settings_connection_update_timestamp (NM_SETTINGS_CONNECTION (priv->connection), + (guint64) time (NULL), TRUE); } } +const char * +nm_active_connection_get_name (NMActiveConnection *self) +{ + g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); + + return nm_connection_get_id (NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->connection); +} + NMConnection * nm_active_connection_get_connection (NMActiveConnection *self) { @@ -167,51 +198,65 @@ nm_active_connection_get_default6 (NMActiveConnection *self) return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->is_default6; } -gboolean -nm_active_connection_export (NMActiveConnection *self, - NMConnection *connection, - const char *devpath) +void +nm_active_connection_export (NMActiveConnection *self) { NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (self); NMDBusManager *dbus_mgr; static guint32 counter = 0; - g_return_val_if_fail (connection != NULL, FALSE); - g_return_val_if_fail (devpath != NULL, FALSE); - - priv->connection = g_object_ref (connection); priv->path = g_strdup_printf (NM_DBUS_PATH "/ActiveConnection/%d", counter++); - priv->device_path = g_strdup (devpath); - dbus_mgr = nm_dbus_manager_get (); dbus_g_connection_register_g_object (nm_dbus_manager_get_connection (dbus_mgr), priv->path, G_OBJECT (self)); g_object_unref (dbus_mgr); - return TRUE; } -/****************************************************************/ +gboolean +nm_active_connection_get_user_requested (NMActiveConnection *self) +{ + g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE); -static void -nm_active_connection_init (NMActiveConnection *self) + return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->user_requested; +} + +gulong +nm_active_connection_get_user_uid (NMActiveConnection *self) { + g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), G_MAXULONG); + + return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->user_uid; } -static void -dispose (GObject *object) +gboolean +nm_active_connection_get_assumed (NMActiveConnection *self) { - NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); + g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), FALSE); - if (!priv->disposed) { - priv->disposed = TRUE; + return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->assumed; +} - g_free (priv->path); - g_free (priv->specific_object); - g_free (priv->device_path); - g_object_unref (priv->connection); - } +NMDevice * +nm_active_connection_get_device (NMActiveConnection *self) +{ + g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); - G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object); + return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->device; +} + +NMDevice * +nm_active_connection_get_master (NMActiveConnection *self) +{ + g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (self), NULL); + + return NM_ACTIVE_CONNECTION_GET_PRIVATE (self)->master; +} + +/****************************************************************/ + +static void +nm_active_connection_init (NMActiveConnection *self) +{ } static void @@ -221,6 +266,31 @@ set_property (GObject *object, guint prop_id, NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); switch (prop_id) { + case PROP_INT_CONNECTION: + g_warn_if_fail (priv->connection == NULL); + priv->connection = g_value_dup_object (value); + break; + case PROP_INT_DEVICE: + g_warn_if_fail (priv->device == NULL); + priv->device = g_value_dup_object (value); + if (priv->device) + g_warn_if_fail (priv->device != priv->master); + break; + case PROP_INT_USER_REQUESTED: + priv->user_requested = g_value_get_boolean (value); + break; + case PROP_INT_USER_UID: + priv->user_uid = g_value_get_ulong (value); + break; + case PROP_INT_ASSUMED: + priv->assumed = g_value_get_boolean (value); + break; + case PROP_INT_MASTER: + g_warn_if_fail (priv->master == NULL); + priv->master = g_value_dup_object (value); + if (priv->master) + g_warn_if_fail (priv->master != priv->device); + break; case PROP_SPECIFIC_OBJECT: priv->specific_object = g_value_dup_boxed (value); break; @@ -233,6 +303,8 @@ set_property (GObject *object, guint prop_id, case PROP_VPN: priv->vpn = g_value_get_boolean (value); break; + case PROP_MASTER: + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -258,7 +330,8 @@ get_property (GObject *object, guint prop_id, break; case PROP_DEVICES: devices = g_ptr_array_sized_new (1); - g_ptr_array_add (devices, g_strdup (priv->device_path)); + if (priv->device) + g_ptr_array_add (devices, g_strdup (nm_device_get_path (priv->device))); g_value_take_boxed (value, devices); break; case PROP_STATE: @@ -274,6 +347,7 @@ get_property (GObject *object, guint prop_id, g_value_set_boolean (value, priv->vpn); break; case PROP_MASTER: + g_value_set_boxed (value, priv->master ? nm_device_get_path (priv->master) : "/"); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -282,6 +356,23 @@ get_property (GObject *object, guint prop_id, } static void +dispose (GObject *object) +{ + NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object); + + g_free (priv->path); + priv->path = NULL; + g_free (priv->specific_object); + priv->specific_object = NULL; + + g_clear_object (&priv->connection); + g_clear_object (&priv->device); + g_clear_object (&priv->master); + + G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object); +} + +static void nm_active_connection_class_init (NMActiveConnectionClass *vpn_class) { GObjectClass *object_class = G_OBJECT_CLASS (vpn_class); @@ -293,7 +384,7 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class) object_class->set_property = set_property; object_class->dispose = dispose; - /* properties */ + /* D-Bus exported properties */ g_object_class_install_property (object_class, PROP_CONNECTION, g_param_spec_boxed (NM_ACTIVE_CONNECTION_CONNECTION, "Connection", @@ -359,6 +450,49 @@ nm_active_connection_class_init (NMActiveConnectionClass *vpn_class) DBUS_TYPE_G_OBJECT_PATH, G_PARAM_READABLE)); + /* Internal properties */ + g_object_class_install_property (object_class, PROP_INT_CONNECTION, + g_param_spec_object (NM_ACTIVE_CONNECTION_INT_CONNECTION, + "Internal Connection", + "Internal connection", + NM_TYPE_CONNECTION, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT)); + + g_object_class_install_property (object_class, PROP_INT_DEVICE, + g_param_spec_object (NM_ACTIVE_CONNECTION_INT_DEVICE, + "Internal device", + "Internal device", + NM_TYPE_DEVICE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT)); + + g_object_class_install_property (object_class, PROP_INT_USER_REQUESTED, + g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_USER_REQUESTED, + "User requested", + "User requested", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT)); + + g_object_class_install_property (object_class, PROP_INT_USER_UID, + g_param_spec_ulong (NM_ACTIVE_CONNECTION_INT_USER_UID, + "User UID", + "User UID (if user requested)", + 0, G_MAXULONG, 0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT)); + + g_object_class_install_property (object_class, PROP_INT_ASSUMED, + g_param_spec_boolean (NM_ACTIVE_CONNECTION_INT_ASSUMED, + "Assumed", + "Assumed", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT)); + + g_object_class_install_property (object_class, PROP_INT_MASTER, + g_param_spec_object (NM_ACTIVE_CONNECTION_INT_MASTER, + "Internal master device", + "Internal device", + NM_TYPE_DEVICE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | NM_PROPERTY_PARAM_NO_EXPORT)); + /* Signals */ signals[PROPERTIES_CHANGED] = nm_properties_changed_signal_new (object_class, |