Dela via


Bluetooth och WSALookupServiceBegin för tjänstidentifiering

För att identifiera förekomsten av en viss tjänst på en Bluetooth-server använder klienterna WSALookupServiceBegin, WSALookupServiceNextoch WSALookupServiceEnd funktioner. Frågor kan utföras för lokala adresser och fjärradresser, men anslutningar kan bara upprättas med fjärradresser. Tjänstreferenser som identifieras under den här åtgärden kan inte användas för att ta bort tjänsten via WSASetService. Loopback stöds inte av RFCOMM.

Två grundläggande typer av tjänstidentifieringsfrågor kan utföras:

  • Frågor för en eller flera tjänster på den lokala enheten
  • Frågor för en eller flera tjänster på en angiven peer-enhet

Funktionen WSALookupServiceBegin tar emot en WSAQUERYSET- struktur i dess lpqsRestrictions parameter. WSALookupServiceBegin utför en klientfråga baserat på den uppsättning sökbegränsningar som WSAQUERYSET innehåller. Bluetooth-klienter måste ange begränsningarna i följande tabell i WSAQUERYSET- struktur när du använder funktionen WSALookupServiceBegin för att fråga efter tjänster.

WSAQUERYSET-medlem Begränsning
dwSize Ange till storlek på(WSAQUERYSET).
lpServiceClassId Ange till det mest specifika UUID för Bluetooth som kan användas för att fastställa frågans omfång. Om du till exempel anger lpServiceClassId till UUID för L2CAP-protokollet resulterar det i att alla L2CAP-tjänster returneras, vilket i princip räknar upp alla SD-poster på målet. Att ange UUID till en specifik tjänst returnerar dock endast instanserna av den tjänsten.
dwNameSpace Ange till NS_BTH.
dwNumberOfCsAddrs Ange till 0.
lpszContext Ange den Bluetooth-enhetsadress som du vill upprätta en SDP-anslutning med för att utföra frågan om tjänster. Den här medlemmen måste vara en sträng som konverteras med hjälp av funktionen WSAAddressToString. Om den lokala radioadressen anges genomsöks de lokala SDP-posterna.
Andra medlemmar Alla andra medlemmar i WSAQUERYSET- struktur ignoreras.

SDP-anslutningen till fjärrenheten förblir inte aktiv efter att funktionen WSALookupServiceBegin har slutfört en tjänstfråga. anslutningen avslutas innan WSALookupServiceBegin returnerar. Program som kräver att SDP-anslutningen förblir aktiv när en tjänstfråga har slutförts bör ange tjänstklassens UUID som ska anslutas med hjälp av serviceClassId medlem i SOCKADDR_BTH-strukturen när du utfärdar Windows Sockets ansluta funktionsanrop.

Flaggorna, som visas i följande tabell, används i parametern dwControlFlags för WSALookupServiceBegin och WSALookupServiceNext funktioner för att kontrollera frågeresultatet. Flaggorna LUP_CONTAINERS och LUP_FLUSHCACHE används av funktionen WSALookupServiceBegin. resten av flaggorna används i anrop till funktionen WSALookupServiceNext.

Flagga Resultat
LUP_CONTAINERS Får inte anges.
LUP_FLUSHCACHE Program bör vanligtvis ange LUP_FLUSHCACHE. Den här flaggan instruerar systemet att ignorera cachelagrad information och upprätta en SDP-anslutning via luften till den angivna enheten för att utföra SDP-sökningen. Den här icke-cachelagrade åtgärden kan ta flera sekunder (medan en cachelagrad sökning returnerar snabbt). Bluetooth cachelagrar för närvarande inte SDP-poster proaktivt från närliggande enheter och cachelagrar för närvarande inte heller tidigare frågor. Därför bör program förvänta sig att frågor inte returnerar några resultat (med felkoden WSASERVICE_NOT_FOUND) om LUP_FLUSHCACHE inte har angetts. Cachelagrade data som är tillgängliga med hjälp av Windows Sockets-gränssnittet kan förbättras i framtiden.
LUP_RES_SERVICE Returnera information om den lokala Bluetooth-adressen. Den här flaggan har bara en effekt om LUP_RETURN_ADDR också anges.
LUP_RETURN_NAME Returnera visningsnamnet för tjänsten i lpszServiceInstanceName medlem i WSAQUERYSET struktur för varje anrop till funktionen WSALookupServiceNext.
LUP_RETURN_TYPE Returnera tjänstklass-ID:t i lpServiceClassId medlem i WSAQUERYSET- struktur. Obs! Användning av den här flaggan gäller endast för funktionen WSALookupServiceBegin. Det här värdet är alltid noll för WSALookupServiceNext.
LUP_RETURN_ADDR Returnera en adress i lpcsaBuffer medlem som ska användas med ansluta funktionsanrop. Den returnerade adressen innehåller portnumret.
LUP_RETURN_BLOB Returnera matchande SD-poster i lpBlob- medlem, formaterad enligt Bluetooth SDP-postspecifikationen.
LUP_RETURN_ALL Returnera all information om ovanstående flaggor.
LUP_RETURN_COMMENT Returnera tjänstbeskrivningen i lpszComment- medlem i WSAQUERYSET- struktur för varje anrop till funktionen WSALookupServiceNext.
LUP_FLUSHPREVIOUS Hoppa över nästa tillgängliga post och returnera posten som följer den.

Avancerade tjänstfrågor

De frågeåtgärder som beskrivs i föregående avsnitt kan användas för att returnera alla resultat från ett enda GUID, vilket bör vara tillräckligt för de flesta program. Med en avancerad fråga kan ett program skapa en mer specifik fråga. det ger möjlighet att matcha UUID:er och attribut i returnerad information.

För att utföra en avancerad fråga för tjänster måste Bluetooth-klienter ange följande begränsningar i WSAQUERYSET- struktur som skickas till parametern lpqsRestrictions.

WSAQUERYSET-medlem Begränsning
dwSize Ange till storlek på(WSAQUERYSET).
lpszContext Ange den Bluetooth-enhetsadress som du vill upprätta en SDP-anslutning med för att utföra frågan om tjänster. Den här medlemmen måste vara en sträng som konverteras med hjälp av funktionen WSAAddressToString. Om den lokala radioadressen anges genomsöks de lokala SDP-posterna.
lpBlob.pBlobData Pekare till en BTH_QUERY_SERVICE struktur som innehåller alla parametrar som begränsar resultatet av frågan.
dwNameSpace Ange till NS_BTH.
Andra medlemmar Alla andra medlemmar i WSAQUERYSET- struktur ignoreras.

Följande flaggor skickas i parametern dwControlFlags för WSALookupServiceBegin för att styra resultatet av en avancerad fråga.

Flagga Resultat
LUP_CONTAINERS Får inte anges.
LUP_FLUSHCACHE Program bör vanligtvis ange LUP_FLUSHCACHE. Den här flaggan instruerar systemet att ignorera cachelagrad information och upprätta en SDP-anslutning via luften till den angivna enheten för att utföra SDP-sökningen. Den här icke-cachelagrade åtgärden kan ta flera sekunder (medan en cachelagrad sökning returnerar snabbt). Bluetooth cachelagrar inte SDP-poster proaktivt från närliggande enheter och cachelagrar inte heller tidigare frågor aggressivt. Därför bör program förvänta sig att frågor ofta inte returnerar några resultat (WSASERVICE_NOT_FOUND) om LUP_FLUSHCACHE inte har angetts. Cachelagrade data som är tillgängliga med hjälp av Windows Sockets-gränssnittet kan förbättras i framtiden.
LUP_RES_SERVICE Returnera information för den lokala Bluetooth-adressen. Att ange den här flaggan har bara en effekt om LUP_RETURN_ADDRR också anges.
LUP_RETURN_NAME Returnera visningsnamnet för tjänsten. Den här flaggan ignoreras för SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_TYPE Returnera tjänstklass-ID:t. Den här flaggan ignoreras för SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_ADDR Returnera en adress i lpcsaBuffer medlem som ska användas med ansluta funktionsanrop. Den returnerade adressen innehåller portnumret. Den här flaggan ignoreras för SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_BLOB Returnera matchande SD-poster i ett format som överensstämmer med Bluetooth SDP-postspecifikationen. För SDP_SERVICE_SEARCH_REQUESTär resultatet i lpBlob för det efterföljande anropet till WSALookupServiceNext en matris med Bluetooth SDP-referenser. För SDP_SERVICE_ATTRIBUTE_REQUEST och SDP_SERVICE_SEARCH_ATTRIBUTE_REQUESTär resultatet för varje efterföljande anrop till WSALookupServiceNext en binär Bluetooth SDP-post vars attribut är begränsade till de som anges av pRange medlem i frågan. Den här flaggan krävs för SDP_SERVICE_SEARCH_REQUEST.
LUP_RETURN_COMMENT Returnera tjänstbeskrivningen i lpszComment- medlem i WSAQUERYSET- struktur för varje anrop till funktionen WSALookupServiceNext.
LUP_FLUSHPREVIOUS Hoppa över nästa tillgängliga post och returnera posten som följer den.

Vid indata pekar lpBlob–>pBlobData på en BTH_QUERY_SERVICE struktur som innehåller de värden som anges i följande tabell.

Not

Den första sökbegäran måste kunna passa in i ett L2CAP-paket. Svaret kan dock delas upp i många L2CAP-paket.

Medlem Värde
typ Typ av sökning som ska utföras. Det här värdet kan vara ett av SDP_SERVICE_SEARCH_REQUEST, SDP_SERVICE_ATTRIBUTE_REQUESTeller SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST. Varje söktyp är associerad med en underliggande sökmekanism som definieras av Bluetooth SDP-specifikationen. Varje retur resulterar i formuläret som beskrivs av WSAQUERYSET struktur som definieras tidigare i det här avsnittet (Avancerade tjänstfrågor).
serviceHandle Används för attributsökningar. Det här värdet anger tjänstreferensen för att fråga attributen i pRange medlem.
uuids Används för tjänst- och serviceAttribute- sökningar. Det här värdet anger de UUID:er som en post måste innehålla för att matcha sökningen. Om mindre än MAX_UUIDS_IN_QUERY UUID:er ska frågas, anger det här värdet elementet SdpQueryUuid som omedelbart följer det senaste giltiga UUID:et till alla nollor.
numRange Används för attribut- och serviceAttribute- sökningar. Det här värdet anger antalet element i pRange.
pRange Används för attribut- och serviceAttribute- sökningar. Det här värdet anger de attributvärden som ska hämtas för matchande poster.

Efter varje lyckat anrop till funktionen WSALookupServiceNext pekar lpBlob–>pBlobData på ett datablock som innehåller värdena som anges i följande tabell.

Värde Beskrivning
SDP_SERVICE_SEARCH_REQUEST En matris med SDP-posthandtag som är identisk med ServiceRecordHandleList definieras av Bluetooth 1.1 SDP 4.5.2. Antalet SDP-referenser som returneras beräknas av (lpBlob–>cbSize)/storlek på(ULONG). Alla resultat returneras i ett enda anrop till funktionen WSALookupServiceNext.
SDP_SERVICE_ATTRIBUTE_REQUEST eller SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST En binär Bluetooth SDP-post. För SDP_SERVICE_ATTRIBUTE_REQUESTreturneras alla resultat i ett enda anrop till funktionen WSALookupServiceNext.

Not

Om lpBlob medlem inte anges under indata för en tjänstfråga utförs en tjänst- och attributsökning för den tjänst som anges i lpServiceClassId medlem för attribut från 0 till 0xFFFF.

Bluetooth och WSAQUERYSET för tjänstförfrågan

Identifiera Bluetooth-enheter och -tjänster

Bluetooth och WSALookupServiceNästa

Bluetooth och WSALookupServiceBegin för enhetsförfrågan

BTH_QUERY_SERVICE

ansluta

SOCKADDR_BTH

WSAAddressToString

WSALookupServiceBegin

WSALookupServiceEnd

WSALookupServiceNästa

WSAQUERYSET

Windows Sockets