diff options
| -rw-r--r-- | src/adapter.c | 2 | ||||
| -rw-r--r-- | src/device.c | 21 | ||||
| -rw-r--r-- | src/device.h | 2 | 
3 files changed, 16 insertions, 9 deletions
diff --git a/src/adapter.c b/src/adapter.c index d850bee3..1e22b4b3 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1901,7 +1901,7 @@ static DBusMessage *create_device(DBusConnection *conn,  	device_set_temporary(device, FALSE); -	device_browse(device, conn, msg, NULL); +	device_browse(device, conn, msg, NULL, FALSE);  	adapter->devices = g_slist_append(adapter->devices, device); diff --git a/src/device.c b/src/device.c index bd58f7c3..778fc6f2 100644 --- a/src/device.c +++ b/src/device.c @@ -400,7 +400,7 @@ static DBusMessage *discover_services(DBusConnection *conn,  		goto fail;  	if (strlen(pattern) == 0) { -		err = device_browse(device, conn, msg, NULL); +		err = device_browse(device, conn, msg, NULL, FALSE);  		if (err < 0)  			goto fail;  	} else { @@ -409,7 +409,7 @@ static DBusMessage *discover_services(DBusConnection *conn,  		if (bt_string2uuid(&uuid, pattern) < 0)  			return invalid_args(msg); -		err = device_browse(device, conn, msg, &uuid); +		err = device_browse(device, conn, msg, &uuid, FALSE);  		if (err < 0)  			goto fail;  	} @@ -1097,7 +1097,7 @@ done:  	search_cb(recs, err, user_data);  } -static void init_browse(struct browse_req *req) +static void init_browse(struct browse_req *req, gboolean reverse)  {  	GSList *l; @@ -1132,13 +1132,20 @@ static void init_browse(struct browse_req *req)  		}  	} +	/* If we are doing reverse-SDP don't try to detect removed profiles +	 * since some devices hide their service records while they are +	 * connected +	 */ +	if (reverse) +		return; +  	for (l = req->device->uuids; l; l = l->next)  		req->uuids_removed = g_slist_append(req->uuids_removed,  						l->data);  }  int device_browse(struct btd_device *device, DBusConnection *conn, -			DBusMessage *msg, uuid_t *search) +			DBusMessage *msg, uuid_t *search, gboolean reverse)  {  	struct btd_adapter *adapter = device->adapter;  	struct browse_req *req; @@ -1164,7 +1171,7 @@ int device_browse(struct btd_device *device, DBusConnection *conn,  		cb = search_cb;  	} else {  		sdp_uuid16_create(&uuid, uuid_list[req->search_uuid++]); -		init_browse(req); +		init_browse(req, reverse);  		cb = browse_cb;  	} @@ -1268,7 +1275,7 @@ static gboolean start_discovery(gpointer user_data)  {  	struct btd_device *device = user_data; -	device_browse(device, NULL, NULL, NULL); +	device_browse(device, NULL, NULL, NULL, TRUE);  	device->discov_timer = 0; @@ -1299,7 +1306,7 @@ int device_set_paired(DBusConnection *conn, struct btd_device *device,  		}  		return device_browse(device, bonding->conn, bonding->msg, -					NULL); +					NULL, FALSE);  	}  	/* If we are not initiators and there is no currently active discovery diff --git a/src/device.h b/src/device.h index f977d7eb..a1fa15ab 100644 --- a/src/device.h +++ b/src/device.h @@ -29,7 +29,7 @@ struct btd_device *device_create(DBusConnection *conn, struct btd_adapter *adapt  void device_remove(DBusConnection *conn, struct btd_device *device);  gint device_address_cmp(struct btd_device *device, const gchar *address);  int device_browse(struct btd_device *device, DBusConnection *conn, -			DBusMessage *msg, uuid_t *search); +			DBusMessage *msg, uuid_t *search, gboolean reverse);  void device_probe_drivers(struct btd_device *device, GSList *uuids, sdp_list_t *recs);  struct btd_adapter *device_get_adapter(struct btd_device *device);  void device_get_address(struct btd_device *adapter, bdaddr_t *bdaddr);  | 
