summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@redhat.com>2015-03-27 08:03:22 -0400
committerDan Winship <danw@redhat.com>2015-04-02 10:06:13 -0400
commit5414cbeb22e4101f5d684c70709ef42a7caffc42 (patch)
tree01b77c4690a1d1694768e0dd798d46587ec6233e
parent85b072447920dc62b95fc03f92251c25dceba6a8 (diff)
downloadNetworkManager-5414cbeb22e4101f5d684c70709ef42a7caffc42.tar.gz
libnm, core: use _nm_dbus_signal_connect()
-rw-r--r--libnm/nm-object.c20
-rw-r--r--src/devices/bluetooth/nm-bluez-device.c21
-rw-r--r--src/devices/bluetooth/nm-bluez5-manager.c53
-rw-r--r--src/nm-auth-manager.c27
-rw-r--r--src/nm-sleep-monitor-systemd.c17
-rw-r--r--src/supplicant-manager/nm-supplicant-interface.c81
-rw-r--r--src/vpn-manager/nm-vpn-connection.c109
7 files changed, 175 insertions, 153 deletions
diff --git a/libnm/nm-object.c b/libnm/nm-object.c
index 5504efbe53..f58c96ed3b 100644
--- a/libnm/nm-object.c
+++ b/libnm/nm-object.c
@@ -34,6 +34,7 @@
#include "nm-glib-compat.h"
#include "nm-dbus-helpers.h"
#include "nm-client.h"
+#include "nm-core-internal.h"
static gboolean debug = FALSE;
#define dbgmsg(f,...) if (G_UNLIKELY (debug)) { g_message (f, ## __VA_ARGS__ ); }
@@ -961,20 +962,11 @@ process_properties_changed (NMObject *self, GVariant *properties, gboolean synch
}
static void
-property_proxy_signal (GDBusProxy *proxy,
- const char *sender_name,
- const char *signal_name,
- GVariant *parameters,
- gpointer user_data)
+properties_changed (GDBusProxy *proxy,
+ GVariant *properties,
+ gpointer user_data)
{
- GVariant *properties;
-
- if (strcmp (signal_name, "PropertiesChanged") != 0)
- return;
-
- g_variant_get (parameters, "(@a{sv})", &properties);
process_properties_changed (NM_OBJECT (user_data), properties, FALSE);
- g_variant_unref (properties);
}
#define HANDLE_TYPE(vtype, ctype, getter) \
@@ -1117,8 +1109,8 @@ _nm_object_register_properties (NMObject *object,
proxy = _nm_object_get_proxy (object, interface);
g_return_if_fail (proxy != NULL);
- g_signal_connect (proxy, "g-signal",
- G_CALLBACK (property_proxy_signal), object);
+ _nm_dbus_signal_connect (proxy, "PropertiesChanged", G_VARIANT_TYPE ("(a{sv})"),
+ G_CALLBACK (properties_changed), object);
instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
priv->property_tables = g_slist_prepend (priv->property_tables, instance);
diff --git a/src/devices/bluetooth/nm-bluez-device.c b/src/devices/bluetooth/nm-bluez-device.c
index fe1a97bbab..fa699f7217 100644
--- a/src/devices/bluetooth/nm-bluez-device.c
+++ b/src/devices/bluetooth/nm-bluez-device.c
@@ -864,21 +864,14 @@ properties_changed (GDBusProxy *proxy,
static void
bluez4_property_changed (GDBusProxy *proxy,
- const char *sender,
- const char *signal_name,
- GVariant *parameters,
- gpointer user_data)
+ const char *property,
+ GVariant *v,
+ gpointer user_data)
{
NMBluezDevice *self = NM_BLUEZ_DEVICE (user_data);
- if (g_strcmp0 (signal_name, "PropertyChanged") == 0) {
- const char *property = NULL;
- GVariant *v = NULL;
-
- g_variant_get (parameters, "(&sv)", &property, &v);
- _take_one_variant_property (self, property, v);
- check_emit_usable (self);
- }
+ _take_one_variant_property (self, property, v);
+ check_emit_usable (self);
}
static void
@@ -985,8 +978,8 @@ on_proxy_acquired (GObject *object, GAsyncResult *res, NMBluezDevice *self)
G_CALLBACK (properties_changed), self);
if (priv->bluez_version == 4) {
/* Watch for custom Bluez4 PropertyChanged signals */
- g_signal_connect (priv->proxy, "g-signal",
- G_CALLBACK (bluez4_property_changed), self);
+ _nm_dbus_signal_connect (priv->proxy, "PropertyChanged", G_VARIANT_TYPE ("(sv)"),
+ G_CALLBACK (bluez4_property_changed), self);
}
query_properties (self);
diff --git a/src/devices/bluetooth/nm-bluez5-manager.c b/src/devices/bluetooth/nm-bluez5-manager.c
index b856852397..7b392d8575 100644
--- a/src/devices/bluetooth/nm-bluez5-manager.c
+++ b/src/devices/bluetooth/nm-bluez5-manager.c
@@ -34,6 +34,7 @@
#include "nm-bluez-common.h"
#include "nm-dbus-manager.h"
+#include "nm-core-internal.h"
typedef struct {
NMDBusManager *dbus_mgr;
@@ -170,39 +171,23 @@ device_removed (GDBusProxy *proxy, const gchar *path, NMBluez5Manager *self)
}
static void
-object_manager_g_signal (GDBusProxy *proxy,
- gchar *sender_name,
- gchar *signal_name,
- GVariant *parameters,
- NMBluez5Manager *self)
+object_manager_interfaces_added (GDBusProxy *proxy,
+ const char *path,
+ GVariant *dict,
+ NMBluez5Manager *self)
{
- GVariant *variant;
- const gchar *path;
-
- if (!strcmp (signal_name, "InterfacesRemoved")) {
- const gchar **ifaces;
- gsize i, length;
-
- g_variant_get (parameters, "(&o*)", &path, &variant);
-
- ifaces = g_variant_get_strv (variant, &length);
-
- for (i = 0; i < length; i++) {
- if (!strcmp (ifaces[i], BLUEZ5_DEVICE_INTERFACE)) {
- device_removed (proxy, path, self);
- break;
- }
- }
-
- g_free (ifaces);
-
- } else if (!strcmp (signal_name, "InterfacesAdded")) {
- g_variant_get (parameters, "(&o*)", &path, &variant);
+ if (g_variant_lookup (dict, BLUEZ5_DEVICE_INTERFACE, "a{sv}", NULL))
+ device_added (proxy, path, self);
+}
- if (g_variant_lookup_value (variant, BLUEZ5_DEVICE_INTERFACE,
- G_VARIANT_TYPE_DICTIONARY))
- device_added (proxy, path, self);
- }
+static void
+object_manager_interfaces_removed (GDBusProxy *proxy,
+ const char *path,
+ const char **ifaces,
+ NMBluez5Manager *self)
+{
+ if (_nm_utils_string_in_list (BLUEZ5_DEVICE_INTERFACE, ifaces))
+ device_removed (proxy, path, self);
}
static void
@@ -264,8 +249,10 @@ on_proxy_acquired (GObject *object,
(GAsyncReadyCallback) get_managed_objects_cb,
self);
- g_signal_connect (priv->proxy, "g-signal",
- G_CALLBACK (object_manager_g_signal), self);
+ _nm_dbus_signal_connect (priv->proxy, "InterfacesAdded", G_VARIANT_TYPE ("(oa{sa{sv}})"),
+ G_CALLBACK (object_manager_interfaces_added), self);
+ _nm_dbus_signal_connect (priv->proxy, "InterfacesRemoved", G_VARIANT_TYPE ("(oas)"),
+ G_CALLBACK (object_manager_interfaces_removed), self);
}
static void
diff --git a/src/nm-auth-manager.c b/src/nm-auth-manager.c
index c1b352c92c..6df227901c 100644
--- a/src/nm-auth-manager.c
+++ b/src/nm-auth-manager.c
@@ -24,6 +24,7 @@
#include "nm-logging.h"
#include "nm-errors.h"
+#include "nm-core-internal.h"
#define POLKIT_SERVICE "org.freedesktop.PolicyKit1"
#define POLKIT_OBJECT_PATH "/org/freedesktop/PolicyKit1/Authority"
@@ -394,21 +395,16 @@ _dbus_on_name_owner_notify_cb (GObject *object,
}
static void
-_dbus_on_g_signal_cb (GDBusProxy *proxy,
- const gchar *sender_name,
- const gchar *signal_name,
- GVariant *parameters,
- gpointer user_data)
+_dbus_on_changed_signal_cb (GDBusProxy *proxy,
+ gpointer user_data)
{
NMAuthManager *self = user_data;
NMAuthManagerPrivate *priv = NM_AUTH_MANAGER_GET_PRIVATE (self);
g_return_if_fail (priv->proxy == proxy);
- _LOGD ("dbus signal: \"%s\"", signal_name ? signal_name : "(null)");
-
- if (g_strcmp0 (signal_name, "Changed") == 0)
- _emit_changed_signal (self);
+ _LOGD ("dbus signal: \"Changed\"");
+ _emit_changed_signal (self);
}
static void
@@ -463,10 +459,9 @@ _dbus_new_proxy_cb (GObject *source_object,
"notify::g-name-owner",
G_CALLBACK (_dbus_on_name_owner_notify_cb),
self);
- g_signal_connect (priv->proxy,
- "g-signal",
- G_CALLBACK (_dbus_on_g_signal_cb),
- self);
+ _nm_dbus_signal_connect (priv->proxy, "Changed", NULL,
+ G_CALLBACK (_dbus_on_changed_signal_cb),
+ self);
_log_name_owner (self, NULL);
@@ -603,11 +598,7 @@ dispose (GObject *object)
g_clear_object (&priv->new_proxy_cancellable);
}
- if (priv->proxy) {
- g_signal_handlers_disconnect_by_func (priv->proxy, _dbus_on_name_owner_notify_cb, self);
- g_signal_handlers_disconnect_by_func (priv->proxy, _dbus_on_g_signal_cb, self);
- g_clear_object (&priv->proxy);
- }
+ g_clear_object (&priv->proxy);
#endif
G_OBJECT_CLASS (nm_auth_manager_parent_class)->dispose (object);
diff --git a/src/nm-sleep-monitor-systemd.c b/src/nm-sleep-monitor-systemd.c
index 44523a4a21..18c847831e 100644
--- a/src/nm-sleep-monitor-systemd.c
+++ b/src/nm-sleep-monitor-systemd.c
@@ -28,6 +28,7 @@
#include "nm-logging.h"
#include "nm-dbus-manager.h"
+#include "nm-core-internal.h"
#include "nm-sleep-monitor.h"
@@ -123,19 +124,12 @@ take_inhibitor (NMSleepMonitor *self)
}
static void
-signal_cb (GDBusProxy *proxy,
- const gchar *sendername,
- const gchar *signalname,
- GVariant *args,
- gpointer data)
+prepare_for_sleep_cb (GDBusProxy *proxy,
+ gboolean is_about_to_suspend,
+ gpointer data)
{
NMSleepMonitor *self = data;
- gboolean is_about_to_suspend;
- if (strcmp (signalname, "PrepareForSleep") != 0)
- return;
-
- g_variant_get (args, "(b)", &is_about_to_suspend);
nm_log_dbg (LOGD_SUSPEND, "Received PrepareForSleep signal: %d", is_about_to_suspend);
if (is_about_to_suspend) {
@@ -182,7 +176,8 @@ on_proxy_acquired (GObject *object,
}
g_signal_connect (self->sd_proxy, "notify::g-name-owner", G_CALLBACK (name_owner_cb), self);
- g_signal_connect (self->sd_proxy, "g-signal", G_CALLBACK (signal_cb), self);
+ _nm_dbus_signal_connect (self->sd_proxy, "PrepareForSleep", G_VARIANT_TYPE ("(b)"),
+ G_CALLBACK (prepare_for_sleep_cb), self);
owner = g_dbus_proxy_get_name_owner (self->sd_proxy);
if (owner)
diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c
index e9775a199c..dea5948eb5 100644
--- a/src/supplicant-manager/nm-supplicant-interface.c
+++ b/src/supplicant-manager/nm-supplicant-interface.c
@@ -493,41 +493,59 @@ iface_check_ap_mode_cb (GDBusProxy *proxy, GAsyncResult *result, gpointer user_d
iface_check_ready (self);
}
-#define MATCH_SIGNAL(s, n, v, t) (!strcmp (s, n) && g_variant_is_of_type (v, t))
+static void
+wpas_iface_scan_done (GDBusProxy *proxy,
+ gboolean success,
+ gpointer user_data)
+{
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+
+ /* Cache last scan completed time */
+ priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
+
+ g_signal_emit (self, signals[SCAN_DONE], 0, success);
+}
static void
-signal_cb (GDBusProxy *proxy,
- const gchar *sender,
- const gchar *signal,
- GVariant *args,
- gpointer user_data)
+wpas_iface_bss_added (GDBusProxy *proxy,
+ const char *path,
+ GVariant *props,
+ gpointer user_data)
{
NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- const char *path, *field, *message;
- gboolean success;
- if (MATCH_SIGNAL (signal, "ScanDone", args, G_VARIANT_TYPE ("(b)"))) {
- /* Cache last scan completed time */
+ if (priv->scanning)
priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
- g_variant_get (args, "(b)", &success);
- g_signal_emit (self, signals[SCAN_DONE], 0, success);
- } else if (MATCH_SIGNAL (signal, "BSSAdded", args, G_VARIANT_TYPE ("(oa{sv})"))) {
- if (priv->scanning)
- priv->last_scan = nm_utils_get_monotonic_timestamp_s ();
+ handle_new_bss (self, path);
+}
- g_variant_get (args, "(&oa{sv})", &path, NULL);
- handle_new_bss (self, path);
- } else if (MATCH_SIGNAL (signal, "BSSRemoved", args, G_VARIANT_TYPE ("(o)"))) {
- g_variant_get (args, "(&o)", &path);
- g_signal_emit (self, signals[BSS_REMOVED], 0, path);
- g_hash_table_remove (priv->bss_proxies, path);
- } else if (MATCH_SIGNAL (signal, "NetworkRequest", args, G_VARIANT_TYPE ("(oss)"))) {
- g_variant_get (args, "(&o&s&s)", &path, &field, &message);
- if (priv->has_credreq && priv->net_path && !g_strcmp0 (path, priv->net_path))
- g_signal_emit (self, signals[CREDENTIALS_REQUEST], 0, field, message);
- }
+static void
+wpas_iface_bss_removed (GDBusProxy *proxy,
+ const char *path,
+ gpointer user_data)
+{
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+
+ g_signal_emit (self, signals[BSS_REMOVED], 0, path);
+ g_hash_table_remove (priv->bss_proxies, path);
+}
+
+static void
+wpas_iface_network_request (GDBusProxy *proxy,
+ const char *path,
+ const char *field,
+ const char *message,
+ gpointer user_data)
+{
+ NMSupplicantInterface *self = NM_SUPPLICANT_INTERFACE (user_data);
+ NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
+
+ if (priv->has_credreq && priv->net_path && !g_strcmp0 (path, priv->net_path))
+ g_signal_emit (self, signals[CREDENTIALS_REQUEST], 0, field, message);
}
static void
@@ -602,7 +620,14 @@ on_iface_proxy_acquired (GDBusProxy *proxy, GAsyncResult *result, gpointer user_
self = NM_SUPPLICANT_INTERFACE (user_data);
priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (self);
- g_signal_connect (priv->iface_proxy, "g-signal", G_CALLBACK (signal_cb), self);
+ _nm_dbus_signal_connect (priv->iface_proxy, "ScanDone", G_VARIANT_TYPE ("(b)"),
+ G_CALLBACK (wpas_iface_scan_done), self);
+ _nm_dbus_signal_connect (priv->iface_proxy, "BSSAdded", G_VARIANT_TYPE ("(oa{sv})"),
+ G_CALLBACK (wpas_iface_bss_added), self);
+ _nm_dbus_signal_connect (priv->iface_proxy, "BSSRemoved", G_VARIANT_TYPE ("(o)"),
+ G_CALLBACK (wpas_iface_bss_removed), self);
+ _nm_dbus_signal_connect (priv->iface_proxy, "NetworkRequest", G_VARIANT_TYPE ("(oss)"),
+ G_CALLBACK (wpas_iface_network_request), self);
/* Check whether NetworkReply and AP mode are supported */
priv->ready_count = 1;
@@ -1285,8 +1310,6 @@ dispose (GObject *object)
{
NMSupplicantInterfacePrivate *priv = NM_SUPPLICANT_INTERFACE_GET_PRIVATE (object);
- if (priv->iface_proxy)
- g_signal_handlers_disconnect_by_data (priv->iface_proxy, NM_SUPPLICANT_INTERFACE (object));
g_clear_object (&priv->iface_proxy);
if (priv->init_cancellable)
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 57e0e2d215..0060d3f731 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -1580,44 +1580,74 @@ really_activate (NMVpnConnection *self, const char *username)
_set_vpn_state (self, STATE_CONNECT, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);
}
-#define MATCH_SIGNAL(s, n, v, t) (!strcmp (s, n) && g_variant_is_of_type (v, t))
+static void
+failure_cb (GDBusProxy *proxy,
+ guint32 reason,
+ gpointer user_data)
+{
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+
+ plugin_failed (self, reason);
+}
+
+static void
+state_changed_cb (GDBusProxy *proxy,
+ guint32 new_service_state,
+ gpointer user_data)
+{
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+
+ plugin_state_changed (self, new_service_state);
+}
+
+static void
+secrets_required_cb (GDBusProxy *proxy,
+ const char *message,
+ const char **secrets,
+ gpointer user_data)
+{
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+
+ plugin_interactive_secrets_required (self, message, secrets);
+}
static void
-signal_cb (GDBusProxy *proxy,
- const gchar *sender,
- const gchar *signal,
- GVariant *args,
- gpointer user_data)
+config_cb (GDBusProxy *proxy,
+ GVariant *dict,
+ gpointer user_data)
{
NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
- const char *message, **secrets;
- gs_unref_variant GVariant *dict = NULL;
- guint u32;
-
- if (MATCH_SIGNAL (signal, "Failure", args, G_VARIANT_TYPE ("(u)"))) {
- g_variant_get (args, "(u)", &u32);
- plugin_failed (self, u32);
- } else if (MATCH_SIGNAL (signal, "StateChanged", args, G_VARIANT_TYPE ("(u)"))) {
- g_variant_get (args, "(u)", &u32);
- plugin_state_changed (self, u32);
- } else if (MATCH_SIGNAL (signal, "SecretsRequired", args, G_VARIANT_TYPE ("(sas)"))) {
- g_variant_get (args, "(&s^a&s)", &message, &secrets);
- plugin_interactive_secrets_required (self, message, secrets);
- g_free (secrets);
- } else if (priv->vpn_state >= STATE_NEED_AUTH) {
- /* Only list to these signals during and after connection */
- if (MATCH_SIGNAL (signal, "Config", args, G_VARIANT_TYPE ("(a{sv})"))) {
- g_variant_get (args, "(@a{sv})", &dict);
- nm_vpn_connection_config_get (self, dict);
- } else if (MATCH_SIGNAL (signal, "Ip4Config", args, G_VARIANT_TYPE ("(a{sv})"))) {
- g_variant_get (args, "(@a{sv})", &dict);
- nm_vpn_connection_ip4_config_get (self, dict);
- } else if (MATCH_SIGNAL (signal, "Ip6Config", args, G_VARIANT_TYPE ("(a{sv})"))) {
- g_variant_get (args, "(@a{sv})", &dict);
- nm_vpn_connection_ip6_config_get (self, dict);
- }
- }
+
+ /* Only list to this signals during and after connection */
+ if (priv->vpn_state >= STATE_NEED_AUTH)
+ nm_vpn_connection_config_get (self, dict);
+}
+
+static void
+ip4_config_cb (GDBusProxy *proxy,
+ GVariant *dict,
+ gpointer user_data)
+{
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+
+ /* Only list to this signals during and after connection */
+ if (priv->vpn_state >= STATE_NEED_AUTH)
+ nm_vpn_connection_ip4_config_get (self, dict);
+}
+
+static void
+ip6_config_cb (GDBusProxy *proxy,
+ GVariant *dict,
+ gpointer user_data)
+{
+ NMVpnConnection *self = NM_VPN_CONNECTION (user_data);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (self);
+
+ /* Only list to this signals during and after connection */
+ if (priv->vpn_state >= STATE_NEED_AUTH)
+ nm_vpn_connection_ip6_config_get (self, dict);
}
static void
@@ -1648,7 +1678,18 @@ on_proxy_acquired (GObject *object, GAsyncResult *result, gpointer user_data)
}
priv->proxy = proxy;
- g_signal_connect (priv->proxy, "g-signal", G_CALLBACK (signal_cb), self);
+ _nm_dbus_signal_connect (priv->proxy, "Failure", G_VARIANT_TYPE ("(u)"),
+ G_CALLBACK (failure_cb), self);
+ _nm_dbus_signal_connect (priv->proxy, "StateChanged", G_VARIANT_TYPE ("(u)"),
+ G_CALLBACK (state_changed_cb), self);
+ _nm_dbus_signal_connect (priv->proxy, "SecretsRequired", G_VARIANT_TYPE ("(sas)"),
+ G_CALLBACK (secrets_required_cb), self);
+ _nm_dbus_signal_connect (priv->proxy, "Config", G_VARIANT_TYPE ("(a{sv})"),
+ G_CALLBACK (config_cb), self);
+ _nm_dbus_signal_connect (priv->proxy, "Ip4Config", G_VARIANT_TYPE ("(a{sv})"),
+ G_CALLBACK (ip4_config_cb), self);
+ _nm_dbus_signal_connect (priv->proxy, "Ip6Config", G_VARIANT_TYPE ("(a{sv})"),
+ G_CALLBACK (ip6_config_cb), self);
_set_vpn_state (self, STATE_NEED_AUTH, NM_VPN_CONNECTION_STATE_REASON_NONE, FALSE);