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.
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk