首页 > 解决方案 > Bluez GATT 服务器(外围)安全特性读取

问题描述

我在 CPP 中实现了一个 GATT 服务器,它通过 DBUS API 与 Bluez 堆栈通信。我能够做广告、展示特征并让客户与我联系。我的参考是 bluez 文件夹中的 doc 和 test 文件夹。

我想让我的特征只能在安全(而非传统)配对时访问。所以我在我的特性中添加了“安全写入”和“安全读取”标志。当我尝试使用 nRF 连接工具读取和写入它们时,我看到 bluez 没有强制配对请求,并且我能够读取/写入特征。

我的应用程序没有向 bluez 注册任何代理,因为我的外围设备具有 NoInputOutput 功能。

static int GetHandlerGattChar(sd_bus* bus, const char* path, const char* interface, const char* prop, sd_bus_message* reply,
                      void* userdata, sd_bus_error* error) {
.....
    if (property == "UUID") {
        ret = sd_bus_message_append(reply, "s", "12345678-1234-5678-1234-56789abcdef1");
    } else if (property == "Service") {
        ret = sd_bus_message_append(reply, "o", DBUS_OBJECT_SERVICE0_NAME.c_str());
    } else if (property == "Flags") {
        ret = sd_bus_message_append(reply, "as", 3, "write-without-response", "secure-write", "secure-read");
    } else {
        ret = sd_bus_error_set(error, SD_BUS_ERROR_UNKNOWN_PROPERTY, "" /* message*/);
    }
......
}

我不明白我错过了什么。任何帮助/支持将不胜感激。

标签: c++linuxbluezgatt

解决方案


推荐阅读