diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-06-06 14:19:19 +0000 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-06-06 14:19:19 +0000 | 
| commit | d69e08eb0d567b61106ca37e0546402f4ae0c34e (patch) | |
| tree | aac8e575a293a56994d224d5b12bfba784d1522e | |
| parent | f62f8d892b5d5cc5aedef83779671c1ed54a35da (diff) | |
Check for alternative UUIDs if public browse group fails
| -rw-r--r-- | hcid/device.c | 25 | 
1 files changed, 24 insertions, 1 deletions
| diff --git a/hcid/device.c b/hcid/device.c index f24b98b1..9a814047 100644 --- a/hcid/device.c +++ b/hcid/device.c @@ -69,6 +69,7 @@ struct browse_req {  	DBusConnection *conn;  	DBusMessage *msg;  	struct device *device; +	int search_uuid;  };  struct hci_peer { @@ -118,6 +119,14 @@ static struct hci_dev devices[MAX_DEVICES];  #define ASSERT_DEV_ID { if (dev_id >= MAX_DEVICES) return -ERANGE; } +static uint16_t uuid_list[] = { +	PUBLIC_BROWSE_GROUP, +	GENERIC_AUDIO_SVCLASS_ID, +	ADVANCED_AUDIO_SVCLASS_ID, +	AV_REMOTE_SVCLASS_ID, +	0 +}; +  void init_adapters(void)  {  	int i; @@ -1077,6 +1086,7 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data)  	int i;  	GSList *l;  	DBusMessage *reply; +	uuid_t uuid;  	if (err < 0)  		goto proceed; @@ -1126,6 +1136,16 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data)  					DBUS_TYPE_ARRAY, &uuids);  	g_free(uuids); +	/* Public browsing was succesful */ +	if (!req->search_uuid && recs) +		goto proceed; + +	if (uuid_list[++req->search_uuid]) { +		sdp_uuid16_create(&uuid, uuid_list[req->search_uuid]); +		bt_search_service(&src, &dst, &uuid, browse_cb, user_data, NULL); +		return; +	} +  proceed:  	dbus_connection_emit_signal(req->conn, dbus_message_get_path(req->msg),  				ADAPTER_INTERFACE, "DeviceCreated", @@ -1156,6 +1176,7 @@ int device_browse(struct device *device, DBusConnection *conn,  	struct adapter *adapter = device->adapter;  	struct browse_req *req;  	bdaddr_t src, dst; +	uuid_t uuid;  	req = g_new0(struct browse_req, 1);  	req->conn = dbus_connection_ref(conn); @@ -1164,7 +1185,9 @@ int device_browse(struct device *device, DBusConnection *conn,  	str2ba(adapter->address, &src);  	str2ba(device->address, &dst); -	return bt_discover_services(&src, &dst, browse_cb, req, NULL); +	sdp_uuid16_create(&uuid, uuid_list[req->search_uuid]); + +	return bt_search_service(&src, &dst, &uuid, browse_cb, req, NULL);  }  static GSList *drivers = NULL; | 
