DWORD BluetoothSdpGetElementData( __in LPBYTE pSdpStream, __in ULONG cbSpdStreamLength, __out PSDP_ELEMENT_DATA pData ); Parametr...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.

Atrybut usługi składa się z dwóch części: identyfikatora oraz wartości. Parametr
wejściowy cbSpdStreamLength jest rozmiarem wskazywanego rekordu usług.
Wskaźnik pData wskazuje na strukturę:
typedef struct _SPD_ELEMENT_DATA {
SDP_TYPE type;
SDP_SPECIFICTYPE specificType;
union {
SDP_LARGE_INTEGER_16 int128;
LONGLONG int64;
LONG int32;
SHORT int16;
CHAR int8;
SDP_ULARGE_INTEGER_16 uint128;
ULONGLONG uint64;
ULONG uint32;
USHORT uint16;
UCHAR uint8;
UCHAR booleanVal;
GUID uuid128;
ULONG uuid32;
USHORT uuid16;
struct {
LPBYTE value;
ULONG length;
} string;
56
Bluetooth. Praktyczne programowanie
struct {
LPBYTE value;
ULONG length;
} url;
struct {
LPBYTE value;
ULONG length;
} sequence;
struct {
LPBYTE value;
ULONG length;
} alternative;
} data;
} SDP_ELEMENT_DATA, *PSDP_ELEMENT_DATA;
Prawidłowo wykonana funkcja zwraca wartość ERROR_SUCCESS, w przeci-
wnym razie - ERROR_INVALID_PARAMETER.
2.5.2. Funkcja BluetoothSdpEnumAttributes()
Funkcja BluetoothSdpEnumAttributes() analizuje strumień rekordów SDP
i wywołuje funkcję powrotną callback() dla każdego atrybutu rekordu usług.
Każdy atrybut występujący w rekordzie usług opisuje pojedynczą usługę
udostępnianą przez urządzenie Bluetooth.
BOOL BluetoothSdpEnumAttributes(
LPBYTE pSDPStream,
ULONG cbStreamSize,
PFN_BLUETOOTH_ENUM_ATTRIBUTES_CALLBACK pfnCallback,
LPVOID pvParam
);
Wskaźnik pSDPStream wskazuje na pojedynczy rekord SDP. Parametr
cbStreamSize jest rozmiarem strumienia rekordów. Wskaźnik pfnCallback
wskazuje na funkcję callback(), której przykładowa konstrukcja została
zamieszczona poniżej:
BOOL __stdcall callback(ULONG uAttribId, LPBYTE
pValueStream,
ULONG cbStreamSize,
LPVOID pvParam)
{
SDP_ELEMENT_DATA sdpElementData;
wprintf(L"callback() uAttribId: %ul\n", uAttribId);
wprintf(L"callback() pValueStream: %d\n ",
Detekcja urządzeń. Część I
57
pValueStream);
wprintf(L"callback() cbStreamSize: %ul\n ",
cbStreamSize);
if(BluetoothSdpGetElementData(pValueStream,
cbStreamSize,
&sdpElementData)
!= ERROR_SUCCESS) {
//...
return FALSE;
}
else {
//...
return TRUE;
}
}
//----------------------------------------------------
pvParam jest parametrem opcjonalnym. Prawidłowo wykonana funkcja zwraca
wartość TRUE. Zwrócona przez funkcję wartość FALSE oznacza, iż nie można
zanalizować strumienia rekordów SDP. Kod ewentualnego błędu w trakcie
wykonywania funkcji powinien być określony za pomocą GetLastError() i
może być jednym z:
ERROR_INVALID_PARAMETER – wskaźniki pSDPStream lub/i pfnCallback
wskazują na wartość pustą NULL,
ERROR_INVALID_DATA – zawartość strumienia rekordów SDP jest niewÅ‚aÅ›ciwa.
2.5.3. Funkcja BluetoothSdpGetAttributeValue()
Funkcja BluetoothSdpGetAttributeValue() pobiera wartość atrybutu
właściwą jego identyfikatorowi. Identyfikator atrybutu jest 16-bitową daną typu
unsigned int (UINT16).
DWORD BluetoothSdpGetAttributeValue(
__in LPBYTE pRecordStream,
__in ULONG cbRecordLength,
__in USHORT usAttributeId,
__out PSDP_ELEMENT_DATA pAttributeData
);
Wskaźnik pRecordStream wskazuje na rekord usług SDP. Parametr cbRe-
cordLength określa jego rozmiar w bajtach. Parametr usAttributeId jest
identyfikatorem atrybutu w rekordzie usług. Wartości wszystkich identyfikato-
rów atrybutów występujących w rekordach usług zapisane są w formacie
SDP_ATTRIB_Xxx w module bthdef.h. Wskaźnik pAttributeData wskazuje
58
Bluetooth. Praktyczne programowanie
Powered by wordpress | Theme: simpletex | © Jak ciÄ™ zÅ‚apiÄ…, to znaczy, że oszukiwaÅ‚eÅ›. Jak nie, to znaczy, że posÅ‚użyÅ‚eÅ› siÄ™ odpowiedniÄ… taktykÄ….