client: Fix not resetting filters on scan.clear
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 1 Aug 2018 11:21:55 +0000 (14:21 +0300)
committerhimanshu <h.himanshu@samsung.com>
Tue, 14 Jan 2020 08:53:35 +0000 (14:23 +0530)
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.

Change-Id: Iff02f62e999e0e292b645a8d300320226fa17105
Signed-off-by: himanshu <h.himanshu@samsung.com>
client/main.c

index 772e3bc..248c23a 100644 (file)
@@ -1180,6 +1180,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;
@@ -1239,14 +1252,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);
        }
@@ -1266,7 +1283,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";
@@ -1310,7 +1327,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[])
@@ -1327,7 +1344,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[])
@@ -1345,7 +1362,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[])
@@ -1363,7 +1380,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[])
@@ -1386,7 +1403,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[])
@@ -1409,7 +1426,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)
@@ -1521,7 +1538,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[])