NetworkManager r3484 - in trunk: . include introspection libnm-glib src
- From: dcbw svn gnome org
- To: svn-commits-list gnome org
- Subject: NetworkManager r3484 - in trunk: . include introspection libnm-glib src
- Date: Thu, 20 Mar 2008 19:56:13 +0000 (GMT)
Author: dcbw
Date: Thu Mar 20 19:56:12 2008
New Revision: 3484
URL: http://svn.gnome.org/viewvc/NetworkManager?rev=3484&view=rev
Log:
2008-03-20 Dan Williams <dcbw redhat com>
* introspection/nm-manager.xml
introspection/nm-manager-client.xml
- (ActivateConnection): return the object path of the active connection
on success
- (GetActiveConnections): remove
- (DeactivateConnection): new function; deactivate a currently active
connection
- Add an ActiveConnections property which returns an array of
active connection object paths
* introspection/nm-device.xml
- (Deactivate): remove
* introspection/all.xml
- Add ActiveConnection introspection
* introspection/nm-active-connection.xml
- Add the ActiveConnection object
* include/NetworkManager.h
- Add the Connection.Active D-Bus interface
* src/nm-device-interface.c
- (impl_device_deactivate): remove
* src/nm-activation-request.c
src/nm-activation-request.c
src/Makefile.am
- Implement the Connection.Active D-Bus interface
* src/nm-manager.c
- (get_property, nm_manager_class_init): add ACTIVE_CONNECTIONS property
- (nm_manager_activate_device): return the active connection path
- (connection_added_default_handler, impl_manager_activate_connection):
return the active connection to the caller
- (add_one_connection_element, impl_manager_get_active_connections):
remove
- (impl_manager_deactivate_connection): new function; deactivate an
active connection
* libnm-glib/nm-device.c
libnm-glib/nm-device.h
- Remove Deactivate() function
Modified:
trunk/ChangeLog
trunk/include/NetworkManager.h
trunk/introspection/Makefile.am
trunk/introspection/all.xml
trunk/introspection/nm-device.xml
trunk/introspection/nm-manager-client.xml
trunk/introspection/nm-manager.xml
trunk/libnm-glib/nm-device.c
trunk/libnm-glib/nm-device.h
trunk/src/Makefile.am
trunk/src/nm-activation-request.c
trunk/src/nm-activation-request.h
trunk/src/nm-device-interface.c
trunk/src/nm-manager.c
trunk/src/nm-manager.h
Modified: trunk/include/NetworkManager.h
==============================================================================
--- trunk/include/NetworkManager.h (original)
+++ trunk/include/NetworkManager.h Thu Mar 20 19:56:12 2008
@@ -36,6 +36,7 @@
#define NM_DBUS_INTERFACE_ACCESS_POINT "org.freedesktop.NetworkManager.AccessPoint"
#define NM_DBUS_INTERFACE_GSM_DEVICE "org.freedesktop.NetworkManager.Device.Gsm"
#define NM_DBUS_INTERFACE_CDMA_DEVICE "org.freedesktop.NetworkManager.Device.Cdma"
+#define NM_DBUS_INTERFACE_ACTIVE_CONNECTION "org.freedesktop.NetworkManager.Connection.Active"
#define NM_DBUS_SERVICE_USER_SETTINGS "org.freedesktop.NetworkManagerUserSettings"
#define NM_DBUS_SERVICE_SYSTEM_SETTINGS "org.freedesktop.NetworkManagerSystemSettings"
Modified: trunk/introspection/Makefile.am
==============================================================================
--- trunk/introspection/Makefile.am (original)
+++ trunk/introspection/Makefile.am Thu Mar 20 19:56:12 2008
@@ -11,5 +11,6 @@
nm-vpn-manager.xml \
nm-vpn-plugin.xml \
nm-vpn-connection.xml \
- nm-ppp-manager.xml
+ nm-ppp-manager.xml \
+ nm-active-connection.xml
Modified: trunk/introspection/all.xml
==============================================================================
--- trunk/introspection/all.xml (original)
+++ trunk/introspection/all.xml Thu Mar 20 19:56:12 2008
@@ -33,6 +33,7 @@
<xi:include href="nm-ip4-config.xml"/>
<xi:include href="nm-settings.xml"/>
<xi:include href="nm-exported-connection.xml"/>
+<xi:include href="nm-active-connection.xml"/>
<xi:include href="nm-vpn-manager.xml"/>
<xi:include href="nm-vpn-connection.xml"/>
<xi:include href="nm-vpn-plugin.xml"/>
Modified: trunk/introspection/nm-device.xml
==============================================================================
--- trunk/introspection/nm-device.xml (original)
+++ trunk/introspection/nm-device.xml Thu Mar 20 19:56:12 2008
@@ -2,13 +2,6 @@
<node name="/" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
<interface name="org.freedesktop.NetworkManager.Device">
- <method name="Deactivate">
- <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_device_deactivate"/>
- <tp:docstring>
- Deactivate the device, removing its routing table entry and IP address
- </tp:docstring>
- </method>
-
<property name="Udi" type="s" access="read">
<tp:docstring>
HAL UDI for the device.
Modified: trunk/introspection/nm-manager-client.xml
==============================================================================
--- trunk/introspection/nm-manager-client.xml (original)
+++ trunk/introspection/nm-manager-client.xml Thu Mar 20 19:56:12 2008
@@ -26,11 +26,12 @@
<arg name="connection" type="o" direction="in"/>
<arg name="device" type="o" direction="in"/>
<arg name="specific_object" type="o" direction="in"/>
+ <arg name="active_connection" type="o" direction="out"/>
</method>
- <method name="GetActiveConnections">
- <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_get_active_connections"/>
- <arg name="connections" type="aa{sv}" direction="out"/>
+ <method name="DeactivateConnection">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_deactivate_connection"/>
+ <arg name="active_connection" type="o" direction="in"/>
</method>
<method name="Sleep">
@@ -40,9 +41,10 @@
<property name="WirelessEnabled" type="b" access="readwrite"/>
<property name="WirelessHardwareEnabled" type="b" access="read"/>
+ <property name="ActiveConnections" type="ao" access="read"/>
<property name="State" type="u" access="read"/>
- <signal name="StateChange">
+ <signal name="StateChanged">
<arg name="state" type="u"/>
</signal>
Modified: trunk/introspection/nm-manager.xml
==============================================================================
--- trunk/introspection/nm-manager.xml (original)
+++ trunk/introspection/nm-manager.xml Thu Mar 20 19:56:12 2008
@@ -47,6 +47,11 @@
The path of a device-type-specific object this activation should use, for example a WiFi access point.
</tp:docstring>
</arg>
+ <arg name="active_connection" type="o" direction="out">
+ <tp:docstring>
+ The path of the active connection object representing this active connection.
+ </tp:docstring>
+ </arg>
<tp:possible-errors>
<tp:error name="org.freedesktop.NetworkManager.Error.UnknownConnection"/>
<tp:error name="org.freedesktop.NetworkManager.Error.UnknownDevice"/>
@@ -57,15 +62,17 @@
<tp:error name="org.freedesktop.NetworkManager.Error.ConnectionInvalid">
<tp:docstring>The connection is invalid for this device.</tp:docstring>
</tp:error>
-
</tp:possible-errors>
</method>
- <method name="GetActiveConnections">
- <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_get_active_connections"/>
- <arg name="connections" type="aa{sv}" direction="out">
+ <method name="DeactivateConnection">
+ <tp:docstring>
+ Deactivate an active connection.
+ </tp:docstring>
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="impl_manager_deactivate_connection"/>
+ <arg name="active_connection" type="o" direction="in">
<tp:docstring>
- List of active connections, each described by a property dictionary.
+ The currently active connection to deactivate.
</tp:docstring>
</arg>
</method>
@@ -94,6 +101,12 @@
</tp:docstring>
</property>
+ <property name="ActiveConnections" type="ao" access="read">
+ <tp:docstring>
+ List of active connection object paths.
+ </tp:docstring>
+ </property>
+
<property name="State" type="u" access="read" tp:type="NM_STATE">
<tp:docstring>
The overall state of the NetworkManager daemon.
Modified: trunk/libnm-glib/nm-device.c
==============================================================================
--- trunk/libnm-glib/nm-device.c (original)
+++ trunk/libnm-glib/nm-device.c Thu Mar 20 19:56:12 2008
@@ -150,19 +150,6 @@
NULL);
}
-void
-nm_device_deactivate (NMDevice *device)
-{
- GError *err = NULL;
-
- g_return_if_fail (NM_IS_DEVICE (device));
-
- if (!org_freedesktop_NetworkManager_Device_deactivate (NM_DEVICE_GET_PRIVATE (device)->device_proxy, &err)) {
- g_warning ("Cannot deactivate device: %s", err->message);
- g_error_free (err);
- }
-}
-
char *
nm_device_get_iface (NMDevice *device)
{
Modified: trunk/libnm-glib/nm-device.h
==============================================================================
--- trunk/libnm-glib/nm-device.h (original)
+++ trunk/libnm-glib/nm-device.h Thu Mar 20 19:56:12 2008
@@ -34,8 +34,6 @@
NMDevice *nm_device_new (DBusGConnection *connection,
const char *path);
-void nm_device_deactivate (NMDevice *device);
-
char *nm_device_get_iface (NMDevice *device);
char *nm_device_get_udi (NMDevice *device);
char *nm_device_get_driver (NMDevice *device);
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Thu Mar 20 19:56:12 2008
@@ -86,6 +86,8 @@
nm-ip4-config-glue.h: $(top_srcdir)/introspection/nm-ip4-config.xml
dbus-binding-tool --prefix=nm_ip4_config --mode=glib-server --output=nm-ip4-config-glue.h $(top_srcdir)/introspection/nm-ip4-config.xml
+nm-active-connection-glue.h: $(top_srcdir)/introspection/nm-active-connection.xml
+ dbus-binding-tool --prefix=nm_active_connection --mode=glib-server --output=nm-active-connection-glue.h $(top_srcdir)/introspection/nm-active-connection.xml
built_sources = \
nm-access-point-glue.h \
@@ -94,6 +96,7 @@
nm-device-802-3-ethernet-glue.h \
nm-device-802-11-wireless-glue.h \
nm-ip4-config-glue.h \
+ nm-active-connection-glue.h \
$(NULL)
$(NetworkManager_OBJECTS): $(built_sources)
Modified: trunk/src/nm-activation-request.c
==============================================================================
--- trunk/src/nm-activation-request.c (original)
+++ trunk/src/nm-activation-request.c Thu Mar 20 19:56:12 2008
@@ -27,6 +27,10 @@
#include "nm-utils.h"
#include "nm-setting-wireless-security.h"
#include "nm-setting-8021x.h"
+#include "nm-dbus-manager.h"
+#include "nm-device.h"
+#include "nm-properties-changed-signal.h"
+#include "nm-active-connection-glue.h"
#include "nm-manager.h" /* FIXME! */
@@ -39,6 +43,7 @@
enum {
CONNECTION_SECRETS_UPDATED,
CONNECTION_SECRETS_FAILED,
+ PROPERTIES_CHANGED,
LAST_SIGNAL
};
@@ -49,9 +54,59 @@
typedef struct {
NMConnection *connection;
char *specific_object;
+ NMConnection *shared;
+ NMDevice *device;
gboolean user_requested;
+
+ char *ac_path;
} NMActRequestPrivate;
+enum {
+ PROP_0,
+ PROP_SERVICE_NAME,
+ PROP_CONNECTION,
+ PROP_SPECIFIC_OBJECT,
+ PROP_SHARED_SERVICE_NAME,
+ PROP_SHARED_CONNECTION,
+ PROP_DEVICES,
+
+ LAST_PROP
+};
+
+
+NMActRequest *
+nm_act_request_new (NMConnection *connection,
+ const char *specific_object,
+ gboolean user_requested,
+ gpointer *device)
+{
+ GObject *object;
+ NMActRequestPrivate *priv;
+ DBusGConnection *g_connection;
+ static guint32 counter = 0;
+
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (NM_DEVICE (device), NULL);
+
+ object = g_object_new (NM_TYPE_ACT_REQUEST, NULL);
+ if (!object)
+ return NULL;
+
+ priv = NM_ACT_REQUEST_GET_PRIVATE (object);
+
+ priv->connection = g_object_ref (connection);
+ if (specific_object)
+ priv->specific_object = g_strdup (specific_object);
+ priv->device = NM_DEVICE (device);
+ priv->user_requested = user_requested;
+
+ g_connection = nm_dbus_manager_get_connection (nm_dbus_manager_get ());
+ priv->ac_path = g_strdup_printf (NM_DBUS_PATH "/ActiveConnection/%d", counter++);
+ dbus_g_connection_register_g_object (g_connection, priv->ac_path, object);
+
+ return NM_ACT_REQUEST (object);
+}
+
static void
nm_act_request_init (NMActRequest *req)
{
@@ -79,6 +134,9 @@
CONNECTION_GET_SECRETS_CALL_TAG, NULL);
g_object_unref (priv->connection);
+ if (priv->shared)
+ g_object_unref (priv->shared);
+
out:
G_OBJECT_CLASS (nm_act_request_parent_class)->dispose (object);
}
@@ -89,20 +147,129 @@
NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (object);
g_free (priv->specific_object);
+ g_free (priv->ac_path);
G_OBJECT_CLASS (nm_act_request_parent_class)->finalize (object);
}
static void
+scope_to_value (NMConnection *connection, GValue *value)
+{
+ if (!connection) {
+ g_value_set_string (value, "");
+ return;
+ }
+
+ switch (nm_connection_get_scope (connection)) {
+ case NM_CONNECTION_SCOPE_SYSTEM:
+ g_value_set_string (value, NM_DBUS_SERVICE_SYSTEM_SETTINGS);
+ break;
+ case NM_CONNECTION_SCOPE_USER:
+ g_value_set_string (value, NM_DBUS_SERVICE_USER_SETTINGS);
+ break;
+ default:
+ g_warning ("%s: unknown connection scope!", __func__);
+ break;
+ }
+}
+
+static void
+get_property (GObject *object, guint prop_id,
+ GValue *value, GParamSpec *pspec)
+{
+ NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (object);
+ GPtrArray *devices;
+
+ switch (prop_id) {
+ case PROP_SERVICE_NAME:
+ scope_to_value (priv->connection, value);
+ break;
+ case PROP_CONNECTION:
+ g_value_set_boxed (value, nm_connection_get_path (priv->connection));
+ break;
+ case PROP_SPECIFIC_OBJECT:
+ if (priv->specific_object)
+ g_value_set_boxed (value, priv->specific_object);
+ else
+ g_value_set_boxed (value, "/");
+ break;
+ case PROP_SHARED_SERVICE_NAME:
+ scope_to_value (priv->shared, value);
+ break;
+ case PROP_SHARED_CONNECTION:
+ if (!priv->shared) {
+ g_value_set_boxed (value, "/");
+ break;
+ }
+ g_value_set_boxed (value, nm_connection_get_path (priv->shared));
+ break;
+ case PROP_DEVICES:
+ devices = g_ptr_array_sized_new (1);
+ g_ptr_array_add (devices, g_strdup (nm_device_get_udi (priv->device)));
+ g_value_take_boxed (value, devices);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
nm_act_request_class_init (NMActRequestClass *req_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (req_class);
g_type_class_add_private (req_class, sizeof (NMActRequestPrivate));
+ /* virtual methods */
+ object_class->get_property = get_property;
object_class->dispose = dispose;
object_class->finalize = finalize;
+ /* properties */
+ g_object_class_install_property
+ (object_class, PROP_SERVICE_NAME,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_SERVICE_NAME,
+ "Service name",
+ "Service name",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_CONNECTION,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_CONNECTION,
+ "Connection",
+ "Connection",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_SPECIFIC_OBJECT,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT,
+ "Specific object",
+ "Specific object",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_SHARED_SERVICE_NAME,
+ g_param_spec_string (NM_ACTIVE_CONNECTION_SHARED_SERVICE_NAME,
+ "Shared service name",
+ "Shared service name",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_SHARED_CONNECTION,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_SHARED_CONNECTION,
+ "Shared connection",
+ "Shared connection",
+ DBUS_TYPE_G_OBJECT_PATH,
+ G_PARAM_READABLE));
+ g_object_class_install_property
+ (object_class, PROP_DEVICES,
+ g_param_spec_boxed (NM_ACTIVE_CONNECTION_DEVICES,
+ "Devices",
+ "Devices",
+ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH),
+ G_PARAM_READABLE));
+
/* Signals */
signals[CONNECTION_SECRETS_UPDATED] =
g_signal_new ("connection-secrets-updated",
@@ -123,30 +290,13 @@
nm_marshal_VOID__OBJECT_STRING,
G_TYPE_NONE, 2,
G_TYPE_OBJECT, G_TYPE_STRING);
-}
-NMActRequest *
-nm_act_request_new (NMConnection *connection,
- const char *specific_object,
- gboolean user_requested)
-{
- GObject *obj;
- NMActRequestPrivate *priv;
+ signals[PROPERTIES_CHANGED] =
+ nm_properties_changed_signal_new (object_class,
+ G_STRUCT_OFFSET (NMActRequestClass, properties_changed));
- g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
-
- obj = g_object_new (NM_TYPE_ACT_REQUEST, NULL);
- if (!obj)
- return NULL;
-
- priv = NM_ACT_REQUEST_GET_PRIVATE (obj);
-
- priv->connection = g_object_ref (connection);
- priv->user_requested = user_requested;
- if (specific_object)
- priv->specific_object = g_strdup (specific_object);
-
- return NM_ACT_REQUEST (obj);
+ dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (req_class),
+ &dbus_glib_nm_active_connection_object_info);
}
typedef struct GetSecretsInfo {
@@ -407,3 +557,12 @@
return NM_ACT_REQUEST_GET_PRIVATE (req)->user_requested;
}
+
+const char *
+nm_act_request_get_active_connection_path (NMActRequest *req)
+{
+ g_return_val_if_fail (NM_IS_ACT_REQUEST (req), FALSE);
+
+ return NM_ACT_REQUEST_GET_PRIVATE (req)->ac_path;
+}
+
Modified: trunk/src/nm-activation-request.h
==============================================================================
--- trunk/src/nm-activation-request.h (original)
+++ trunk/src/nm-activation-request.h Thu Mar 20 19:56:12 2008
@@ -33,6 +33,13 @@
#define NM_IS_ACT_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NM_TYPE_ACT_REQUEST))
#define NM_ACT_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACT_REQUEST, NMActRequestClass))
+#define NM_ACTIVE_CONNECTION_SERVICE_NAME "service-name"
+#define NM_ACTIVE_CONNECTION_CONNECTION "connection"
+#define NM_ACTIVE_CONNECTION_SPECIFIC_OBJECT "specific-object"
+#define NM_ACTIVE_CONNECTION_SHARED_SERVICE_NAME "shared-service-name"
+#define NM_ACTIVE_CONNECTION_SHARED_CONNECTION "shared-connection"
+#define NM_ACTIVE_CONNECTION_DEVICES "devices"
+
typedef struct {
GObject parent;
} NMActRequest;
@@ -47,13 +54,16 @@
void (*connection_secrets_failed) (NMActRequest *req,
NMConnection *connection,
const char * setting);
+
+ void (*properties_changed) (NMActRequest *req, GHashTable *properties);
} NMActRequestClass;
GType nm_act_request_get_type (void);
NMActRequest *nm_act_request_new (NMConnection *connection,
const char *specific_object,
- gboolean user_requested);
+ gboolean user_requested,
+ gpointer *device); /* An NMDevice */
NMConnection *nm_act_request_get_connection (NMActRequest *req);
gboolean nm_act_request_request_connection_secrets (NMActRequest *req,
@@ -66,4 +76,6 @@
gboolean nm_act_request_get_user_requested (NMActRequest *req);
+const char * nm_act_request_get_active_connection_path (NMActRequest *req);
+
#endif /* NM_ACTIVATION_REQUEST_H */
Modified: trunk/src/nm-device-interface.c
==============================================================================
--- trunk/src/nm-device-interface.c (original)
+++ trunk/src/nm-device-interface.c Thu Mar 20 19:56:12 2008
@@ -5,8 +5,6 @@
#include "nm-ip4-config.h"
#include "nm-utils.h"
-static gboolean impl_device_deactivate (NMDeviceInterface *device, GError **err);
-
#include "nm-device-interface-glue.h"
GQuark
@@ -228,12 +226,3 @@
NM_DEVICE_INTERFACE_GET_INTERFACE (device)->deactivate (device);
}
-static gboolean
-impl_device_deactivate (NMDeviceInterface *device, GError **err)
-{
- g_return_val_if_fail (NM_IS_DEVICE_INTERFACE (device), FALSE);
-
- nm_device_interface_deactivate (device);
-
- return TRUE;
-}
Modified: trunk/src/nm-manager.c
==============================================================================
--- trunk/src/nm-manager.c (original)
+++ trunk/src/nm-manager.c Thu Mar 20 19:56:12 2008
@@ -16,15 +16,15 @@
static gboolean impl_manager_get_devices (NMManager *manager, GPtrArray **devices, GError **err);
static void impl_manager_activate_connection (NMManager *manager,
- char *service_name,
- char *connection_path,
- char *device_path,
- char *specific_object_path,
+ const char *service_name,
+ const char *connection_path,
+ const char *device_path,
+ const char *specific_object_path,
DBusGMethodInvocation *context);
-static gboolean impl_manager_get_active_connections (NMManager *manager,
- GPtrArray **connections,
- GError **err);
+static gboolean impl_manager_deactivate_connection (NMManager *manager,
+ const char *connection_path,
+ GError **error);
static gboolean impl_manager_sleep (NMManager *manager, gboolean sleep, GError **err);
@@ -101,6 +101,7 @@
PROP_STATE,
PROP_WIRELESS_ENABLED,
PROP_WIRELESS_HARDWARE_ENABLED,
+ PROP_ACTIVE_CONNECTIONS,
LAST_PROP
};
@@ -112,6 +113,7 @@
NM_MANAGER_ERROR_INVALID_SERVICE,
NM_MANAGER_ERROR_SYSTEM_CONNECTION,
NM_MANAGER_ERROR_PERMISSION_DENIED,
+ NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
} NMManagerError;
#define NM_MANAGER_ERROR (nm_manager_error_quark ())
@@ -148,6 +150,8 @@
ENUM_ENTRY (NM_MANAGER_ERROR_SYSTEM_CONNECTION, "SystemConnection"),
/* User does not have the permission to activate this connection. */
ENUM_ENTRY (NM_MANAGER_ERROR_PERMISSION_DENIED, "PermissionDenied"),
+ /* The connection was not active. */
+ ENUM_ENTRY (NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE, "ConnectionNotActive"),
{ 0, 0, 0 }
};
etype = g_enum_register_static ("NMManagerError", values);
@@ -303,6 +307,25 @@
case PROP_WIRELESS_HARDWARE_ENABLED:
g_value_set_boolean (value, priv->wireless_hw_enabled);
break;
+ case PROP_ACTIVE_CONNECTIONS: {
+ GPtrArray *active;
+ GSList *iter;
+
+ active = g_ptr_array_sized_new (2);
+ for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
+ NMActRequest *req;
+ const char *path;
+
+ req = nm_device_get_act_request (NM_DEVICE (iter->data));
+ if (!req)
+ continue;
+
+ path = nm_act_request_get_active_connection_path (req);
+ g_ptr_array_add (active, g_strdup (path));
+ }
+ g_value_take_boxed (value, active);
+ break;
+ }
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -348,6 +371,14 @@
TRUE,
G_PARAM_READWRITE));
+ g_object_class_install_property
+ (object_class, PROP_ACTIVE_CONNECTIONS,
+ g_param_spec_boxed (NM_MANAGER_ACTIVE_CONNECTIONS,
+ "Active connections",
+ "Active connections",
+ dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH),
+ G_PARAM_READABLE));
+
/* signals */
signals[DEVICE_ADDED] =
g_signal_new ("device-added",
@@ -1255,7 +1286,7 @@
return allowed;
}
-gboolean
+const char *
nm_manager_activate_device (NMManager *manager,
NMDevice *device,
NMConnection *connection,
@@ -1267,24 +1298,24 @@
NMDeviceInterface *dev_iface;
gboolean success;
- g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
- g_return_val_if_fail (NM_IS_DEVICE (device), FALSE);
- g_return_val_if_fail (NM_IS_CONNECTION (connection), FALSE);
+ g_return_val_if_fail (NM_IS_MANAGER (manager), NULL);
+ g_return_val_if_fail (NM_IS_DEVICE (device), NULL);
+ g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL);
dev_iface = NM_DEVICE_INTERFACE (device);
/* Ensure the requested connection is allowed to be activated */
if (!check_connection_allowed (manager, dev_iface, connection, specific_object, error))
- return FALSE;
+ return NULL;
if (nm_device_get_act_request (device))
nm_device_interface_deactivate (dev_iface);
- req = nm_act_request_new (connection, specific_object, user_requested);
+ req = nm_act_request_new (connection, specific_object, user_requested, (gpointer) device);
success = nm_device_interface_activate (dev_iface, req, error);
g_object_unref (req);
- return success;
+ return nm_act_request_get_active_connection_path (req);
}
gboolean
@@ -1332,7 +1363,7 @@
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
PendingConnectionInfo *info = priv->pending_connection_info;
- gboolean success;
+ const char *path;
GError *error = NULL;
if (!info)
@@ -1347,14 +1378,14 @@
/* Will destroy below; can't be valid during the initial activation start */
priv->pending_connection_info = NULL;
- success = nm_manager_activate_device (manager,
- info->device,
- connection,
- info->specific_object_path,
- TRUE,
- &error);
- if (success)
- dbus_g_method_return (info->context, TRUE);
+ path = nm_manager_activate_device (manager,
+ info->device,
+ connection,
+ info->specific_object_path,
+ TRUE,
+ &error);
+ if (path)
+ dbus_g_method_return (info->context, path);
else {
dbus_g_method_return_error (info->context, error);
nm_warning ("Failed to activate device %s: (%d) %s",
@@ -1369,10 +1400,10 @@
static void
impl_manager_activate_connection (NMManager *manager,
- char *service_name,
- char *connection_path,
- char *device_path,
- char *specific_object_path,
+ const char *service_name,
+ const char *connection_path,
+ const char *device_path,
+ const char *specific_object_path,
DBusGMethodInvocation *context)
{
NMDevice *device;
@@ -1408,16 +1439,16 @@
connection = nm_manager_get_connection_by_object_path (manager, scope, connection_path);
if (connection) {
- gboolean success;
+ const char *path;
- success = nm_manager_activate_device (manager,
- device,
- connection,
- real_sop,
- TRUE,
- &error);
- if (success)
- dbus_g_method_return (context, TRUE);
+ path = nm_manager_activate_device (manager,
+ device,
+ connection,
+ real_sop,
+ TRUE,
+ &error);
+ if (path)
+ dbus_g_method_return (context, path);
} else {
PendingConnectionInfo *info;
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
@@ -1456,130 +1487,33 @@
g_free (real_sop);
}
-static void
-destroy_gvalue (gpointer data)
-{
- GValue *value = (GValue *) data;
-
- g_value_unset (value);
- g_slice_free (GValue, value);
-}
-
-static GHashTable *
-add_one_connection_element (NMManager *manager,
- NMDevice *device)
-{
- GHashTable *properties;
- NMActRequest *req;
- const char *service_name = NULL;
- NMConnection *connection;
- const char *specific_object;
- GPtrArray *dev_array = NULL;
- GValue *value;
-
- req = nm_device_get_act_request (device);
- g_assert (req);
- connection = nm_act_request_get_connection (req);
- g_assert (connection);
-
- switch (nm_connection_get_scope (connection)) {
- case NM_CONNECTION_SCOPE_USER:
- service_name = NM_DBUS_SERVICE_USER_SETTINGS;
- break;
- case NM_CONNECTION_SCOPE_SYSTEM:
- service_name = NM_DBUS_SERVICE_SYSTEM_SETTINGS;
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- specific_object = nm_act_request_get_specific_object (req);
-
- properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, destroy_gvalue);
-
- /* Service name */
- value = g_slice_new0 (GValue);
- g_value_init (value, G_TYPE_STRING);
- g_value_set_string (value, service_name);
- g_hash_table_insert (properties, g_strdup (NM_AC_KEY_SERVICE_NAME), value);
-
- /* Connection path */
- value = g_slice_new0 (GValue);
- g_value_init (value, DBUS_TYPE_G_OBJECT_PATH);
- g_value_set_boxed (value, nm_connection_get_path (connection));
- g_hash_table_insert (properties, g_strdup (NM_AC_KEY_CONNECTION), value);
-
- /* Specific object */
- if (specific_object) {
- value = g_slice_new0 (GValue);
- g_value_init (value, DBUS_TYPE_G_OBJECT_PATH);
- g_value_set_boxed (value, specific_object);
- g_hash_table_insert (properties, g_strdup (NM_AC_KEY_SPECIFIC_OBJECT), value);
- }
-
- if (FALSE /* SHARED */ ) {
- /* Shared connection service name */
- value = g_slice_new0 (GValue);
- g_value_init (value, G_TYPE_STRING);
- g_value_set_string (value, service_name);
- g_hash_table_insert (properties, g_strdup (NM_AC_KEY_SHARED_TO_SERVICE_NAME), value);
-
- /* Shared connection connection path */
- value = g_slice_new0 (GValue);
- g_value_init (value, DBUS_TYPE_G_OBJECT_PATH);
- g_value_set_boxed (value, nm_connection_get_path (connection));
- g_hash_table_insert (properties, g_strdup (NM_AC_KEY_SHARED_TO_CONNECTION), value);
- }
-
- /* Device list */
- dev_array = g_ptr_array_sized_new (1);
- if (!dev_array) {
- g_hash_table_destroy (properties);
- return NULL;
- }
- g_ptr_array_add (dev_array, g_object_ref (device));
-
- value = g_slice_new0 (GValue);
- g_value_init (value, DBUS_TYPE_G_OBJECT_ARRAY);
- g_value_take_boxed (value, dev_array);
- g_hash_table_insert (properties, g_strdup (NM_AC_KEY_DEVICES), value);
-
- return properties;
-}
-
static gboolean
-impl_manager_get_active_connections (NMManager *manager,
- GPtrArray **connections,
- GError **err)
+impl_manager_deactivate_connection (NMManager *manager,
+ const char *connection_path,
+ GError **error)
{
- NMManagerPrivate *priv;
+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
GSList *iter;
- g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE);
-
- priv = NM_MANAGER_GET_PRIVATE (manager);
-
- /* GPtrArray of GHashTables */
- *connections = g_ptr_array_sized_new (1);
-
- // FIXME: this assumes one active device per connection
for (iter = priv->devices; iter; iter = g_slist_next (iter)) {
- NMDevice *dev = NM_DEVICE (iter->data);
- GHashTable *item;
-
- if ( (nm_device_get_state (dev) != NM_DEVICE_STATE_ACTIVATED)
- && !nm_device_is_activating (dev))
- continue;
+ NMDevice *device = NM_DEVICE (iter->data);
+ NMActRequest *req;
- item = add_one_connection_element (manager, dev);
- if (!item)
+ req = nm_device_get_act_request (device);
+ if (!req)
continue;
- g_ptr_array_add (*connections, item);
+ if (!strcmp (connection_path, nm_act_request_get_active_connection_path (req))) {
+ nm_device_interface_deactivate (NM_DEVICE_INTERFACE (device));
+ return TRUE;
+ }
}
- return TRUE;
+ g_set_error (error,
+ NM_MANAGER_ERROR, NM_MANAGER_ERROR_CONNECTION_NOT_ACTIVE,
+ "%s", "The connection was not active.");
+
+ return FALSE;
}
gboolean
Modified: trunk/src/nm-manager.h
==============================================================================
--- trunk/src/nm-manager.h (original)
+++ trunk/src/nm-manager.h Thu Mar 20 19:56:12 2008
@@ -17,6 +17,7 @@
#define NM_MANAGER_STATE "state"
#define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
#define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
+#define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
#define NM_MANAGER_CONNECTION_PROXY_TAG "dbus-proxy"
#define NM_MANAGER_CONNECTION_SECRETS_PROXY_TAG "dbus-secrets-proxy"
@@ -63,7 +64,7 @@
NMDevice *nm_manager_get_active_device (NMManager *manager);
-gboolean nm_manager_activate_device (NMManager *manager,
+const char *nm_manager_activate_device (NMManager *manager,
NMDevice *device,
NMConnection *connection,
const char *specific_object,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]