Hi, On Wed, May 29, 2019 at 3:14 PM Luiz Augusto von Dentz <luiz.dentz@xxxxxxxxx> wrote: > > From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> > > This makes ReverseServiceDiscovery work properly with LE connection by > disabling the GATT client functionality which makes one able to setup a > system to operate in peripheral role only mode. > --- > src/device.c | 9 +++++++-- > src/hcid.h | 2 +- > src/main.c | 4 ++-- > src/main.conf | 8 +++++--- > 4 files changed, 15 insertions(+), 8 deletions(-) > > diff --git a/src/device.c b/src/device.c > index 8ddfa28ff..263f60aea 100644 > --- a/src/device.c > +++ b/src/device.c > @@ -4933,6 +4933,11 @@ static void gatt_client_init(struct btd_device *device) > { > gatt_client_cleanup(device); > > + if (!device->connect && !main_opts.reverse_discovery) { > + DBG("Reverse service discovery disabled: skipping GATT client"); > + return; > + } > + > device->client = bt_gatt_client_new(device->db, device->att, > device->att_mtu); > if (!device->client) { > @@ -5814,7 +5819,7 @@ void device_bonding_complete(struct btd_device *device, uint8_t bdaddr_type, > bonding_request_free(bonding); > } else if (!state->svc_resolved) { > if (!device->browse && !device->discov_timer && > - main_opts.reverse_sdp) { > + main_opts.reverse_discovery) { > /* If we are not initiators and there is no currently > * active discovery or discovery timer, set discovery > * timer */ > @@ -5858,7 +5863,7 @@ unsigned int device_wait_for_svc_complete(struct btd_device *dev, > > dev->svc_callbacks = g_slist_prepend(dev->svc_callbacks, cb); > > - if (state->svc_resolved || !main_opts.reverse_sdp) > + if (state->svc_resolved || !main_opts.reverse_discovery) > cb->idle_id = g_idle_add(svc_idle_cb, cb); > else if (dev->discov_timer > 0) { > g_source_remove(dev->discov_timer); > diff --git a/src/hcid.h b/src/hcid.h > index 1eb3c5ac2..adea85ce2 100644 > --- a/src/hcid.h > +++ b/src/hcid.h > @@ -43,7 +43,7 @@ struct main_opts { > uint32_t discovto; > uint8_t privacy; > > - gboolean reverse_sdp; > + gboolean reverse_discovery; > gboolean name_resolv; > gboolean debug_keys; > gboolean fast_conn; > diff --git a/src/main.c b/src/main.c > index 696728320..1a6ab36a3 100644 > --- a/src/main.c > +++ b/src/main.c > @@ -367,7 +367,7 @@ static void parse_config(GKeyFile *config) > DBG("%s", err->message); > g_clear_error(&err); > } else > - main_opts.reverse_sdp = boolean; > + main_opts.reverse_discovery = boolean; > > boolean = g_key_file_get_boolean(config, "General", > "NameResolving", &err); > @@ -456,7 +456,7 @@ static void init_defaults(void) > main_opts.class = 0x000000; > main_opts.pairto = DEFAULT_PAIRABLE_TIMEOUT; > main_opts.discovto = DEFAULT_DISCOVERABLE_TIMEOUT; > - main_opts.reverse_sdp = TRUE; > + main_opts.reverse_discovery = TRUE; > main_opts.name_resolv = TRUE; > main_opts.debug_keys = FALSE; > > diff --git a/src/main.conf b/src/main.conf > index b2f843c75..40687a755 100644 > --- a/src/main.conf > +++ b/src/main.conf > @@ -30,9 +30,11 @@ > #DeviceID = bluetooth:1234:5678:abcd > > # Do reverse service discovery for previously unknown devices that connect to > -# us. This option is really only needed for qualification since the BITE tester > -# doesn't like us doing reverse SDP for some test cases (though there could in > -# theory be other useful purposes for this too). Defaults to 'true'. > +# us. For BR/EDR this option is really only needed for qualification since the > +# BITE tester doesn't like us doing reverse SDP for some test cases, for LE > +# this disables the GATT client functionally so it can be used in system which > +# can only operate as peripheral. > +# Defaults to 'true'. > #ReverseServiceDiscovery = true > > # Enable name resolving after inquiry. Set it to 'false' if you don't need > -- > 2.21.0 Applied. -- Luiz Augusto von Dentz