diff --git a/introspection/nm-active-connection.xml b/introspection/nm-active-connection.xml
index 41aeab62d..1594764ee 100644
--- a/introspection/nm-active-connection.xml
+++ b/introspection/nm-active-connection.xml
@@ -8,6 +8,12 @@
A specific object associated with the active connection.
+
+
+ The UUID of the connection, provided as a convenience so that clients
+ do not have to retrieve all connection details.
+
+
Array of object paths representing devices which are part of this active connection.
diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
index 96e6704cf..ed4ba4f32 100644
--- a/libnm-glib/libnm-glib.ver
+++ b/libnm-glib/libnm-glib.ver
@@ -25,6 +25,7 @@ global:
nm_active_connection_get_specific_object;
nm_active_connection_get_state;
nm_active_connection_get_type;
+ nm_active_connection_get_uuid;
nm_active_connection_new;
nm_client_activate_connection;
nm_client_add_and_activate_connection;
diff --git a/libnm-glib/nm-active-connection.c b/libnm-glib/nm-active-connection.c
index 64d265ae1..7dc1c2dbe 100644
--- a/libnm-glib/nm-active-connection.c
+++ b/libnm-glib/nm-active-connection.c
@@ -44,6 +44,7 @@ typedef struct {
DBusGProxy *proxy;
char *connection;
+ char *uuid;
char *specific_object;
GPtrArray *devices;
NMActiveConnectionState state;
@@ -54,6 +55,7 @@ typedef struct {
enum {
PROP_0,
PROP_CONNECTION,
+ PROP_UUID,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,
@@ -64,6 +66,7 @@ enum {
};
#define DBUS_PROP_CONNECTION "Connection"
+#define DBUS_PROP_UUID "Uuid"
#define DBUS_PROP_SPECIFIC_OBJECT "SpecificObject"
#define DBUS_PROP_DEVICES "Devices"
#define DBUS_PROP_STATE "State"
@@ -118,6 +121,33 @@ nm_active_connection_get_connection (NMActiveConnection *connection)
return priv->connection;
}
+/**
+ * nm_active_connection_get_uuid:
+ * @connection: a #NMActiveConnection
+ *
+ * Gets the #NMConnection's UUID.
+ *
+ * Returns: the UUID of the #NMConnection that backs the #NMActiveConnection.
+ * This is the internal string used by the connection, and must not be modified.
+ **/
+const char *
+nm_active_connection_get_uuid (NMActiveConnection *connection)
+{
+ NMActiveConnectionPrivate *priv;
+
+ g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
+
+ priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
+ if (!priv->uuid) {
+ priv->uuid = _nm_object_get_string_property (NM_OBJECT (connection),
+ NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
+ DBUS_PROP_UUID,
+ NULL);
+ }
+
+ return priv->uuid;
+}
+
/**
* nm_active_connection_get_specific_object:
* @connection: a #NMActiveConnection
@@ -292,6 +322,7 @@ finalize (GObject *object)
NMActiveConnectionPrivate *priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (object);
g_free (priv->connection);
+ g_free (priv->uuid);
g_free (priv->specific_object);
G_OBJECT_CLASS (nm_active_connection_parent_class)->finalize (object);
diff --git a/libnm-glib/nm-active-connection.h b/libnm-glib/nm-active-connection.h
index a641e7c1a..974e551a1 100644
--- a/libnm-glib/nm-active-connection.h
+++ b/libnm-glib/nm-active-connection.h
@@ -17,7 +17,7 @@
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA.
*
- * Copyright (C) 2007 - 2010 Red Hat, Inc.
+ * Copyright (C) 2007 - 2011 Red Hat, Inc.
* Copyright (C) 2008 Novell, Inc.
*/
@@ -40,6 +40,7 @@ G_BEGIN_DECLS
#define NM_ACTIVE_CONNECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionClass))
#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
+#define NM_ACTIVE_CONNECTION_UUID "uuid"
#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
#define NM_ACTIVE_CONNECTION_DEVICES "devices"
#define NM_ACTIVE_CONNECTION_STATE "state"
@@ -67,6 +68,7 @@ GType nm_active_connection_get_type (void);
GObject *nm_active_connection_new (DBusGConnection *connection, const char *path);
const char * nm_active_connection_get_connection (NMActiveConnection *connection);
+const char * nm_active_connection_get_uuid (NMActiveConnection *connection);
const char * nm_active_connection_get_specific_object (NMActiveConnection *connection);
const GPtrArray *nm_active_connection_get_devices (NMActiveConnection *connection);
NMActiveConnectionState nm_active_connection_get_state (NMActiveConnection *connection);
diff --git a/src/nm-activation-request.c b/src/nm-activation-request.c
index fb42de685..d3eb920d2 100644
--- a/src/nm-activation-request.c
+++ b/src/nm-activation-request.c
@@ -84,6 +84,7 @@ typedef struct {
enum {
PROP_0,
PROP_CONNECTION,
+ PROP_UUID,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,
@@ -531,6 +532,9 @@ get_property (GObject *object, guint prop_id,
case PROP_CONNECTION:
g_value_set_boxed (value, nm_connection_get_path (priv->connection));
break;
+ case PROP_UUID:
+ g_value_set_string (value, nm_connection_get_uuid (priv->connection));
+ break;
case PROP_SPECIFIC_OBJECT:
if (priv->specific_object)
g_value_set_boxed (value, priv->specific_object);
@@ -622,6 +626,7 @@ nm_act_request_class_init (NMActRequestClass *req_class)
/* properties */
nm_active_connection_install_properties (object_class,
PROP_CONNECTION,
+ PROP_UUID,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,
diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c
index 2f9a8f97d..ae2afb072 100644
--- a/src/nm-active-connection.c
+++ b/src/nm-active-connection.c
@@ -35,6 +35,7 @@ nm_active_connection_get_next_object_path (void)
void
nm_active_connection_install_properties (GObjectClass *object_class,
guint prop_connection,
+ guint prop_uuid,
guint prop_specific_object,
guint prop_devices,
guint prop_state,
@@ -49,6 +50,13 @@ nm_active_connection_install_properties (GObjectClass *object_class,
DBUS_TYPE_G_OBJECT_PATH,
G_PARAM_READABLE));
+ g_object_class_install_property (object_class, prop_uuid,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_UUID,
+ "Connection UUID",
+ "Connection UUID",
+ NULL,
+ G_PARAM_READABLE));
+
g_object_class_install_property (object_class, prop_specific_object,
g_param_spec_boxed (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT,
"Specific object",
diff --git a/src/nm-active-connection.h b/src/nm-active-connection.h
index d39fcbd75..4bd8c78ef 100644
--- a/src/nm-active-connection.h
+++ b/src/nm-active-connection.h
@@ -25,6 +25,7 @@
#include "nm-connection.h"
#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
+#define NM_ACTIVE_CONNECTION_UUID "uuid"
#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
#define NM_ACTIVE_CONNECTION_DEVICES "devices"
#define NM_ACTIVE_CONNECTION_STATE "state"
@@ -36,6 +37,7 @@ char *nm_active_connection_get_next_object_path (void);
void nm_active_connection_install_properties (GObjectClass *object_class,
guint prop_connection,
+ guint prop_uuid,
guint prop_specific_object,
guint prop_devices,
guint prop_state,
diff --git a/src/vpn-manager/nm-vpn-connection-base.c b/src/vpn-manager/nm-vpn-connection-base.c
index 7fde5db06..c73736277 100644
--- a/src/vpn-manager/nm-vpn-connection-base.c
+++ b/src/vpn-manager/nm-vpn-connection-base.c
@@ -44,6 +44,7 @@ typedef struct {
enum {
PROP_0,
PROP_CONNECTION,
+ PROP_UUID,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,
@@ -143,6 +144,9 @@ get_property (GObject *object, guint prop_id,
case PROP_CONNECTION:
g_value_set_boxed (value, nm_connection_get_path (priv->connection));
break;
+ case PROP_UUID:
+ g_value_set_boxed (value, nm_connection_get_uuid (priv->connection));
+ break;
case PROP_SPECIFIC_OBJECT:
g_value_set_boxed (value, priv->ac_path);
break;
@@ -181,6 +185,7 @@ nm_vpn_connection_base_class_init (NMVpnConnectionBaseClass *vpn_class)
/* properties */
nm_active_connection_install_properties (object_class,
PROP_CONNECTION,
+ PROP_UUID,
PROP_SPECIFIC_OBJECT,
PROP_DEVICES,
PROP_STATE,