Параметры Bluetooth и сокета
Bluetooth для Windows поддерживает следующие параметры сокетов. Параметры сокета задаются и запрашиваются с помощью функций setsockopt и getsockopt соответственно. Все перечисленные ниже параметры можно использовать с функцией setsockopt , но только параметр SO_BTH_MTU доступен для использования с функцией getsockopt .
Для работы с параметрами сокета Bluetooth требуются следующие параметры:
- Параметр s должен быть сокетом Bluetooth.
- Параметр level должен быть SOL_RFCOMM.
SO_BTH_AUTHENTICATE
Для отключенных сокетов SO_BTH_AUTHENTICATE указывает, что для успешного завершения операции подключения или принятия требуется проверка подлинности. Установка этого параметра сокета активно инициирует проверку подлинности во время установки подключения, если два устройства Bluetooth ранее не прошли проверку подлинности. При необходимости пользовательский интерфейс для обмена ключами доступа предоставляется операционной системой вне контекста приложения.
Для исходящих подключений, требующих проверки подлинности, операция подключения завершается ошибкой WSAEACCES , если проверка подлинности не прошла успешно. В ответ приложение может предложить пользователю пройти проверку подлинности двух устройств Bluetooth перед подключением.
Для входящих подключений соединение отклоняется, если не удается установить проверку подлинности, и возвращает ошибку WSAEHOSTDOWN . Дополнительные сведения о проверке подлинности устройств Bluetooth см. в разделе BluetoothAuthenticateDevice.
Для параметра сокета SO_BTH_AUTHENTICATEпараметр optval является указателем на ULONG bAuthenticate и должен иметь значение TRUE; optlen эквивалентен sizeof(ULONG).
Windows XP с пакетом обновления 2 (SP2): SO_BTH_AUTHENTICATE запускает проверку подлинности для подключенных сокетов и принудительно выполняет проверку подлинности при подключении для неподключенных сокетов. Для входящих подключений соединение отклоняется, если не удается выполнить проверку подлинности.
SO_BTH_ENCRYPT
Для неподключенных сокетов параметр сокета SO_BTH_ENCRYPT принудительно применяет шифрование для установления соединения. Шифрование доступно только для подключений, прошедших проверку подлинности. Для входящих подключений соединение, для которого не удается установить шифрование, автоматически отклоняется и возвращает WSAEHOSTDOWN в качестве ошибки. Для исходящих подключений функция подключения завершается ошибкой WSAEACCES , если не удается установить шифрование. В ответ приложение может предложить пользователю пройти проверку подлинности двух устройств Bluetooth перед подключением. Дополнительные сведения о проверке подлинности устройств Bluetooth см. в разделе BluetoothAuthenticateDevice.
Для параметра сокета SO_BTH_ENCRYPT параметр optval является указателем на ULONG bEncrypt и должен иметь значение TRUE; optlen эквивалентно sizeof(ULONG).
Windows XP с пакетом обновления 2 (SP2): Для сокета, который подключен и прошел проверку подлинности, SO_BTH_ENCRYPT запускает шифрование.
SO_BTH_MTU
Параметр сокета SO_BTH_MTU — это расширенный параметр, используемый в основном для проверки. Параметр SO_BTH_MTU получает или задает значение по умолчанию RFCOMM MTU (максимальная единица передачи) для согласования соединения со значением, отличным от значения протокола RFCOMM по умолчанию.
Так как rfcomm MTU зависит от базового MTU L2CAP, а также минимальных и максимальных значений протокола и приложений, значение по умолчанию для SO_BTH_MTU является лишь отправной точкой для согласования с удаленным одноранговым узлом, а окончательный согласованный MTU, скорее всего, будет отличаться от значения по умолчанию. Установка значения SO_BTH_MTU может негативно повлиять на пропускную способность, поэтому любое изменение должно выполняться с знанием базового протокола Bluetooth.
Параметр SO_BTH_MTU сокета может выполняться на подключенных сокетах, но не действует, если согласование уже завершено. Установка этого параметра в сокете прослушивания (сервер) не оказывает влияния.
MTU не влияет на объем данных, которые приложение может отправлять или получать в одном вызове сокета; MTU влияет только на то, как базовый поставщик службы Windows Sockets сегментирует пакеты для транспорта. Предлагаемые MTU и MTU должны находиться между RFCOMM_MIN_MTU и RFCOMM_MAX_MTU, как определено в файле заголовка Ws2bth.h.
Для параметра сокета SO_BTH_MTUoptval — это указатель на MTU ULONG; optlen эквивалентен sizeof(ULONG).
SO_BTH_MTU_MAX
Параметр сокета SO_BTH_MTU_MAX — это расширенный параметр, используемый в основном для проверки. Параметр сокета SO_BTH_MTU_MAX задает максимальное значение RFCOMM MTU (максимальная единица передачи) для согласования подключений. Подключения с MTU RFCOMM, равным или превышающим это значение, завершаются сбоем во время процессапринятияподключения/. Хотя установка этого параметра сокета разрешена для подключенного сокета, она не действует, если согласование завершено. Установка этого параметра для прослушивающего сокета распространяет значение для всех входящих подключений. Значение MAX MTU должно находиться в диапазоне от RFCOMM_MIN_MTUдо RFCOMM_MAX_MTU, как определено в файле заголовка Ws2bth.h.
Для параметра сокета SO_BTH_MTU_MAXoptval — это указатель на ULONG max_mtu; optlen эквивалентен sizeof(ULONG).
SO_BTH_MTU_MIN
Параметр сокета SO_BTH_MTU_MIN — это расширенный параметр, используемый в основном для проверки. Параметр сокета SO_BTH_MTU_MIN задает минимальный MTU RFCOMM (максимальная единица передачи) для согласования подключений. Подключения с MTU RFCOMM меньше этого значения завершаются ошибкой во время процессапринятияподключения/. Хотя установка этого параметра сокета разрешена для подключенного сокета, она не действует, если согласование завершено. Установка этого параметра для прослушивающего сокета распространяет значение для всех входящих подключений.
Только прослушивающий сокет может пересматривать MTU вниз, поэтому, если значение, предлагаемое соединительным сокетом, меньше значения, установленного для SO_BTH_MTU_MIN в сокете прослушивания, подключение отклоняется. Минимальный MTU должен находиться в диапазоне от RFCOMM_MIN_MTUдо RFCOMM_MAX_MTU, как определено в файле заголовка Ws2bth.h.
Для параметра сокета SO_BTH_MTU_MIN optval — это указатель на ULONG min_mtu; optlen эквивалентен sizeof(ULONG).
BluetoothAuthenticateDevice function (bluetoothapis.h)
The BluetoothAuthenticateDevice function sends an authentication request to a remote Bluetooth device.
Note When developing for Windows Vista SP2 and Windows 7 the use of BluetoothAuthenticateDeviceEx is recommended.
Syntax
DWORD BluetoothAuthenticateDevice( HWND hwndParent, HANDLE hRadio, BLUETOOTH_DEVICE_INFO *pbtbi, PWSTR pszPasskey, ULONG ulPasskeyLength );
Parameters
A window to be the parent of the Authentication wizard. If set to NULL, the wizard is removed from the desktop.
A valid local radio handle, or NULL. If NULL, authentication is attempted on all local radios; if any radio succeeds, the function call succeeds.
A structure of type BLUETOOTH_DEVICE_INFO that contains the record of the Bluetooth device to be authenticated.
A Personal Identification Number (PIN) to be used for device authentication. If set to NULL, the user interface is displayed and the user must follow the authentication process provided in the user interface. If pszPasskey is not NULL, no user interface is displayed. If the passkey is not NULL, it must be a NULL-terminated string. For more information, see the Remarks section.
The size, in characters, of pszPasskey. The size of pszPasskey must be less than or equal to BLUETOOTH_MAX_PASSKEY_SIZE.
Return value
Returns ERROR_SUCCESS upon successful completion.
Common errors are listed in the following table.
Return code | Description |
---|---|
ERROR_CANCELLED | The user canceled the operation. |
ERROR_INVALID_PARAMETER | The device structure in the pbtdi parameter is not valid. |
ERROR_NO_MORE_ITEMS | The device pointed to by pbtdi is already marked as authenticated. |
Remarks
Some remote Bluetooth devices can only accept numeric passkeys. There is no way to identify which devices only accept numeric passkeys in advance.
The Bluetooth authentication process has two modes: Wizard mode and Transparent mode.
Wizard mode is started when pszPasskey is set to NULL, and the Bluetooth Connection Wizard is started. The user is prompted to enter a passkey as a step in the wizard, after which the authentication request is sent. The user interface displays whether the authentication attempt succeeds or fails, and provides the user with an opportunity to reattempt a failed authentication.
Transparent mode is started when pszPasskey is not NULL. In Transparent mode the authentication request is sent to the remote Bluetooth device without displaying any user interface. In Transparent mode, the Bluetooth status code is mapped to a Win32 error code; the following table lists this mapping information.
Requirements
Minimum supported client | Windows Vista, Windows XP with SP2 [desktop apps only] |
Minimum supported server | None supported |
Target Platform | Windows |
Header | bluetoothapis.h (include Bthsdpdef.h, BluetoothAPIs.h) |
Library | Bthprops.lib |
DLL | bthprops.cpl |