summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Crequy <alban.crequy@collabora.co.uk>2012-05-31 16:08:30 +0000
committerRodrigo Moya <rodrigo@gnome-db.org>2012-06-01 13:41:08 +0200
commite5b653b3487810e3126b4d17ccbd0d13b53574d5 (patch)
tree5c26f277591bf7967d94a5128038c48df39c2fab
parent9a84cd6a72420604003e0fac5dab6c147c8c7fbd (diff)
downloaddbus-e5b653b3487810e3126b4d17ccbd0d13b53574d5.tar.gz
afbus: implement RemoveMatch
-rw-r--r--bus/driver-afbus.c24
-rw-r--r--bus/driver-afbus.h15
-rw-r--r--bus/driver.c5
3 files changed, 39 insertions, 5 deletions
diff --git a/bus/driver-afbus.c b/bus/driver-afbus.c
index 8227b7be..bf18781f 100644
--- a/bus/driver-afbus.c
+++ b/bus/driver-afbus.c
@@ -117,9 +117,10 @@ static int netlink_send(int nlsock, struct cn_msg *msg, int seq)
return send(nlsock, nlh, size, 0);
}
-dbus_bool_t
+static dbus_bool_t
bus_driver_afbus_upload_match_rule (DBusConnection *connection,
const char *rule,
+ dbus_bool_t add,
DBusError *error)
{
static int seq;
@@ -159,7 +160,10 @@ bus_driver_afbus_upload_match_rule (DBusConnection *connection,
data->len = sizeof(struct nfdbus_nl_cfg_req) + strlen(rule) + 1;
req = (struct nfdbus_nl_cfg_req *) data->data;
- req->cmd = NFDBUS_CMD_ADDMATCH;
+ if (add)
+ req->cmd = NFDBUS_CMD_ADDMATCH;
+ else
+ req->cmd = NFDBUS_CMD_REMOVEMATCH;
req->len = strlen(rule) + 1;
req->addr = address;
strcpy((char *)req->data, rule);
@@ -184,6 +188,22 @@ bus_driver_afbus_upload_match_rule (DBusConnection *connection,
}
dbus_bool_t
+bus_driver_afbus_add_match_rule (DBusConnection *connection,
+ const char *rule,
+ DBusError *error)
+{
+ return bus_driver_afbus_upload_match_rule (connection, rule, TRUE, error);
+}
+
+dbus_bool_t
+bus_driver_afbus_remove_match_rule (DBusConnection *connection,
+ const char *rule,
+ DBusError *error)
+{
+ return bus_driver_afbus_upload_match_rule (connection, rule, FALSE, error);
+}
+
+dbus_bool_t
bus_driver_afbus_append_unique_name (DBusConnection *connection,
DBusString *str)
{
diff --git a/bus/driver-afbus.h b/bus/driver-afbus.h
index 560f543a..5135b143 100644
--- a/bus/driver-afbus.h
+++ b/bus/driver-afbus.h
@@ -29,7 +29,10 @@
#include "connection.h"
#if HAVE_AFBUS
-dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
+dbus_bool_t bus_driver_afbus_add_match_rule (DBusConnection *connection,
+ const char *rule,
+ DBusError *error);
+dbus_bool_t bus_driver_afbus_remove_match_rule (DBusConnection *connection,
const char *rule,
DBusError *error);
dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
@@ -40,7 +43,15 @@ dbus_bool_t bus_driver_afbus_emit_forwarded (BusTransaction *transaction,
const char *service_name);
#else
inline
-dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
+dbus_bool_t bus_driver_afbus_add_match_rule (DBusConnection *connection,
+ const char *rule,
+ DBusError *error)
+{
+ return TRUE;
+}
+
+inline
+dbus_bool_t bus_driver_afbus_remove_match_rule (DBusConnection *connection,
const char *rule,
DBusError *error)
{
diff --git a/bus/driver.c b/bus/driver.c
index cae4aaa4..740d8963 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -994,7 +994,7 @@ bus_driver_handle_add_match (DBusConnection *connection,
if (rule == NULL)
goto failed;
- if (!bus_driver_afbus_upload_match_rule (connection, text, error))
+ if (!bus_driver_afbus_add_match_rule (connection, text, error))
goto failed;
matchmaker = bus_connection_get_matchmaker (connection);
@@ -1060,6 +1060,9 @@ bus_driver_handle_remove_match (DBusConnection *connection,
message, error))
goto failed;
+ if (!bus_driver_afbus_remove_match_rule (connection, text, error))
+ goto failed;
+
matchmaker = bus_connection_get_matchmaker (connection);
if (!bus_matchmaker_remove_rule_by_value (matchmaker, rule, error))