From fa29b40fadabbef3dad6918472ad804b5345c83e Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Fri, 1 Sep 2017 15:34:40 +0200 Subject: [PATCH] dbus-proxy: Add sloppy-names mode In this mode all clients get NameOwnerChanged events for all unique names. This means you can track lifetimes of these, even if you can't talk to them. This is useful on the a11y bus, because we want to track when there are any listeners to a particular event, and this is done my listing unique id:s and tracking them. --- dbus-proxy/dbus-proxy.c | 6 ++++++ dbus-proxy/flatpak-proxy.c | 11 ++++++++++- dbus-proxy/flatpak-proxy.h | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/dbus-proxy/dbus-proxy.c b/dbus-proxy/dbus-proxy.c index bd97f936..43593142 100644 --- a/dbus-proxy/dbus-proxy.c +++ b/dbus-proxy/dbus-proxy.c @@ -144,6 +144,12 @@ start_proxy (int n_args, const char *args[]) { flatpak_proxy_set_filter (proxy, TRUE); } + else if (g_str_equal (args[n], "--sloppy-names")) + { + /* This means we're reporing the name changes for all unique names, + which is needed for the a11y bus */ + flatpak_proxy_set_sloppy_names (proxy, TRUE); + } else { int res = parse_generic_args (n_args - n, &args[n]); diff --git a/dbus-proxy/flatpak-proxy.c b/dbus-proxy/flatpak-proxy.c index b99beebf..483bee10 100644 --- a/dbus-proxy/flatpak-proxy.c +++ b/dbus-proxy/flatpak-proxy.c @@ -289,6 +289,7 @@ struct FlatpakProxy char *dbus_address; gboolean filter; + gboolean sloppy_names; GHashTable *wildcard_policy; GHashTable *policy; @@ -467,6 +468,13 @@ flatpak_proxy_set_filter (FlatpakProxy *proxy, proxy->filter = filter; } +void +flatpak_proxy_set_sloppy_names (FlatpakProxy *proxy, + gboolean sloppy_names) +{ + proxy->sloppy_names = sloppy_names; +} + void flatpak_proxy_set_log_messages (FlatpakProxy *proxy, gboolean log) @@ -1729,7 +1737,8 @@ should_filter_name_owner_changed (FlatpakProxyClient *client, Buffer *buffer) old = g_variant_get_string (arg1, NULL); new = g_variant_get_string (arg2, NULL); - if (flatpak_proxy_client_get_policy (client, name) >= FLATPAK_POLICY_SEE) + if (flatpak_proxy_client_get_policy (client, name) >= FLATPAK_POLICY_SEE || + (client->proxy->sloppy_names && name[0] == ':')) { if (name[0] != ':') { diff --git a/dbus-proxy/flatpak-proxy.h b/dbus-proxy/flatpak-proxy.h index d7001e7b..e97d7499 100644 --- a/dbus-proxy/flatpak-proxy.h +++ b/dbus-proxy/flatpak-proxy.h @@ -48,6 +48,8 @@ void flatpak_proxy_set_log_messages (FlatpakProxy *proxy, gboolean log); void flatpak_proxy_set_filter (FlatpakProxy *proxy, gboolean filter); +void flatpak_proxy_set_sloppy_names (FlatpakProxy *proxy, + gboolean sloppy_names); void flatpak_proxy_add_policy (FlatpakProxy *proxy, const char *name, FlatpakPolicy policy);