diff --git a/src/adapter.c b/src/adapter.c
index 50cf46b..5070c0f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
g_dbus_emit_property_changed(dbus_conn, adapter->path,
ADAPTER_INTERFACE, "Discoverable");
store_adapter_info(adapter);
+ btd_adv_manager_refresh(adapter->adv_manager);
}
if (changed_mask & MGMT_SETTING_BONDABLE) {
return false;
}
+bool btd_adapter_get_discoverable(struct btd_adapter *adapter)
+{
+ if (adapter->current_settings & MGMT_SETTING_DISCOVERABLE)
+ return true;
+
+ return false;
+}
+
struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter)
{
if (!adapter)
diff --git a/src/adapter.h b/src/adapter.h
index a85327c..e619a5b 100644
--- a/src/adapter.h
+++ b/src/adapter.h
bool btd_adapter_get_pairable(struct btd_adapter *adapter);
bool btd_adapter_get_powered(struct btd_adapter *adapter);
bool btd_adapter_get_connectable(struct btd_adapter *adapter);
+bool btd_adapter_get_discoverable(struct btd_adapter *adapter);
struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter);
diff --git a/src/advertising.c b/src/advertising.c
index 970c3d8..f17a1f5 100644
--- a/src/advertising.c
+++ b/src/advertising.c
DBG("Refreshing advertisement: %s", client->path);
- if (client->type == AD_TYPE_PERIPHERAL)
- flags = MGMT_ADV_FLAG_CONNECTABLE | MGMT_ADV_FLAG_DISCOV;
+ if (client->type == AD_TYPE_PERIPHERAL) {
+ flags = MGMT_ADV_FLAG_CONNECTABLE;
+
+ if (btd_adapter_get_discoverable(client->manager->adapter))
+ flags |= MGMT_ADV_FLAG_DISCOV;
+ }
flags |= client->flags;
manager_destroy(manager);
}
+
+void btd_adv_manager_refresh(struct btd_adv_manager *manager)
+{
+ queue_foreach(manager->clients, (queue_foreach_func_t)refresh_adv,
+ NULL);
+}
diff --git a/src/advertising.h b/src/advertising.h
index b783cf0..d98c4b8 100644
--- a/src/advertising.h
+++ b/src/advertising.h
struct btd_adv_manager *btd_adv_manager_new(struct btd_adapter *adapter);
void btd_adv_manager_destroy(struct btd_adv_manager *manager);
+void btd_adv_manager_refresh(struct btd_adv_manager *manager);