summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-08-18 14:17:52 -0400
committerDan Winship <danw@gnome.org>2014-09-16 10:30:44 -0400
commit7e0e678a4ddf2d404206d62c107ad212586f1a16 (patch)
tree13fa5f05876171bc1ad26b7d7216579766d1ce48
parent3c5f3710fdab3c468a488456f9f0ea89402a60a9 (diff)
downloadNetworkManager-7e0e678a4ddf2d404206d62c107ad212586f1a16.tar.gz
libnm: let NMObject create all D-Bus proxies
Add _nm_object_class_add_interface(), for declaring that a class implements a particular interface, and then have NMObject create the corresponding proxies itself. (The subclass can get a copy with _nm_object_get_proxy() if it needs it for something). (In GDBus, creating a proxy is a heavier operation than in dbus-glib, so we'll need to create the proxies asynchronously. Moving the creation to NMObject makes that easier since we can do it as part of the existing init/init_async.)
-rw-r--r--libnm/nm-access-point.c18
-rw-r--r--libnm/nm-active-connection.c9
-rw-r--r--libnm/nm-client.c8
-rw-r--r--libnm/nm-device-adsl.c33
-rw-r--r--libnm/nm-device-bond.c9
-rw-r--r--libnm/nm-device-bridge.c9
-rw-r--r--libnm/nm-device-bt.c18
-rw-r--r--libnm/nm-device-ethernet.c18
-rw-r--r--libnm/nm-device-generic.c18
-rw-r--r--libnm/nm-device-infiniband.c18
-rw-r--r--libnm/nm-device-modem.c18
-rw-r--r--libnm/nm-device-olpc-mesh.c8
-rw-r--r--libnm/nm-device-team.c9
-rw-r--r--libnm/nm-device-vlan.c18
-rw-r--r--libnm/nm-device-wifi.c7
-rw-r--r--libnm/nm-device-wimax.c8
-rw-r--r--libnm/nm-device.c7
-rw-r--r--libnm/nm-dhcp4-config.c9
-rw-r--r--libnm/nm-dhcp6-config.c9
-rw-r--r--libnm/nm-ip4-config.c9
-rw-r--r--libnm/nm-ip6-config.c9
-rw-r--r--libnm/nm-object-private.h11
-rw-r--r--libnm/nm-object.c111
-rw-r--r--libnm/nm-remote-connection.c8
-rw-r--r--libnm/nm-remote-settings.c9
-rw-r--r--libnm/nm-vpn-connection.c13
-rw-r--r--libnm/nm-wimax-nsp.c18
27 files changed, 177 insertions, 262 deletions
diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c
index d0695f9197..fc36c0faa8 100644
--- a/libnm/nm-access-point.c
+++ b/libnm/nm-access-point.c
@@ -39,8 +39,6 @@ G_DEFINE_TYPE (NMAccessPoint, nm_access_point, NM_TYPE_OBJECT)
#define NM_ACCESS_POINT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACCESS_POINT, NMAccessPointPrivate))
typedef struct {
- DBusGProxy *proxy;
-
NM80211ApFlags flags;
NM80211ApSecurityFlags wpa_flags;
NM80211ApSecurityFlags rsn_flags;
@@ -362,16 +360,6 @@ nm_access_point_init (NMAccessPoint *ap)
}
static void
-dispose (GObject *object)
-{
- NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object);
@@ -449,9 +437,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_access_point_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_ACCESS_POINT);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_ACCESS_POINT,
property_info);
}
@@ -464,9 +451,10 @@ nm_access_point_class_init (NMAccessPointClass *ap_class)
g_type_class_add_private (ap_class, sizeof (NMAccessPointPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_ACCESS_POINT);
+
/* virtual methods */
object_class->get_property = get_property;
- object_class->dispose = dispose;
object_class->finalize = finalize;
nm_object_class->init_dbus = init_dbus;
diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c
index 8230b8b4f5..667fbe1bb6 100644
--- a/libnm/nm-active-connection.c
+++ b/libnm/nm-active-connection.c
@@ -48,8 +48,6 @@ G_DEFINE_TYPE_WITH_CODE (NMActiveConnection, nm_active_connection, NM_TYPE_OBJEC
#define NM_ACTIVE_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_ACTIVE_CONNECTION, NMActiveConnectionPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *connection;
char *id;
char *uuid;
@@ -461,8 +459,6 @@ dispose (GObject *object)
g_clear_object (&priv->ip6_config);
g_clear_object (&priv->dhcp6_config);
- g_clear_object (&priv->proxy);
-
G_OBJECT_CLASS (nm_active_connection_parent_class)->dispose (object);
}
@@ -567,9 +563,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_active_connection_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_ACTIVE_CONNECTION);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
property_info);
}
@@ -582,6 +577,8 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class)
g_type_class_add_private (ap_class, sizeof (NMActiveConnectionPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_ACTIVE_CONNECTION);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->dispose = dispose;
diff --git a/libnm/nm-client.c b/libnm/nm-client.c
index 70c9c813ab..d4a7456d4d 100644
--- a/libnm/nm-client.c
+++ b/libnm/nm-client.c
@@ -195,9 +195,9 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_client_parent_class)->init_dbus (object);
- priv->client_proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE);
+ priv->client_proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE);
_nm_object_register_properties (object,
- priv->client_proxy,
+ NM_DBUS_INTERFACE,
property_info);
/* Permissions */
@@ -1822,8 +1822,6 @@ dispose (GObject *object)
priv->perm_call = NULL;
}
- g_clear_object (&priv->client_proxy);
-
free_devices (client, TRUE);
free_active_connections (client, TRUE);
g_clear_object (&priv->primary_connection);
@@ -1962,6 +1960,8 @@ nm_client_class_init (NMClientClass *client_class)
g_type_class_add_private (client_class, sizeof (NMClientPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE);
+
/* virtual methods */
object_class->constructor = constructor;
object_class->constructed = constructed;
diff --git a/libnm/nm-device-adsl.c b/libnm/nm-device-adsl.c
index 3d99020a2e..49d6595e42 100644
--- a/libnm/nm-device-adsl.c
+++ b/libnm/nm-device-adsl.c
@@ -32,11 +32,8 @@ G_DEFINE_TYPE (NMDeviceAdsl, nm_device_adsl, NM_TYPE_DEVICE)
#define NM_DEVICE_ADSL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ADSL, NMDeviceAdslPrivate))
typedef struct {
- DBusGProxy *proxy;
-
gboolean carrier;
- gboolean disposed;
} NMDeviceAdslPrivate;
enum {
@@ -130,36 +127,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_adsl_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_ADSL);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_ADSL,
property_info);
}
static void
-dispose (GObject *object)
-{
- NMDeviceAdslPrivate *priv = NM_DEVICE_ADSL_GET_PRIVATE (object);
-
- if (priv->disposed) {
- G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object);
- return;
- }
-
- priv->disposed = TRUE;
-
- g_object_unref (priv->proxy);
-
- G_OBJECT_CLASS (nm_device_adsl_parent_class)->dispose (object);
-}
-
-static void
-finalize (GObject *object)
-{
- G_OBJECT_CLASS (nm_device_adsl_parent_class)->finalize (object);
-}
-
-static void
get_property (GObject *object,
guint prop_id,
GValue *value,
@@ -186,9 +159,9 @@ nm_device_adsl_class_init (NMDeviceAdslClass *adsl_class)
g_type_class_add_private (object_class, sizeof (NMDeviceAdslPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_ADSL);
+
/* virtual methods */
- object_class->dispose = dispose;
- object_class->finalize = finalize;
object_class->get_property = get_property;
nm_object_class->init_dbus = init_dbus;
diff --git a/libnm/nm-device-bond.c b/libnm/nm-device-bond.c
index e378c9cc31..b22d8b30fb 100644
--- a/libnm/nm-device-bond.c
+++ b/libnm/nm-device-bond.c
@@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceBond, nm_device_bond, NM_TYPE_DEVICE)
#define NM_DEVICE_BOND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BOND, NMDeviceBondPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
gboolean carrier;
GPtrArray *slaves;
@@ -191,9 +189,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_bond_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_BOND);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_BOND,
property_info);
}
@@ -202,8 +199,6 @@ dispose (GObject *object)
{
NMDeviceBondPrivate *priv = NM_DEVICE_BOND_GET_PRIVATE (object);
- g_clear_object (&priv->proxy);
-
g_clear_pointer (&priv->slaves, g_ptr_array_unref);
G_OBJECT_CLASS (nm_device_bond_parent_class)->dispose (object);
@@ -252,6 +247,8 @@ nm_device_bond_class_init (NMDeviceBondClass *bond_class)
g_type_class_add_private (bond_class, sizeof (NMDeviceBondPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BOND);
+
/* virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
diff --git a/libnm/nm-device-bridge.c b/libnm/nm-device-bridge.c
index cb9cb2ad46..b4ee25b811 100644
--- a/libnm/nm-device-bridge.c
+++ b/libnm/nm-device-bridge.c
@@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceBridge, nm_device_bridge, NM_TYPE_DEVICE)
#define NM_DEVICE_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BRIDGE, NMDeviceBridgePrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
gboolean carrier;
GPtrArray *slaves;
@@ -191,9 +189,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_bridge_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_BRIDGE);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_BRIDGE,
property_info);
}
@@ -202,8 +199,6 @@ dispose (GObject *object)
{
NMDeviceBridgePrivate *priv = NM_DEVICE_BRIDGE_GET_PRIVATE (object);
- g_clear_object (&priv->proxy);
-
g_clear_pointer (&priv->slaves, g_ptr_array_unref);
G_OBJECT_CLASS (nm_device_bridge_parent_class)->dispose (object);
@@ -252,6 +247,8 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *bridge_class)
g_type_class_add_private (bridge_class, sizeof (NMDeviceBridgePrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BRIDGE);
+
/* virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c
index 925442e524..b5cefe817f 100644
--- a/libnm/nm-device-bt.c
+++ b/libnm/nm-device-bt.c
@@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE)
#define NM_DEVICE_BT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_BT, NMDeviceBtPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
char *name;
guint32 bt_capabilities;
@@ -227,23 +225,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_bt_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_BLUETOOTH);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_BLUETOOTH,
property_info);
}
static void
-dispose (GObject *object)
-{
- NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_device_bt_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (object);
@@ -287,8 +274,9 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class)
g_type_class_add_private (bt_class, sizeof (NMDeviceBtPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_BLUETOOTH);
+
/* virtual methods */
- object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c
index 118cda17d6..e26a58ee21 100644
--- a/libnm/nm-device-ethernet.c
+++ b/libnm/nm-device-ethernet.c
@@ -38,8 +38,6 @@ G_DEFINE_TYPE (NMDeviceEthernet, nm_device_ethernet, NM_TYPE_DEVICE)
#define NM_DEVICE_ETHERNET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_ETHERNET, NMDeviceEthernetPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
char *perm_hw_address;
guint32 speed;
@@ -226,23 +224,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_ethernet_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_WIRED);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_WIRED,
property_info);
}
static void
-dispose (GObject *object)
-{
- NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_device_ethernet_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (object);
@@ -289,8 +276,9 @@ nm_device_ethernet_class_init (NMDeviceEthernetClass *eth_class)
g_type_class_add_private (eth_class, sizeof (NMDeviceEthernetPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIRED);
+
/* virtual methods */
- object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
diff --git a/libnm/nm-device-generic.c b/libnm/nm-device-generic.c
index 29cae7cd37..5d11fcde0a 100644
--- a/libnm/nm-device-generic.c
+++ b/libnm/nm-device-generic.c
@@ -32,8 +32,6 @@ G_DEFINE_TYPE (NMDeviceGeneric, nm_device_generic, NM_TYPE_DEVICE)
#define NM_DEVICE_GENERIC_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_GENERIC, NMDeviceGenericPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
char *type_description;
} NMDeviceGenericPrivate;
@@ -148,23 +146,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_generic_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_GENERIC);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_GENERIC,
property_info);
}
static void
-dispose (GObject *object)
-{
- NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_device_generic_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMDeviceGenericPrivate *priv = NM_DEVICE_GENERIC_GET_PRIVATE (object);
@@ -205,7 +192,8 @@ nm_device_generic_class_init (NMDeviceGenericClass *klass)
g_type_class_add_private (klass, sizeof (NMDeviceGenericPrivate));
- object_class->dispose = dispose;
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_GENERIC);
+
object_class->finalize = finalize;
object_class->get_property = get_property;
diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c
index 478c6e8c18..10ee1140d4 100644
--- a/libnm/nm-device-infiniband.c
+++ b/libnm/nm-device-infiniband.c
@@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMDeviceInfiniband, nm_device_infiniband, NM_TYPE_DEVICE)
#define NM_DEVICE_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_INFINIBAND, NMDeviceInfinibandPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
gboolean carrier;
} NMDeviceInfinibandPrivate;
@@ -175,23 +173,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_infiniband_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_INFINIBAND);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_INFINIBAND,
property_info);
}
static void
-dispose (GObject *object)
-{
- NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_device_infiniband_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMDeviceInfinibandPrivate *priv = NM_DEVICE_INFINIBAND_GET_PRIVATE (object);
@@ -231,8 +218,9 @@ nm_device_infiniband_class_init (NMDeviceInfinibandClass *ib_class)
g_type_class_add_private (ib_class, sizeof (NMDeviceInfinibandPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_INFINIBAND);
+
/* virtual methods */
- object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c
index 511f084bba..4983864cb4 100644
--- a/libnm/nm-device-modem.c
+++ b/libnm/nm-device-modem.c
@@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE)
#define NM_DEVICE_MODEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_MODEM, NMDeviceModemPrivate))
typedef struct {
- DBusGProxy *proxy;
-
NMDeviceModemCapabilities caps;
NMDeviceModemCapabilities current_caps;
} NMDeviceModemPrivate;
@@ -195,9 +193,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_modem_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_MODEM);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_MODEM,
property_info);
}
@@ -223,16 +220,6 @@ get_property (GObject *object,
}
static void
-dispose (GObject *object)
-{
- NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_device_modem_parent_class)->dispose (object);
-}
-
-static void
nm_device_modem_class_init (NMDeviceModemClass *modem_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (modem_class);
@@ -241,9 +228,10 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class)
g_type_class_add_private (modem_class, sizeof (NMDeviceModemPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_MODEM);
+
/* virtual methods */
object_class->get_property = get_property;
- object_class->dispose = dispose;
nm_object_class->init_dbus = init_dbus;
diff --git a/libnm/nm-device-olpc-mesh.c b/libnm/nm-device-olpc-mesh.c
index b8c2c25cca..ba139a2d43 100644
--- a/libnm/nm-device-olpc-mesh.c
+++ b/libnm/nm-device-olpc-mesh.c
@@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMDeviceOlpcMesh, nm_device_olpc_mesh, NM_TYPE_DEVICE)
#define NM_DEVICE_OLPC_MESH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_OLPC_MESH, NMDeviceOlpcMeshPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
NMDeviceWifi *companion;
guint32 active_channel;
@@ -178,9 +176,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_OLPC_MESH);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_OLPC_MESH,
property_info);
}
@@ -190,7 +187,6 @@ dispose (GObject *object)
NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (object);
g_clear_object (&priv->companion);
- g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class)->dispose (object);
}
@@ -238,6 +234,8 @@ nm_device_olpc_mesh_class_init (NMDeviceOlpcMeshClass *olpc_mesh_class)
g_type_class_add_private (olpc_mesh_class, sizeof (NMDeviceOlpcMeshPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_OLPC_MESH);
+
/* virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
diff --git a/libnm/nm-device-team.c b/libnm/nm-device-team.c
index 27deda8a5a..06db4cf84a 100644
--- a/libnm/nm-device-team.c
+++ b/libnm/nm-device-team.c
@@ -37,8 +37,6 @@ G_DEFINE_TYPE (NMDeviceTeam, nm_device_team, NM_TYPE_DEVICE)
#define NM_DEVICE_TEAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_TEAM, NMDeviceTeamPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
gboolean carrier;
GPtrArray *slaves;
@@ -191,9 +189,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_team_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_TEAM);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_TEAM,
property_info);
}
@@ -202,8 +199,6 @@ dispose (GObject *object)
{
NMDeviceTeamPrivate *priv = NM_DEVICE_TEAM_GET_PRIVATE (object);
- g_clear_object (&priv->proxy);
-
g_clear_pointer (&priv->slaves, g_ptr_array_unref);
G_OBJECT_CLASS (nm_device_team_parent_class)->dispose (object);
@@ -252,6 +247,8 @@ nm_device_team_class_init (NMDeviceTeamClass *team_class)
g_type_class_add_private (team_class, sizeof (NMDeviceTeamPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_TEAM);
+
/* virtual methods */
object_class->dispose = dispose;
object_class->finalize = finalize;
diff --git a/libnm/nm-device-vlan.c b/libnm/nm-device-vlan.c
index b0deb1b089..9cb9d9fde1 100644
--- a/libnm/nm-device-vlan.c
+++ b/libnm/nm-device-vlan.c
@@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE)
#define NM_DEVICE_VLAN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_VLAN, NMDeviceVlanPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
gboolean carrier;
guint vlan_id;
@@ -205,23 +203,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_vlan_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_VLAN);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_VLAN,
property_info);
}
static void
-dispose (GObject *object)
-{
- NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_device_vlan_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (object);
@@ -264,8 +251,9 @@ nm_device_vlan_class_init (NMDeviceVlanClass *vlan_class)
g_type_class_add_private (vlan_class, sizeof (NMDeviceVlanPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_VLAN);
+
/* virtual methods */
- object_class->dispose = dispose;
object_class->finalize = finalize;
object_class->get_property = get_property;
diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c
index 7252672f2d..045811aad0 100644
--- a/libnm/nm-device-wifi.c
+++ b/libnm/nm-device-wifi.c
@@ -594,9 +594,9 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_wifi_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_WIRELESS);
+ priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_DEVICE_WIRELESS);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_WIRELESS,
property_info);
}
@@ -638,7 +638,6 @@ dispose (GObject *object)
if (priv->aps)
clean_up_aps (NM_DEVICE_WIFI (object), TRUE);
- g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object);
}
@@ -663,6 +662,8 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class)
g_type_class_add_private (wifi_class, sizeof (NMDeviceWifiPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIRELESS);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->dispose = dispose;
diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c
index fc5793acb2..4759ab8329 100644
--- a/libnm/nm-device-wimax.c
+++ b/libnm/nm-device-wimax.c
@@ -43,8 +43,6 @@ void _nm_device_wimax_set_wireless_enabled (NMDeviceWimax *wimax, gboolean enabl
static void state_changed_cb (NMDevice *device, GParamSpec *pspec, gpointer user_data);
typedef struct {
- DBusGProxy *proxy;
-
char *hw_address;
NMWimaxNsp *active_nsp;
GPtrArray *nsps;
@@ -495,9 +493,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_wimax_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE_WIMAX);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE_WIMAX,
property_info);
}
@@ -530,7 +527,6 @@ dispose (GObject *object)
if (priv->nsps)
clean_up_nsps (NM_DEVICE_WIMAX (object));
- g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_device_wimax_parent_class)->dispose (object);
}
@@ -544,6 +540,8 @@ nm_device_wimax_class_init (NMDeviceWimaxClass *wimax_class)
g_type_class_add_private (wimax_class, sizeof (NMDeviceWimaxPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE_WIMAX);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->dispose = dispose;
diff --git a/libnm/nm-device.c b/libnm/nm-device.c
index 6d4cf0c128..25d7298f85 100644
--- a/libnm/nm-device.c
+++ b/libnm/nm-device.c
@@ -222,9 +222,9 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_device_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DEVICE);
+ priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_DEVICE);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DEVICE,
property_info);
dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
@@ -367,7 +367,6 @@ dispose (GObject *object)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (object);
- g_clear_object (&priv->proxy);
g_clear_object (&priv->ip4_config);
g_clear_object (&priv->dhcp4_config);
g_clear_object (&priv->ip6_config);
@@ -521,6 +520,8 @@ nm_device_class_init (NMDeviceClass *device_class)
g_type_class_add_private (device_class, sizeof (NMDevicePrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DEVICE);
+
/* virtual methods */
object_class->constructed = constructed;
object_class->get_property = get_property;
diff --git a/libnm/nm-dhcp4-config.c b/libnm/nm-dhcp4-config.c
index 0782b23736..bbbac64226 100644
--- a/libnm/nm-dhcp4-config.c
+++ b/libnm/nm-dhcp4-config.c
@@ -31,8 +31,6 @@ G_DEFINE_TYPE (NMDhcp4Config, nm_dhcp4_config, NM_TYPE_OBJECT)
#define NM_DHCP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP4_CONFIG, NMDhcp4ConfigPrivate))
typedef struct {
- DBusGProxy *proxy;
-
GHashTable *options;
} NMDhcp4ConfigPrivate;
@@ -84,9 +82,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_dhcp4_config_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DHCP4_CONFIG);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DHCP4_CONFIG,
property_info);
}
@@ -98,8 +95,6 @@ finalize (GObject *object)
if (priv->options)
g_hash_table_destroy (priv->options);
- g_object_unref (priv->proxy);
-
G_OBJECT_CLASS (nm_dhcp4_config_parent_class)->finalize (object);
}
@@ -129,6 +124,8 @@ nm_dhcp4_config_class_init (NMDhcp4ConfigClass *config_class)
g_type_class_add_private (config_class, sizeof (NMDhcp4ConfigPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP4_CONFIG);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
diff --git a/libnm/nm-dhcp6-config.c b/libnm/nm-dhcp6-config.c
index ffabb809e0..cf4365bebc 100644
--- a/libnm/nm-dhcp6-config.c
+++ b/libnm/nm-dhcp6-config.c
@@ -31,8 +31,6 @@ G_DEFINE_TYPE (NMDhcp6Config, nm_dhcp6_config, NM_TYPE_OBJECT)
#define NM_DHCP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP6_CONFIG, NMDhcp6ConfigPrivate))
typedef struct {
- DBusGProxy *proxy;
-
GHashTable *options;
} NMDhcp6ConfigPrivate;
@@ -84,9 +82,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_dhcp6_config_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_DHCP6_CONFIG);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_DHCP6_CONFIG,
property_info);
}
@@ -98,8 +95,6 @@ finalize (GObject *object)
if (priv->options)
g_hash_table_destroy (priv->options);
- g_object_unref (priv->proxy);
-
G_OBJECT_CLASS (nm_dhcp6_config_parent_class)->finalize (object);
}
@@ -129,6 +124,8 @@ nm_dhcp6_config_class_init (NMDhcp6ConfigClass *config_class)
g_type_class_add_private (config_class, sizeof (NMDhcp6ConfigPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_DHCP6_CONFIG);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
diff --git a/libnm/nm-ip4-config.c b/libnm/nm-ip4-config.c
index 77937c4699..a6890a4e74 100644
--- a/libnm/nm-ip4-config.c
+++ b/libnm/nm-ip4-config.c
@@ -33,8 +33,6 @@ G_DEFINE_TYPE (NMIP4Config, nm_ip4_config, NM_TYPE_OBJECT)
#define NM_IP4_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP4_CONFIG, NMIP4ConfigPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *gateway;
GSList *addresses;
GSList *routes;
@@ -143,9 +141,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_ip4_config_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_IP4_CONFIG);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_IP4_CONFIG,
property_info);
}
@@ -164,8 +161,6 @@ finalize (GObject *object)
g_strfreev (priv->searches);
g_strfreev (priv->wins);
- g_object_unref (priv->proxy);
-
G_OBJECT_CLASS (nm_ip4_config_parent_class)->finalize (object);
}
@@ -218,6 +213,8 @@ nm_ip4_config_class_init (NMIP4ConfigClass *config_class)
g_type_class_add_private (config_class, sizeof (NMIP4ConfigPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_IP4_CONFIG);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
diff --git a/libnm/nm-ip6-config.c b/libnm/nm-ip6-config.c
index 58cd42153b..e78ecee9a6 100644
--- a/libnm/nm-ip6-config.c
+++ b/libnm/nm-ip6-config.c
@@ -34,8 +34,6 @@ G_DEFINE_TYPE (NMIP6Config, nm_ip6_config, NM_TYPE_OBJECT)
#define NM_IP6_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_IP6_CONFIG, NMIP6ConfigPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *gateway;
GSList *addresses;
GSList *routes;
@@ -130,9 +128,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_ip6_config_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_IP6_CONFIG);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_IP6_CONFIG,
property_info);
}
@@ -252,8 +249,6 @@ finalize (GObject *object)
g_strfreev (priv->domains);
g_strfreev (priv->searches);
- g_object_unref (priv->proxy);
-
G_OBJECT_CLASS (nm_ip6_config_parent_class)->finalize (object);
}
@@ -313,6 +308,8 @@ nm_ip6_config_class_init (NMIP6ConfigClass *config_class)
g_type_class_add_private (config_class, sizeof (NMIP6ConfigPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_IP6_CONFIG);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
diff --git a/libnm/nm-object-private.h b/libnm/nm-object-private.h
index 111dc96b11..f8e70d389a 100644
--- a/libnm/nm-object-private.h
+++ b/libnm/nm-object-private.h
@@ -36,12 +36,8 @@ typedef struct {
const char *signal_prefix;
} NMPropertiesInfo;
-DBusGProxy *_nm_object_new_proxy (NMObject *self,
- const char *path,
- const char *interface);
-
void _nm_object_register_properties (NMObject *object,
- DBusGProxy *proxy,
+ const char *interface,
const NMPropertiesInfo *info);
gboolean _nm_object_reload_properties (NMObject *object, GError **error);
@@ -79,4 +75,9 @@ void _nm_object_register_type_func (GType base_type, NMObjectTypeFunc type_func,
#define NM_OBJECT_NM_RUNNING "nm-running-internal"
gboolean _nm_object_get_nm_running (NMObject *self);
+void _nm_object_class_add_interface (NMObjectClass *object_class,
+ const char *interface);
+DBusGProxy *_nm_object_get_proxy (NMObject *object,
+ const char *interface);
+
#endif /* __NM_OBJECT_PRIVATE_H__ */
diff --git a/libnm/nm-object.c b/libnm/nm-object.c
index 23e01df75f..2bd9707d9a 100644
--- a/libnm/nm-object.c
+++ b/libnm/nm-object.c
@@ -41,9 +41,16 @@ static void nm_object_async_initable_iface_init (GAsyncInitableIface *iface);
static GHashTable *type_funcs, *type_async_funcs;
+typedef struct {
+ GSList *interfaces;
+} NMObjectClassPrivate;
+
+#define NM_OBJECT_CLASS_GET_PRIVATE(k) (G_TYPE_CLASS_GET_PRIVATE ((k), NM_TYPE_OBJECT, NMObjectClassPrivate))
+
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMObject, nm_object, G_TYPE_OBJECT,
type_funcs = g_hash_table_new (NULL, NULL);
type_async_funcs = g_hash_table_new (NULL, NULL);
+ g_type_add_class_private (g_define_type_id, sizeof (NMObjectClassPrivate));
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_object_initable_iface_init);
G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, nm_object_async_initable_iface_init);
)
@@ -65,8 +72,8 @@ typedef struct {
gboolean nm_running;
char *path;
+ GHashTable *proxies;
DBusGProxy *properties_proxy;
- GSList *property_interfaces;
GSList *property_tables;
NMObject *parent;
gboolean suppress_property_updates;
@@ -136,6 +143,9 @@ proxy_name_owner_changed (DBusGProxy *proxy,
static void
nm_object_init (NMObject *object)
{
+ NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+
+ priv->proxies = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);
}
static gboolean
@@ -158,8 +168,18 @@ static void
init_dbus (NMObject *object)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ NMObjectClassPrivate *cpriv = NM_OBJECT_CLASS_GET_PRIVATE (NM_OBJECT_GET_CLASS (object));
+ GSList *iter;
- priv->properties_proxy = _nm_object_new_proxy (object, NULL, DBUS_INTERFACE_PROPERTIES);
+ for (iter = cpriv->interfaces; iter; iter = iter->next) {
+ const char *interface = iter->data;
+ DBusGProxy *proxy;
+
+ proxy = _nm_dbus_new_proxy_for_connection (priv->connection, priv->path, interface);
+ g_hash_table_insert (priv->proxies, (char *) interface, proxy);
+ }
+
+ priv->properties_proxy = _nm_dbus_new_proxy_for_connection (priv->connection, priv->path, DBUS_INTERFACE_PROPERTIES);
if (_nm_dbus_is_connection_private (priv->connection))
priv->nm_running = TRUE;
@@ -314,9 +334,7 @@ dispose (GObject *object)
g_slist_free_full (priv->notify_props, g_free);
priv->notify_props = NULL;
- g_slist_free_full (priv->property_interfaces, g_free);
- priv->property_interfaces = NULL;
-
+ g_clear_pointer (&priv->proxies, g_hash_table_unref);
g_clear_object (&priv->properties_proxy);
g_clear_object (&priv->bus_proxy);
@@ -454,6 +472,28 @@ nm_object_async_initable_iface_init (GAsyncInitableIface *iface)
}
/**
+ * _nm_object_class_add_interface:
+ * @object_class: an #NMObjectClass
+ * @interface: a D-Bus interface name
+ *
+ * Registers that @object_class implements @interface. A proxy for that
+ * interface will automatically be created at construction time, and can
+ * be retrieved with _nm_object_get_proxy().
+ */
+void
+_nm_object_class_add_interface (NMObjectClass *object_class,
+ const char *interface)
+{
+ NMObjectClassPrivate *cpriv;
+
+ g_return_if_fail (NM_IS_OBJECT_CLASS (object_class));
+
+ cpriv = NM_OBJECT_CLASS_GET_PRIVATE (object_class);
+
+ cpriv->interfaces = g_slist_prepend (cpriv->interfaces, g_strdup (interface));
+}
+
+/**
* nm_object_get_path:
* @object: a #NMObject
*
@@ -470,6 +510,28 @@ nm_object_get_path (NMObject *object)
return NM_OBJECT_GET_PRIVATE (object)->path;
}
+/**
+ * _nm_object_get_proxy:
+ * @object: an #NMObject
+ * @interface: a D-Bus interface implemented by @object
+ *
+ * Gets the D-Bus proxy for @interface on @object.
+ *
+ * Returns: (transfer none): a D-Bus proxy
+ */
+DBusGProxy *
+_nm_object_get_proxy (NMObject *object,
+ const char *interface)
+{
+ DBusGProxy *proxy;
+
+ g_return_val_if_fail (NM_IS_OBJECT (object), NULL);
+
+ proxy = g_hash_table_lookup (NM_OBJECT_GET_PRIVATE (object)->proxies, interface);
+ g_return_val_if_fail (proxy != NULL, NULL);
+ return proxy;
+}
+
static gboolean
deferred_notify_cb (gpointer data)
{
@@ -1147,17 +1209,18 @@ done:
void
_nm_object_register_properties (NMObject *object,
- DBusGProxy *proxy,
+ const char *interface,
const NMPropertiesInfo *info)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
+ DBusGProxy *proxy;
static gsize dval = 0;
const char *debugstr;
NMPropertiesInfo *tmp;
GHashTable *instance;
g_return_if_fail (NM_IS_OBJECT (object));
- g_return_if_fail (proxy != NULL);
+ g_return_if_fail (interface != NULL);
g_return_if_fail (info != NULL);
if (g_once_init_enter (&dval)) {
@@ -1167,8 +1230,8 @@ _nm_object_register_properties (NMObject *object,
g_once_init_leave (&dval, 1);
}
- priv->property_interfaces = g_slist_prepend (priv->property_interfaces,
- g_strdup (dbus_g_proxy_get_interface (proxy)));
+ proxy = _nm_object_get_proxy (object, interface);
+ g_return_if_fail (proxy != NULL);
dbus_g_proxy_add_signal (proxy, "PropertiesChanged", DBUS_TYPE_G_MAP_OF_VARIANT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal (proxy,
@@ -1202,14 +1265,17 @@ _nm_object_reload_properties (NMObject *object, GError **error)
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
GHashTable *props = NULL;
- GSList *p;
+ GHashTableIter iter;
+ const char *interface;
+ DBusGProxy *proxy;
- if (!priv->property_interfaces || !priv->nm_running)
+ if (!g_hash_table_size (priv->proxies) || !priv->nm_running)
return TRUE;
- for (p = priv->property_interfaces; p; p = p->next) {
+ g_hash_table_iter_init (&iter, priv->proxies);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &interface, (gpointer *) &proxy)) {
if (!dbus_g_proxy_call (priv->properties_proxy, "GetAll", error,
- G_TYPE_STRING, p->data,
+ G_TYPE_STRING, interface,
G_TYPE_INVALID,
DBUS_TYPE_G_MAP_OF_VARIANT, &props,
G_TYPE_INVALID))
@@ -1352,12 +1418,14 @@ _nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callba
{
NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object);
GSimpleAsyncResult *simple;
- GSList *p;
+ GHashTableIter iter;
+ const char *interface;
+ DBusGProxy *proxy;
simple = g_simple_async_result_new (G_OBJECT (object), callback,
user_data, _nm_object_reload_properties_async);
- if (!priv->property_interfaces) {
+ if (!g_hash_table_size (priv->proxies)) {
g_simple_async_result_complete_in_idle (simple);
g_object_unref (simple);
return;
@@ -1372,11 +1440,12 @@ _nm_object_reload_properties_async (NMObject *object, GAsyncReadyCallback callba
if (priv->reload_results->next)
return;
- for (p = priv->property_interfaces; p; p = p->next) {
+ g_hash_table_iter_init (&iter, priv->proxies);
+ while (g_hash_table_iter_next (&iter, (gpointer *) &interface, (gpointer *) &proxy)) {
priv->reload_remaining++;
dbus_g_proxy_begin_call (priv->properties_proxy, "GetAll",
reload_got_properties, object, NULL,
- G_TYPE_STRING, p->data,
+ G_TYPE_STRING, interface,
G_TYPE_INVALID);
}
}
@@ -1396,14 +1465,6 @@ _nm_object_reload_properties_finish (NMObject *object, GAsyncResult *result, GEr
return g_simple_async_result_get_op_res_gboolean (simple);
}
-DBusGProxy *
-_nm_object_new_proxy (NMObject *self, const char *path, const char *interface)
-{
- NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (self);
-
- return _nm_dbus_new_proxy_for_connection (priv->connection, path ? path : priv->path, interface);
-}
-
gboolean
_nm_object_get_nm_running (NMObject *self)
{
diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c
index e16322b837..7c78ef01ed 100644
--- a/libnm/nm-remote-connection.c
+++ b/libnm/nm-remote-connection.c
@@ -503,12 +503,12 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_remote_connection_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
+ priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
g_assert (priv->proxy);
dbus_g_proxy_set_default_timeout (priv->proxy, G_MAXINT);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
property_info);
dbus_g_proxy_add_signal (priv->proxy, "Updated", G_TYPE_INVALID);
@@ -665,7 +665,7 @@ dispose (GObject *object)
if (priv->proxy) {
g_signal_handlers_disconnect_by_func (priv->proxy, proxy_destroy_cb, object);
- g_clear_object (&priv->proxy);
+ priv->proxy = NULL;
}
G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object);
@@ -679,6 +679,8 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class)
g_type_class_add_private (object_class, sizeof (NMRemoteConnectionPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS_CONNECTION);
+
/* virtual methods */
object_class->constructed = constructed;
object_class->get_property = get_property;
diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c
index 8c570f2062..371b8f20b4 100644
--- a/libnm/nm-remote-settings.c
+++ b/libnm/nm-remote-settings.c
@@ -860,11 +860,9 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_remote_settings_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object,
- NM_DBUS_PATH_SETTINGS,
- NM_DBUS_INTERFACE_SETTINGS);
+ priv->proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_SETTINGS,
property_info);
g_signal_connect (object, "notify::" NM_OBJECT_NM_RUNNING,
@@ -919,7 +917,6 @@ dispose (GObject *object)
g_clear_pointer (&priv->visible_connections, g_ptr_array_unref);
g_clear_pointer (&priv->hostname, g_free);
- g_clear_object (&priv->proxy);
G_OBJECT_CLASS (nm_remote_settings_parent_class)->dispose (object);
}
@@ -957,6 +954,8 @@ nm_remote_settings_class_init (NMRemoteSettingsClass *class)
g_type_class_add_private (class, sizeof (NMRemoteSettingsPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_SETTINGS);
+
/* Virtual methods */
object_class->constructor = constructor;
object_class->get_property = get_property;
diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c
index fc3d8c81c1..e9966a74be 100644
--- a/libnm/nm-vpn-connection.c
+++ b/libnm/nm-vpn-connection.c
@@ -31,7 +31,6 @@ G_DEFINE_TYPE (NMVpnConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
#define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVpnConnectionPrivate))
typedef struct {
- DBusGProxy *proxy;
char *banner;
NMVpnConnectionState vpn_state;
} NMVpnConnectionPrivate;
@@ -128,20 +127,21 @@ init_dbus (NMObject *object)
{ NM_VPN_CONNECTION_VPN_STATE, &priv->vpn_state },
{ NULL },
};
+ DBusGProxy *proxy;
NM_OBJECT_CLASS (nm_vpn_connection_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_VPN_CONNECTION);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_VPN_CONNECTION,
property_info);
+ proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_VPN_CONNECTION);
dbus_g_object_register_marshaller (g_cclosure_marshal_generic,
G_TYPE_NONE,
G_TYPE_UINT, G_TYPE_UINT,
G_TYPE_INVALID);
- dbus_g_proxy_add_signal (priv->proxy, "VpnStateChanged", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (priv->proxy,
+ dbus_g_proxy_add_signal (proxy, "VpnStateChanged", G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (proxy,
"VpnStateChanged",
G_CALLBACK (vpn_state_changed_proxy),
object,
@@ -154,7 +154,6 @@ finalize (GObject *object)
NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
g_free (priv->banner);
- g_object_unref (priv->proxy);
G_OBJECT_CLASS (nm_vpn_connection_parent_class)->finalize (object);
}
@@ -188,6 +187,8 @@ nm_vpn_connection_class_init (NMVpnConnectionClass *connection_class)
g_type_class_add_private (connection_class, sizeof (NMVpnConnectionPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_VPN_CONNECTION);
+
/* virtual methods */
object_class->get_property = get_property;
object_class->finalize = finalize;
diff --git a/libnm/nm-wimax-nsp.c b/libnm/nm-wimax-nsp.c
index e4617ad677..57170893be 100644
--- a/libnm/nm-wimax-nsp.c
+++ b/libnm/nm-wimax-nsp.c
@@ -36,8 +36,6 @@ G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, NM_TYPE_OBJECT)
#define NM_WIMAX_NSP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_WIMAX_NSP, NMWimaxNspPrivate))
typedef struct {
- DBusGProxy *proxy;
-
char *name;
guint32 signal_quality;
NMWimaxNspNetworkType network_type;
@@ -183,16 +181,6 @@ nm_wimax_nsp_init (NMWimaxNsp *nsp)
}
static void
-dispose (GObject *object)
-{
- NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
-
- g_clear_object (&priv->proxy);
-
- G_OBJECT_CLASS (nm_wimax_nsp_parent_class)->dispose (object);
-}
-
-static void
finalize (GObject *object)
{
NMWimaxNspPrivate *priv = NM_WIMAX_NSP_GET_PRIVATE (object);
@@ -239,9 +227,8 @@ init_dbus (NMObject *object)
NM_OBJECT_CLASS (nm_wimax_nsp_parent_class)->init_dbus (object);
- priv->proxy = _nm_object_new_proxy (object, NULL, NM_DBUS_INTERFACE_WIMAX_NSP);
_nm_object_register_properties (object,
- priv->proxy,
+ NM_DBUS_INTERFACE_WIMAX_NSP,
property_info);
}
@@ -253,9 +240,10 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class)
g_type_class_add_private (nsp_class, sizeof (NMWimaxNspPrivate));
+ _nm_object_class_add_interface (nm_object_class, NM_DBUS_INTERFACE_WIMAX_NSP);
+
/* virtual methods */
object_class->get_property = get_property;
- object_class->dispose = dispose;
object_class->finalize = finalize;
nm_object_class->init_dbus = init_dbus;