Delen via


Bluetooth en WSALookupServiceBegin voor Service Discovery

Clients gebruiken de functies WSALookupServiceBegin, WSALookupServiceNexten WSALookupServiceEnd om het bestaan van een bepaalde service op een Bluetooth-server te detecteren. Query's kunnen worden uitgevoerd voor lokale en externe adressen, maar verbindingen kunnen alleen worden gemaakt met externe adressen. Service-ingangen die tijdens deze bewerking zijn gedetecteerd, kunnen niet worden gebruikt om de service te verwijderen via WSASetService. Loopback wordt niet ondersteund door RFCOMM.

Er kunnen twee basistypen servicedetectiequery's worden uitgevoerd:

  • Query's voor een of meer services op het lokale apparaat
  • Query's voor een of meer services op een opgegeven peerapparaat

De functie WSALookupServiceBegin ontvangt een WSAQUERYSET- structuur in de parameter lpqsRestrictions. WSALookupServiceBegin voert een clientquery uit op basis van de set zoekbeperkingen die de WSAQUERYSET bevat. Bluetooth-clients moeten de beperkingen opgeven, die worden vermeld in de volgende tabel, in de WSAQUERYSET structuur bij het gebruik van de WSALookupServiceBegin-functie om een query uit te voeren op services.

WSAQUERYSET-lid Beperking
dwSize Ingesteld op grootte van(WSAQUERYSET).
lpServiceClassId Ingesteld op de meest specifieke Bluetooth UUID die kan worden gebruikt om het bereik van de query te bepalen. Als u bijvoorbeeld lpServiceClassId instelt op de UUID van het L2CAP-protocol, resulteert dit in alle geretourneerde L2CAP-services, waarbij alle SD-records op het doel worden geïnventarificeerd. Als u de UUID instelt op een specifieke service, worden echter alleen de exemplaren van die service geretourneerd.
dwNameSpace- Ingesteld op NS_BTH.
dwNumberOfCsAddrs- Ingesteld op 0.
lpszContext- Ingesteld op het Bluetooth-apparaatadres waarmee u een SDP-verbinding tot stand brengt om de query van services uit te voeren. Dit lid moet een tekenreeks zijn die wordt geconverteerd met behulp van de functie WSAAddressToString. Als het lokale radioadres wordt opgegeven, worden de lokale SDP-records doorzocht.
Andere leden Alle andere leden van de WSAQUERYSET structuur worden genegeerd.

De SDP-verbinding met het externe apparaat blijft niet actief nadat de WSALookupServiceBegin functie een servicequery heeft voltooid; de verbinding wordt beëindigd voordat WSALookupServiceBegin retourneert. Toepassingen waarvoor de SDP-verbinding actief moet blijven nadat een servicequery is voltooid, moeten de UUID van de serviceklasse opgeven waarmee verbinding moet worden gemaakt met behulp van het serviceClassId lid van de SOCKADDR_BTH-structuur bij het verlenen van de Windows Sockets verbinding maken functieaanroep.

De vlaggen, vermeld in de volgende tabel, worden gebruikt in de dwControlFlags-parameter parameter van de WSALookupServiceBegin- en WSALookupServiceNext functies om de queryresultaten te beheren. De vlaggen LUP_CONTAINERS en LUP_FLUSHCACHE worden gebruikt door de functie WSALookupServiceBegin; de rest van de vlaggen worden gebruikt in aanroepen naar de functie WSALookupServiceNext.

Vlag Resultaat
LUP_CONTAINERS Mag niet worden ingesteld.
LUP_FLUSHCACHE Toepassingen moeten over het algemeen LUP_FLUSHCACHEopgeven. Met deze vlag wordt het systeem geïnstrueerd om alle gegevens in de cache te negeren en een over-the-air SDP-verbinding met het opgegeven apparaat tot stand te brengen om de SDP-zoekopdracht uit te voeren. Deze bewerking die niet in de cache is opgeslagen, kan enkele seconden duren (terwijl een zoekopdracht in de cache snel wordt geretourneerd). Bluetooth slaat momenteel geen SDP-records proactief op van apparaten in de buurt, noch worden eerdere query's agressief in de cache opgeslagen. Daarom moeten toepassingen verwachten dat query's geen resultaten retourneren (met een foutcode van WSASERVICE_NOT_FOUND) als LUP_FLUSHCACHE niet is opgegeven. De gegevens in de cache die beschikbaar zijn via de Windows Sockets-interface, kunnen in de toekomst worden verbeterd.
LUP_RES_SERVICE Retourneert informatie over het lokale Bluetooth-adres. Deze vlag heeft alleen effect als LUP_RETURN_ADDR ook is opgegeven.
LUP_RETURN_NAME Retourneer de weergavenaam van de service in de lpszServiceInstanceName lid van de WSAQUERYSET structuur voor elke aanroep naar de WSALookupServiceNext functie.
LUP_RETURN_TYPE Retourneert de serviceklasse-id in de lpServiceClassId lid van de WSAQUERYSET structuur. Opmerking: Gebruik van deze vlag is alleen van toepassing op de -functie WSALookupServiceBegin. Deze waarde is altijd nul voor WSALookupServiceNext.
LUP_RETURN_ADDR Retourneer een adres in de lpcsaBuffer lid dat moet worden gebruikt met verbinding maken functieaanroepen. Het geretourneerde adres bevat het poortnummer.
LUP_RETURN_BLOB Retourneer de overeenkomende SD-records in de lpBlob lid, opgemaakt volgens de Specificatie van de Bluetooth SDP-record.
LUP_RETURN_ALL Alle gegevens van de bovenstaande vlaggen retourneren.
LUP_RETURN_COMMENT Retourneert de servicebeschrijving in de lpszComment- lid van de WSAQUERYSET- structuur voor elke aanroep naar de functie WSALookupServiceNext.
LUP_FLUSHPREVIOUS Sla de volgende beschikbare record over en retourneer de record die erop volgt.

Geavanceerde servicequery's

De querybewerkingen die in de vorige sectie worden beschreven, kunnen worden gebruikt om alle resultaten van één GUID te retourneren. Dit moet voldoende zijn voor de meeste toepassingen. Met een geavanceerde query kan een toepassing een specifiekere query maken; het biedt de mogelijkheid om UUID's en kenmerken in geretourneerde informatie te vinden.

Als u een geavanceerde query voor services wilt uitvoeren, moeten Bluetooth-clients de volgende beperkingen opgeven in de WSAQUERYSET structuur die wordt doorgegeven aan de parameter lpqsRestrictions.

WSAQUERYSET-lid Beperking
dwSize Ingesteld op grootte van(WSAQUERYSET).
lpszContext- Ingesteld op het Bluetooth-apparaatadres waarmee u een SDP-verbinding tot stand brengt om de query van services uit te voeren. Dit lid moet een tekenreeks zijn die wordt geconverteerd met behulp van de functie WSAAddressToString. Als het lokale radioadres wordt opgegeven, worden de lokale SDP-records doorzocht.
lpBlob.pBlobData- Wijs een BTH_QUERY_SERVICE structuur aan die alle parameters bevat die de resultaten van de query beperken.
dwNameSpace- Ingesteld op NS_BTH.
Andere leden Alle andere leden van de WSAQUERYSET structuur worden genegeerd.

De volgende vlaggen worden doorgegeven in de dwControlFlags-parameter parameter van WSALookupServiceBegin om de resultaten van een geavanceerde query te beheren.

Vlag Resultaat
LUP_CONTAINERS Mag niet worden ingesteld.
LUP_FLUSHCACHE Toepassingen moeten over het algemeen LUP_FLUSHCACHEopgeven. Met deze vlag wordt het systeem geïnstrueerd om alle gegevens in de cache te negeren en een over-the-air SDP-verbinding met het opgegeven apparaat tot stand te brengen om de SDP-zoekopdracht uit te voeren. Deze bewerking die niet in de cache is opgeslagen, kan enkele seconden duren (terwijl een zoekopdracht in de cache snel wordt geretourneerd). Bluetooth slaat SDP-records van apparaten in de buurt niet proactief in de cache op, noch worden eerdere query's agressief in de cache opgeslagen. Daarom moeten toepassingen verwachten dat query's vaak geen resultaten (WSASERVICE_NOT_FOUND) retourneren als LUP_FLUSHCACHE niet is opgegeven. De gegevens in de cache die beschikbaar zijn via de Windows Sockets-interface, kunnen in de toekomst worden verbeterd.
LUP_RES_SERVICE Retourinformatie voor het lokale Bluetooth-adres. Het instellen van deze vlag heeft alleen effect als LUP_RETURN_ADDRR ook is opgegeven.
LUP_RETURN_NAME Hiermee wordt de weergavenaam van de service geretourneerd. Deze vlag wordt genegeerd voor SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_TYPE Retourneert de serviceklasse-id. Deze vlag wordt genegeerd voor SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_ADDR Retourneer een adres in de lpcsaBuffer lid dat moet worden gebruikt met verbinding maken functieaanroepen. Het geretourneerde adres bevat het poortnummer. Deze vlag wordt genegeerd voor SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_BLOB Retourneer de overeenkomende SD-records in een indeling die voldoet aan de Specificatie van de Bluetooth SDP-record. Voor SDP_SERVICE_SEARCH_REQUESTis het resultaat in lpBlob- voor de volgende aanroep naar WSALookupServiceNext een matrix van Bluetooth SDP-ingangen. Voor SDP_SERVICE_ATTRIBUTE_REQUEST en SDP_SERVICE_SEARCH_ATTRIBUTE_REQUESTis het resultaat voor elke volgende aanroep naar WSALookupServiceNext een binair Bluetooth SDP-record waarvan de kenmerken zijn beperkt tot de kenmerken die zijn opgegeven door de pRange lid van de query. Deze vlag is vereist voor SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_COMMENT Retourneert de servicebeschrijving in de lpszComment- lid van de WSAQUERYSET- structuur voor elke aanroep naar de functie WSALookupServiceNext.
LUP_FLUSHPREVIOUS Sla de volgende beschikbare record over en retourneer de record die erop volgt.

Bij invoer verwijst lpBlob->pBlobData- naar een BTH_QUERY_SERVICE structuur die de waarden bevat die in de volgende tabel worden vermeld.

Notitie

De eerste zoekaanvraag moet in één L2CAP-pakket passen. Het antwoord kan echter worden onderverdeeld in veel L2CAP-pakketten.

Lid Waarde
type Type zoekopdracht dat moet worden uitgevoerd. Deze waarde kan een van SDP_SERVICE_SEARCH_REQUEST, SDP_SERVICE_ATTRIBUTE_REQUESTof SDP_SERVICE_SEARCH_ATTRIBUTE_REQUESTzijn. Elk zoektype is gekoppeld aan een onderliggend zoekmechanisme dat wordt gedefinieerd door de Bluetooth SDP-specificatie. Elk resultaat resulteert in het formulier dat wordt beschreven door de WSAQUERYSET structuur die eerder in deze sectie (Geavanceerde servicequery's) is gedefinieerd.
serviceHandle- Wordt gebruikt voor zoekopdrachten in kenmerken. Met deze waarde geeft u de servicehandgreep op waarmee de kenmerken in de pRange lid moeten worden opvraagt.
uuids Wordt gebruikt voor service- en serviceAttribute zoekopdrachten. Met deze waarde worden de UUID's opgegeven die een record moet bevatten om overeen te komen met de zoekopdracht. Als er minder dan MAX_UUIDS_IN_QUERY UUID's moeten worden opgevraagd, wordt met deze waarde het SdpQueryUuid-element ingesteld dat direct volgt op de laatste geldige UUID op alle nullen.
numRange- Wordt gebruikt voor het kenmerk en serviceAttribute zoekopdrachten. Met deze waarde wordt het aantal elementen in pRangeopgegeven.
pRange- Wordt gebruikt voor het kenmerk en serviceAttribute zoekopdrachten. Met deze waarde worden de kenmerkwaarden opgegeven die moeten worden opgehaald voor overeenkomende records.

Na elke geslaagde aanroep van de functie WSALookupServiceNext verwijst lpBlob->pBlobData- naar een blok gegevens dat de waarden bevat die in de volgende tabel worden vermeld.

Waarde Beschrijving
SDP_SERVICE_SEARCH_REQUEST Een matrix van SDP-recordgrepen die identiek zijn aan de ServiceRecordHandleList gedefinieerd door Bluetooth 1.1 SDP 4.5.2. Het aantal geretourneerde SDP-ingangen wordt berekend op (lpBlob->cbSize)/grootte van(ULONG). Alle resultaten worden geretourneerd in één aanroep naar de functie WSALookupServiceNext.
SDP_SERVICE_ATTRIBUTE_REQUEST of SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST Een binaire Bluetooth SDP-record. Voor SDP_SERVICE_ATTRIBUTE_REQUESTworden alle resultaten geretourneerd in één aanroep naar de functie WSALookupServiceNext.

Notitie

Als het lpBlob- lid niet is opgegeven tijdens invoer voor een servicequery, wordt een service- en kenmerkzoekopdracht uitgevoerd voor de service die is opgegeven in het lpServiceClassId lid op kenmerken van 0 tot en met 0xFFFF.

Bluetooth en WSAQUERYSET voor

Bluetooth-apparaten en -services detecteren

Bluetooth en WSALookupServiceNext

Bluetooth en WSALookupServiceBegin voor apparaatonderzoek

BTH_QUERY_SERVICE

verbinding maken met

SOCKADDR_BTH

WSAAddressToString-

WSALookupServiceBegin-

WSALookupServiceEnd-

WSALookupServiceNext-

WSAQUERYSET

Windows Sockets