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 /hcid | |
parent | f62f8d892b5d5cc5aedef83779671c1ed54a35da (diff) |
Check for alternative UUIDs if public browse group fails
Diffstat (limited to 'hcid')
-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; |