From 847dcb2a6c00401dce04b52cecd75a62bf572dce Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 1 Aug 2018 14:21:55 +0300 Subject: [PATCH] client: Fix not resetting filters on scan.clear If call to SetDiscoveryFilter comes with any value set the daemon will not attempt to clear the filters, instead the client is suppose to send an empty dict. --- client/main.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/client/main.c b/client/main.c index 4d848176c..196b31a4d 100644 --- a/client/main.c +++ b/client/main.c @@ -1177,6 +1177,19 @@ static void start_discovery_reply(DBusMessage *message, void *user_data) /* Leave the discovery running even on noninteractive mode */ } +static void clear_discovery_filter(DBusMessageIter *iter, void *user_data) +{ + DBusMessageIter dict; + + dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING + DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); + + dbus_message_iter_close_container(iter, &dict); +} + static void set_discovery_filter_setup(DBusMessageIter *iter, void *user_data) { struct set_discovery_filter_args *args = user_data; @@ -1236,14 +1249,18 @@ static void set_discovery_filter_reply(DBusMessage *message, void *user_data) return bt_shell_noninteractive_quit(EXIT_SUCCESS); } -static void set_discovery_filter(void) +static void set_discovery_filter(bool cleared) { + GDBusSetupFunction func; + if (check_default_ctrl() == FALSE || filter.set) return; + func = cleared ? clear_discovery_filter : set_discovery_filter_setup; + if (g_dbus_proxy_method_call(default_ctrl->proxy, "SetDiscoveryFilter", - set_discovery_filter_setup, set_discovery_filter_reply, - &filter, NULL) == FALSE) { + func, set_discovery_filter_reply, + &filter, NULL) == FALSE) { bt_shell_printf("Failed to set discovery filter\n"); return bt_shell_noninteractive_quit(EXIT_FAILURE); } @@ -1263,7 +1280,7 @@ static void cmd_scan(int argc, char *argv[]) return bt_shell_noninteractive_quit(EXIT_FAILURE); if (enable == TRUE) { - set_discovery_filter(); + set_discovery_filter(false); method = "StartDiscovery"; } else method = "StopDiscovery"; @@ -1307,7 +1324,7 @@ commit: filter.set = false; if (filter.active) - set_discovery_filter(); + set_discovery_filter(false); } static void cmd_scan_filter_rssi(int argc, char *argv[]) @@ -1324,7 +1341,7 @@ static void cmd_scan_filter_rssi(int argc, char *argv[]) filter.set = false; if (filter.active) - set_discovery_filter(); + set_discovery_filter(false); } static void cmd_scan_filter_pathloss(int argc, char *argv[]) @@ -1342,7 +1359,7 @@ static void cmd_scan_filter_pathloss(int argc, char *argv[]) filter.set = false; if (filter.active) - set_discovery_filter(); + set_discovery_filter(false); } static void cmd_scan_filter_transport(int argc, char *argv[]) @@ -1360,7 +1377,7 @@ static void cmd_scan_filter_transport(int argc, char *argv[]) filter.set = false; if (filter.active) - set_discovery_filter(); + set_discovery_filter(false); } static void cmd_scan_filter_duplicate_data(int argc, char *argv[]) @@ -1383,7 +1400,7 @@ static void cmd_scan_filter_duplicate_data(int argc, char *argv[]) filter.set = false; if (filter.active) - set_discovery_filter(); + set_discovery_filter(false); } static void cmd_scan_filter_discoverable(int argc, char *argv[]) @@ -1406,7 +1423,7 @@ static void cmd_scan_filter_discoverable(int argc, char *argv[]) filter.set = false; if (filter.active) - set_discovery_filter(); + set_discovery_filter(false); } static void filter_clear_uuids(void) @@ -1518,7 +1535,7 @@ static void cmd_scan_filter_clear(int argc, char *argv[]) if (check_default_ctrl() == FALSE) return bt_shell_noninteractive_quit(EXIT_FAILURE); - set_discovery_filter(); + set_discovery_filter(all); } static struct GDBusProxy *find_device(int argc, char *argv[]) -- 2.47.3