Bluetooth SDP - где находится sdpd?

Где находится демон протокола обнаружения службы Bluetooth (SDP)?

Я пытаюсь зарегистрировать службу bluetooth на Debian V8.0, используя bluez. Я использую пример кода на https://people.csail.mit.edu/albert/bluez-intro/. Все идет хорошо, пока я не попробую

sdp_connect( BDADDR_ANY, BDADDR_LOCAL, 0 );

который терпит неудачу. После некоторых копаний я обнаружил, что демон sdp (sdpd) (к которому он должен подключиться) не работает и фактически даже не существует в моей системе.

Что я попробовал:

  1. Я установил (apt-get) каждый пакет bluetooth или bluez, который показался мне удаленно релевантным, но до сих пор нет sdpd.
  2. Я попытался подключиться, используя адрес моего телефона Android (используя тот же код). Это работало нормально, но, конечно, бесполезно.
  3. Сделал исчерпывающий поиск в Google по проблеме, но не нашел четких ответов. Много говорят о hcid, pand и т. Д., Но нет четких ответов о том, насколько они актуальны.

Моя цель:

Я пытаюсь зарегистрировать свой сервис в моей системе Debian, чтобы я мог подключиться к нему с другого устройства Bluetooth (в частности, с моего Android). Сервис работает нормально, его просто невозможно найти без регистрации SDP.

Я был бы рад подключиться к нему напрямую, используя его (известный) номер канала, но Android может подключиться только через зарегистрированный UUID службы (т. Е. Используя BluetoothDevice.createRfcommSocketToServiceRecord(uuid)), но я не вижу API для подключения к каналу.

Интересно, что я могу подключиться к услуге на Android по номеру канала, но никак не наоборот. Я думаю, что, возможно, sdpd устарел - все ссылки на него несколько лет.

2 ответа

Решение

Не уверен, поможет ли это вам, но стоит попробовать. У меня также были некоторые проблемы с Debian 8 Bluetooth; Я решил свои проблемы, включив бэкпорт Debian и загрузив новейшую версию бэкпорта blueman, Для этого сначала удалите текущие пакеты Bluetooth (основные, такие как bluez), а затем добавьте эти строки (или аналогичные) в ваш /etc/apt/sources.list

deb http://ftp.debian.org/debian jessie-backports main contrib non-free
deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

Затем запустите apt-get update и установите версию бэкпорта. Я предлагаю использовать следующий код, чтобы убедиться, что файл конфигурации обновлен до последней версии:

apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -qy -o DPkg::options::="--force-confnew" -t jessie-backports install blueman

Перезагрузите компьютер и посмотрите, работает ли он сейчас. Примечание. Включение бэкпорта в Debian не установит все доступные версии бэкпорта программного обеспечения (и вы этого не захотите). Только когда вы специально запросите версию обратного порта (как мы сделали выше), она будет установлена. Все остальные пакеты будут поддерживаться как есть (стабильно). При обновлении ваши пакеты backport будут обновлены до последней версии backport, а ваши стабильные пакеты будут обновлены до последней стабильной версии.

Изменить: Этот ответ был отредактирован, чтобы добавить некоторые улучшения и информацию.

С официального сайта проекта bluez:

BlueZ 5 D-Bus API содержит значительные изменения по сравнению с BlueZ 4. Большая часть изменений обусловлена ​​следующими функциями BlueZ 5:

  • Преобразование для использования стандартных свойств D-Bus и интерфейсов ObjectManager (доступно в документе спецификации D-Bus)
  • Введение версий интерфейса (например, org.bluez.Adapter1). Когда будут представлены новые версии, мы постараемся поддерживать как минимум две последние версии одновременно.
  • Упрощение или удаление интерфейсов для каждого профиля и добавление общего метода org.bluez.Device1.Connect для соединения профилей.
  • Удаление интерфейса org.bluez.Service (используется для регистрации записей SDP и авторизации) и введение нового интерфейса org.bluez.Profile1.
  • Динамическое создание объекта устройства во время обнаружения устройства
  • Внедрение интерфейса AgentManager1
  • Базовый путь перемещен в "/org/bluez". Это не должно иметь большого значения, так как основной точкой входа для любого взаимодействия через D-Bus является вызов ObjectManager.GetManagedObjects.

Короче говоря, начиная с Bluez5, вы не можете использовать sdp_connect() как функции. Вы должны использовать D-Bus. На странице, указанной выше, вы также можете найти следующее:

BlueZ 5 представляет новый универсальный интерфейс D-Bus для реализации внешних профилей. Профиль (находящийся в отдельном процессе) реализует интерфейс org.bluez.Profile1 и регистрирует объект, реализующий его, через новый интерфейс ProfileManager1 на стороне BlueZ. В методе RegisterProfile (на интерфейсе ProfileManager1) профиль должен по крайней мере предоставить UUID для профиля, который должен быть зарегистрирован. BlueZ имеет внутреннюю таблицу значений по умолчанию для общих профилей, поэтому никакой другой информации не требуется. Однако, если профиль желает, он может предоставить такую ​​информацию, как полная запись SDP (в кодировке XML), желаемый уровень безопасности, включение / отключение авторизации, версия, функции, роль, имя и т. Д.

... и много ценной информации.

Пожалуйста, не используйте режим совместимости (я имею в виду опцию "--compat"). Вы должны использовать его только для тестирования и разработки:

commit 83b21cc152186f12f8bc76b7aec3107e220d5219    
Author: Marcel Holtmann <marcel@holtmann.org>   
Date:   Mon Dec 17 14:02:59 2012 +0100

    core: Hide /var/run/sdp support behind command line option

    By default /var/run/sdp support has been disabled from now on. It is not
    the preferred way of handling SDP records. For testing and development
    purposes it can be switched back on via --compat command line option.

И последнее, но не менее важное, вот коллекция полезных ссылок, которые могут помочь новым пользователям / разработчикам, работающим с Bluez5:

[Решено] Видимо, sdpd давно нет. Эта функция была включена в Bluetooth. Чтобы заставить это работать, используйте флаг --compat, например

bluetoothd --compat

Это должно быть добавлено в "/etc/init.d/bluetooth". Благодаря этому я могу успешно подключиться и зарегистрировать свой сервис.

Я нашел подсказку на это в блоге. Почему примечания к выпуску или что-то еще на планете никогда не объявляли об этом, я понятия не имею.

Другие вопросы по тегам