Bagikan melalui


Bluetooth dan WSALookupServiceBegin untuk Penemuan Layanan

Untuk menemukan keberadaan layanan tertentu di server Bluetooth, klien menggunakan fungsi WSALookupServiceBegin, WSALookupServiceNext, dan WSALookupServiceEnd. Kueri dapat dilakukan untuk alamat lokal dan jarak jauh, tetapi koneksi hanya dapat dibuat dengan alamat jarak jauh. Penanganan layanan yang ditemukan selama operasi ini tidak dapat digunakan untuk menghapus layanan melalui WSASetService. Loopback tidak didukung oleh RFCOMM.

Dua jenis dasar kueri penemuan layanan dapat dilakukan:

  • Kueri untuk satu atau beberapa layanan di perangkat lokal
  • Kueri untuk satu atau beberapa layanan pada perangkat peer tertentu

Fungsi WSALookupServiceBegin menerima struktur WSAQUERYSET dalam parameter lpqsRestrictions-nya. WSALookupServiceBegin melakukan kueri klien berdasarkan serangkaian pembatasan pencarian yang dimuat WSAQUERYSET . Klien Bluetooth harus menentukan pembatasan, yang tercantum dalam tabel berikut, dalam struktur WSAQUERYSET saat menggunakan fungsi WSALookupServiceBegin untuk mengkueri layanan.

Anggota WSAQUERYSET Pembatasan
dwSize Atur ke sizeof(WSAQUERYSET).
lpServiceClassId Atur ke UUID Bluetooth paling spesifik yang dapat digunakan untuk menentukan cakupan kueri. Misalnya, mengatur lpServiceClassId ke UUID protokol L2CAP menghasilkan semua layanan L2CAP yang dikembalikan, pada dasarnya menghitung semua catatan SD pada target. Namun, mengatur UUID ke layanan tertentu, hanya mengembalikan instans layanan tersebut.
dwNameSpace Atur ke NS_BTH.
dwNumberOfCsAddrs Atur ke 0.
lpszContext Atur ke Alamat Perangkat Bluetooth untuk membuat koneksi SDP untuk melakukan kueri layanan. Anggota ini harus berupa string yang dikonversi dengan menggunakan fungsi WSAAddressToString. Jika alamat radio lokal disediakan, rekaman SDP lokal akan dicari.
Anggota lain Semua anggota lain dari struktur WSAQUERYSET diabaikan.

Koneksi SDP ke perangkat jarak jauh tidak tetap aktif setelah fungsi WSALookupServiceBegin menyelesaikan kueri layanan; koneksi dihentikan sebelum WSALookupServiceBegin kembali. Aplikasi yang mengharuskan koneksi SDP tetap aktif setelah kueri layanan selesai harus menentukan UUID kelas layanan yang akan disambungkan dengan menggunakan anggota serviceClassId dari struktur SOCKADDR_BTH saat mengeluarkan panggilan fungsi koneksi Soket Windows.

Bendera, yang tercantum dalam tabel berikut, digunakan dalam parameter dwControlFlags dari fungsi WSALookupServiceBegin dan WSALookupServiceNext untuk mengontrol hasil kueri. Bendera LUP_CONTAINERS dan LUP_FLUSHCACHE digunakan oleh fungsi WSALookupServiceBegin; bendera lainnya digunakan dalam panggilan ke fungsi WSALookupServiceNext.

Bendera Hasil
LUP_CONTAINERS Tidak boleh diatur.
LUP_FLUSHCACHE Aplikasi umumnya harus menentukan LUP_FLUSHCACHE. Bendera ini menginstruksikan sistem untuk mengabaikan informasi cache apa pun dan membuat koneksi SDP over-the-air ke perangkat yang ditentukan untuk melakukan pencarian SDP. Operasi yang tidak di-cache ini mungkin memakan waktu beberapa detik (sedangkan pencarian yang di-cache kembali dengan cepat). Bluetooth saat ini tidak secara proaktif menyimpan rekaman SDP dari perangkat terdekat, saat ini juga tidak menyimpan kueri sebelumnya secara agresif. Oleh karena itu, aplikasi harus mengantisipasi bahwa kueri tidak dapat mengembalikan hasil (dengan kode kesalahan WSASERVICE_NOT_FOUND) jika LUP_FLUSHCACHE tidak ditentukan. Data cache yang tersedia dengan menggunakan antarmuka Windows Sockets dapat ditingkatkan di masa mendatang.
LUP_RES_SERVICE Mengembalikan informasi tentang alamat Bluetooth lokal. Bendera ini hanya berpengaruh jika LUP_RETURN_ADDR juga ditentukan.
LUP_RETURN_NAME Mengembalikan nama tampilan layanan dalam anggota lpszServiceInstanceName dari struktur WSAQUERYSET untuk setiap panggilan ke fungsi WSALookupServiceNext.
LUP_RETURN_TYPE Mengembalikan ID kelas layanan di anggota lpServiceClassId dari struktur WSAQUERYSET . Catatan: Penggunaan bendera ini hanya berlaku untuk fungsi WSALookupServiceBegin . Nilai ini selalu nol untuk WSALookupServiceNext.
LUP_RETURN_ADDR Mengembalikan alamat di anggota lpcsaBuffer yang akan digunakan dengan panggilan fungsi sambungkan. Alamat yang dikembalikan berisi nomor port.
LUP_RETURN_BLOB Kembalikan rekaman SD yang cocok di anggota lpBlob , yang diformat sesuai dengan spesifikasi rekaman SDP Bluetooth.
LUP_RETURN_ALL Mengembalikan semua informasi bendera di atas.
LUP_RETURN_COMMENT Kembalikan deskripsi layanan dalam anggota lpszComment dari struktur WSAQUERYSET untuk setiap panggilan ke fungsi WSALookupServiceNext.
LUP_FLUSHPREVIOUS Lewati rekaman berikutnya yang tersedia, dan kembalikan rekaman yang mengikutinya.

Kueri Layanan Tingkat Lanjut

Operasi kueri yang dijelaskan di bagian sebelumnya dapat digunakan untuk mengembalikan semua hasil dari satu GUID, yang seharusnya cukup untuk sebagian besar aplikasi. Kueri tingkat lanjut memungkinkan aplikasi untuk membuat kueri yang lebih spesifik; ini menyediakan kemampuan untuk mencocokkan UUID dan atribut dalam informasi yang dikembalikan.

Untuk melakukan kueri lanjutan untuk layanan, klien Bluetooth harus menentukan batasan berikut dalam struktur WSAQUERYSET yang diteruskan ke parameter lpqsRestrictions.

Anggota WSAQUERYSET Pembatasan
dwSize Atur ke sizeof(WSAQUERYSET).
lpszContext Atur ke Alamat Perangkat Bluetooth untuk membuat koneksi SDP untuk melakukan kueri layanan. Anggota ini harus berupa string yang dikonversi dengan menggunakan fungsi WSAAddressToString. Jika alamat radio lokal disediakan, rekaman SDP lokal akan dicari.
lpBlob.pBlobData Penunjuk ke struktur BTH_QUERY_SERVICE yang berisi semua parameter yang membatasi hasil kueri.
dwNameSpace Atur ke NS_BTH.
Anggota lain Semua anggota lain dari struktur WSAQUERYSET diabaikan.

Bendera berikut diteruskan dalam parameter dwControlFlags dari WSALookupServiceBegin untuk mengontrol hasil kueri tingkat lanjut.

Bendera Hasil
LUP_CONTAINERS Tidak boleh diatur.
LUP_FLUSHCACHE Aplikasi umumnya harus menentukan LUP_FLUSHCACHE. Bendera ini menginstruksikan sistem untuk mengabaikan informasi cache apa pun dan membuat koneksi SDP over-the-air ke perangkat yang ditentukan untuk melakukan pencarian SDP. Operasi yang tidak di-cache ini mungkin memakan waktu beberapa detik (sedangkan pencarian yang di-cache kembali dengan cepat). Bluetooth tidak secara proaktif menyimpan rekaman SDP dari perangkat terdekat, juga tidak secara agresif menyimpan kueri sebelumnya. Oleh karena itu, aplikasi harus mengharapkan bahwa kueri mungkin sering tidak mengembalikan hasil (WSASERVICE_NOT_FOUND) jika LUP_FLUSHCACHE tidak ditentukan. Data cache yang tersedia dengan menggunakan antarmuka Windows Sockets dapat ditingkatkan di masa mendatang.
LUP_RES_SERVICE Mengembalikan informasi untuk Alamat Bluetooth lokal. Pengaturan bendera ini hanya berpengaruh jika LUP_RETURN_ADDRR juga ditentukan.
LUP_RETURN_NAME Mengembalikan nama tampilan layanan. Bendera ini diabaikan untuk SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_TYPE Mengembalikan ID kelas layanan. Bendera ini diabaikan untuk SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_ADDR Mengembalikan alamat di anggota lpcsaBuffer yang akan digunakan dengan panggilan fungsi sambungkan. Alamat yang dikembalikan berisi nomor port. Bendera ini diabaikan untuk SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_BLOB Mengembalikan rekaman SD yang cocok dalam format yang sesuai dengan spesifikasi rekaman SDP Bluetooth. Untuk SDP_SERVICE_SEARCH_REQUEST, hasilnya dalam lpBlob untuk panggilan berikutnya ke WSALookupServiceNext adalah array handel SDP Bluetooth. Untuk SDP_SERVICE_ATTRIBUTE_REQUEST dan SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST, hasil untuk setiap panggilan berikutnya ke WSALookupServiceNext adalah rekaman SDP Bluetooth biner yang atributnya dibatasi untuk yang ditentukan oleh anggota kueri pRange. Bendera ini diperlukan untuk SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_COMMENT Kembalikan deskripsi layanan dalam anggota lpszComment dari struktur WSAQUERYSET untuk setiap panggilan ke fungsi WSALookupServiceNext.
LUP_FLUSHPREVIOUS Lewati rekaman berikutnya yang tersedia, dan kembalikan rekaman yang mengikutinya.

Pada input, lpBlob-pBlobData> menunjuk ke struktur BTH_QUERY_SERVICE yang berisi nilai yang tercantum dalam tabel berikut.

Catatan

Permintaan pencarian awal harus dapat masuk ke dalam satu paket L2CAP. Namun, responsnya mungkin dipecah menjadi banyak paket L2CAP.

Anggota Value
jenis Jenis pencarian yang akan dilakukan. Nilai ini bisa menjadi salah satu SDP_SERVICE_SEARCH_REQUEST, SDP_SERVICE_ATTRIBUTE_REQUEST, atau SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST. Setiap jenis pencarian dikaitkan dengan mekanisme pencarian yang mendasar yang ditentukan oleh spesifikasi SDP Bluetooth. Setiap pengembalian menghasilkan formulir yang dijelaskan oleh struktur WSAQUERYSET yang ditentukan sebelumnya di bagian ini (Kueri Layanan Tingkat Lanjut).
serviceHandle Digunakan untuk pencarian atribut. Nilai ini menentukan handel layanan untuk mengkueri atribut di anggota pRange .
uuids Digunakan untuk pencarian service dan serviceAttribute . Nilai ini menentukan UUID yang harus dimuat rekaman agar sesuai dengan pencarian. Jika kurang dari MAX_UUIDS_IN_QUERY UUID harus dikueri, nilai ini mengatur elemen SdpQueryUuid yang segera mengikuti UUID terakhir yang valid ke semua nol.
numRange Digunakan untuk pencarian atribut dan serviceAttribute . Nilai ini menentukan jumlah elemen dalam pRange.
pRange Digunakan untuk pencarian atribut dan serviceAttribute . Nilai ini menentukan nilai atribut yang akan diambil untuk rekaman yang cocok.

Setelah setiap panggilan berhasil ke fungsi WSALookupServiceNext, lpBlob-pBlobData> menunjuk ke blok data yang berisi nilai yang tercantum dalam tabel berikut.

Nilai Deskripsi
SDP_SERVICE_SEARCH_REQUEST Array rekaman SDP menangani yang identik dengan ServiceRecordHandleList yang ditentukan oleh Bluetooth 1.1 SDP 4.5.2. Jumlah handel SDP yang dikembalikan dihitung dengan (lpBlob-cbSize>)/sizeof(ULONG). Semua hasil dikembalikan dalam satu panggilan ke fungsi WSALookupServiceNext.
SDP_SERVICE_ATTRIBUTE_REQUEST atau SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST Rekaman SDP Bluetooth biner. Untuk SDP_SERVICE_ATTRIBUTE_REQUEST, semua hasil dikembalikan dalam satu panggilan ke fungsi WSALookupServiceNext.

Catatan

Jika anggota lpBlob tidak ditentukan selama input untuk kueri layanan, pencarian layanan dan atribut dilakukan untuk layanan yang ditentukan dalam anggota lpServiceClassId pada atribut dari 0 hingga 0xFFFF.

Bluetooth dan WSAQUERYSET untuk Pertanyaan Layanan

Menemukan Perangkat dan Layanan Bluetooth

Bluetooth dan WSALookupServiceNext

Bluetooth dan WSALookupServiceBegin untuk Pertanyaan Perangkat

BTH_QUERY_SERVICE

Menghubungkan

SOCKADDR_BTH

WSAAddressToString

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNext

WSAQUERYSET

Soket Windows