| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 蓝牙核心规范(V5.2)7.5-深入详解之ATT -> 正文阅读 |
|
[系统运维]蓝牙核心规范(V5.2)7.5-深入详解之ATT |
目录
?ATT协议和服务器、客户端直接的关系
?1.ATT协议速读????????属性协议定义了两个角色:服务器角色和客户端角色。它允许服务器向使用属性协议可访问的客户端公开一组属性。
属性类型指定属性表示什么。蓝牙SIG定义的属性类型在已分配的数字中定义,并由相关的高层规范使用。也可以定义非蓝牙SIG属性类型。 客户端可以向服务器发送属性协议请求,并且服务器应响应其接收到的所有请求。设备可以同时实现客户端和服务器角色,并且这两个角色可以在同一设备中以及在同一设备之间同时工作。每个蓝牙设备上应只有一个服务器实例;这意味着所有支持支架的属性句柄应相同。对于给定的客户端,服务器应具有一组属性。该服务器可以支持多个客户端。
属性协议具有通知和指示功能,提供了一种向客户端发送属性值的有效方式,而不需要读取它们. ?所有属性协议请求都通过ATT承载发送。在两个设备之间可以建立多个ATT载体。每个ATT承载都使用一个单独的L2CAP通道,并且可以有不同的配置。 在LE中,有一个ATT承载使用ACL连接建立后可用的固定通道。可以使用L2CAP建立额外的ATT载体。 在LE中,有一个ATT承载使用ACL连接建立后可用的固定通道。可以使用L2CAP建立额外的ATT载体。 2.ATT协议每个属性都有一个属性类型,通过UUID(通用唯一标识符)标识属性代表什么,以便客户端能够理解服务器公开的属性。每个属性都有一个用于访问服务器上的属性的属性句柄,以及一个属性值。 可以使用其属性句柄访问一个属性值。属性句柄由客户端使用属性协议PDU(协议数据单元)发现。具有相同属性类型的属性可能在服务器中存在多次。属性还具有一组权限,可以控制它们是否可以读取或写,或者属性值是否应该通过加密的链接发送。 属性类型
属性句柄
属性处理分组?
??属性值
属性权限?
控制点属性?
交换MTU大小
长属性值?
?原子操作
?ATT承载器
?3.属性pdu属性PDU有六种类型之一,它们由PDU名称的后缀表示,如表3.1所示:
?服务器应能够接收并正确地响应以下请求pdu:
ATT_FIND_INFORMATION_REQ
ATT_READ_REQ
如果客户端发送了一个请求,那么客户端应支持该请求的所有可能的响应pdu。
如果服务器接收到它不支持的请求,则服务器应使用ATT_ERROR_RSPPDU响应,错误代码不支持请求,错误中的属性句柄设置为0x0000。
如果服务器接收到它不支持的命令,由PDU的命令标志设置为1所指示,则服务器应忽略该命令。
如果服务器收到无效的请求——例如,PDU长度错误——那么服务器应使用ATT_ERROR_RSPPDU响应,错误代码为无效PDU,错误中的属性句柄设置为0x0000。
如果服务器没有足够的资源来处理请求,那么服务器应该使用ATT_ERROR_RSPPDU进行响应,错误代码是资源不足,错误中的属性句柄设置为0x0000。
如果服务器因为在处理此请求时遇到错误而无法处理请求,则服务器应使用ATT_ERROR_RSPPDU响应,错误代码为不可能错误,并将错误中的属性句柄设置为0x0000。
?属性PDU格式
顺序协议
交易
?4.属性协议pdus4.1 错误处理
ATT_ERROR_RSP
ALT_ERROR_RSPPDU用于声明无法执行给定的请求,并提供原因。
注意:ATT_WRITE_CMDPDU不会生成此响应。
“错误中的请求选项码”参数应设置为生成此错误的请求的属性选项码。 “错误中的属性句柄”参数应设置为生成此错误的原始请求中的属性句柄。如果原始请求中没有属性句柄,或者不支持该请求,则此字段应使用值0x0000。 错误代码参数应设置为以下值之一:
如果在ATT_ERROR_RSPPDU中接收到一个客户端不理解的错误代码,例如保留供将来使用的错误代码,那么ATT_ERROR_RSPPDU仍应被视为由于未知原因不能执行给定的请求。 注意:发送ATT_ERROR_RSPPDU不应导致ATT服务器断开与客户端的连接。客户端可以升级安全性并重试请求,因此服务器应该给客户机足够的时间来执行这样的升级。 4.2 MTU交换?ATT_EXCHANGE_MTU_REQ
ATT_EXCHANGE_MTU_RSP
?ATT_EXCHANGE_MTU_RSP PDU。作为对收到的ATT EX、CHANGE MTU REQ PDU的回复发送。
服务器RxMTU应大于或等于默认的ATT_MTU。 服务器RxMTU参数应设置为服务器可以接收到的属性协议PDU的最大大小。 服务器和客户端应将ATT_MTU设置为客户端RxMTU和服务器RxMTU的最小值。大小相同,以确保客户端能够正确检测到长属性读取的最终数据包。 此ATT_MTU值应在发送此响应后和发送任何其他属性协议PDU之前应用于服务器中。 此ATT_MTU值应在收到此响应后和发送任何其他属性协议PDU之前应用于客户端。? 如果客户端RxMTU或服务RxMTU不正确地小于默认ATT_MTU,则ATT_MTU不应被更改,而ATT_MTU应为默认ATT_MTU。 如果设备同时是客户端和服务器,则应适用以下规则: 1.设备的ATT_EXCHANGE_MTU_REQPDU应包含与设备的ATT_EXCHANGE_MTU_RSPPDU相同的MTU(即MTU应为对称)。 2.如果MTU在一个方向上交换,这对于两个方向都足够了。 3.允许使用(但没有必要,请参见2)。在两个方向上交换MTU,但在每个方向上的MTU应相同(见1)。 4.如果在MTU交换请求发送之后和MTU交换响应收到之前收到了属性协议请求,则相关的属性协议响应应使用默认的MTU。图3.1显示了此规则所涵盖的一个示例。在这种情况下,设备A和设备B都使用默认的属性协议响应MTU。 5.一旦发送了MTU交换请求,启动设备就不应在收到MTU交换响应后才会发送属性协议指示或通知。注意:这将停止对指示或通知的MTU大小未知的交叉条件的风险。 ?4.3?查找信息
ATT_FIND_INFORMATION_REQ
?ATT_FIND_INFORMATION_REQPDU用于获取属性处理柄及其关联类型的映射。这允许客户端在服务器上发现属性及其类型的列表。
只返回具有属性句柄的属性,包括开始句柄参数和结束句柄参数。要读取所有属性,起始手柄参数设置为0x0001,结束手柄参数设置为0xFFFF。起始手柄参数应小于或等于结束手柄参数。 如果将返回一个或多个属性,则应发送一个ATT_FIND_INFORMATION_RSPPDU。 如果服务器接收到的ATT_FIND_INFORMATION_REQPDU参数大于“结束手柄”参数或“起始手柄”参数0x0000,应发送带错误代码“错误手柄”的ATT_ERROR_RSPPDU;“属性手柄”参数应设置为“起始手柄”参数。 如果不返回任何属性,则应发送ATT_ERROR_RSPPDU,并显示错误代码“找不到属性”;“错误中的属性句柄”参数应设置为“起始句柄”参数。 服务器不得使用ATT_ERROR_RSPPDU响应ATT_FIND_INFORMATION_REQPDU,其错误代码为认证不足、授权不足、加密密钥大小不足或应用程序错误。
ATT_FIND_INFORMATION_RSP
ATT_FIND_INFORMATION_RSPPDU将响应接收到的ATT_FIND_INFORMATION_REQPDU,并包含有关此服务器的信息。
?查找信息响应应具有完整的手柄-UUID对。这种对不应跨响应分组进行分割;这也意味着一个车把UUID对应适合到单个响应分组中。句柄-UUID对应按属性句柄的升序返回。 格式参数可以包含两个可能的值中的一个.
信息数据字段由表3.10和表3.11中定义的数据列表组成,这取决于为格式选择的值。
?如果顺序属性具有不同的UUID大小,ATT_FIND_-INFORMATION_RSPPDU将以对的第一个属性结束,即使这可能意味着它没有填充最大可能的数量(句柄、UUID)对。这是因为不可能在单个响应包中包含具有不同UUID大小的属性。在这种情况下,客户端必须使用另一个ATT_FIND_INFORMATION_REQPDU并更新其启动句柄,以获取该对的第二个属性以及其原始请求中的任何其他属性。
ATT_FIND_BY_TYPE_VALUE_REQ
?ATT_FIND_BY_TYPE_VALUE_REQPDU用于获取具有16位UUID属性类型和属性值的属性的句柄。这允许在属性类型决定一组属性的分组时发现与给定属性相关联的句柄范围。 注意:通用属性配置文件按属性类型定义了属性的分组。
只返回具有属性句柄的属性,其中包括起始句柄参数和符合请求的属性类型和具有足够权限允许读取的属性值。要读取所有属性,起始手柄参数设置为0x0001,结束手柄参数设置为0xFFFF。? 如果将返回一个或多个句柄,则应发送一个ATT_FIND_BY_TYPE_VALUE_RSPPDU。 注意:属性值将根据长度和二进制表示法进行比较。 注意:不能对值大于(ATT_MTU-7)的属性使用此请求。 如果服务器接收到的ATT_FIND_BY_TYPE_VALUE_REQPDU的启动句柄参数大于结束句柄参数或启动句柄参数为0x0000,则应发送具有错误代码无效句柄的ATT_ERROR_RSPPDU。错误中的属性句柄参数应设置为起始句柄参数。 如果不返回任何属性,则服务器应发送ATT_ERROR_RSPPDU,错误代码为未找到ATT_ERROR_RSPPDU。错误中的属性句柄参数应设置为起始句柄。 服务器不得使用ATT_ERROR_RSPPDU响应ATT_FIND_BY_TYPE_VALUE_REQPDU,其错误代码为认证不足、授权不足、加密密钥大小不足、加密不足或应用程序错误。
ATT_FIND_BY_TYPE_VALUE_RSP
?ATT_FIND_BY_TYPE_VALUE_RSPPDU将响应接收到的ATT_FIND_BY_TYPE_VALUE_REQPDU,并包含有关此服务器的信息。
句柄信息段范围:
ATT_FIND_BY_TYPE_VALUE_RSPPDU应包含一个或多个完整的处理信息。此类处理信息不得被分开响应数据包。句柄信息列表将根据已找到的属性句柄按顺序排序。 对于与ATT_FIND_BY_TYPE_VALUE_REQPDU中的属性类型和属性值相匹配的每个句柄,应返回一个句柄信息。“找到的属性句柄”应设置为具有来自ATT_FIND_BY_-TYPE_VALUE_REQPDU的确切属性类型和属性值的属性的句柄。如果ATT_FIND_BY_TYPE_-VALUE_REQPDU中的属性类型是由高层规范定义的分组属性,则组结束句柄应由更高的层规范定义。如果ATT_FIND_BY_TYPE_VALUE_REQPDU中的属性类型不是由更高级层规范定义的分组属性,则组结束句柄应等于已找到的属性句柄。 注意:组结束句柄可能大于ATT_FIND_BY_TYPE_VALUE_REQ PDU中的结束句柄。 如果服务器接收到ATT_FIND_BY_TYPE_VALUE_REQPDU,服务器应使用ATT_FIND_BY_TYPE_VALUE_REQPDU响应,其中包含尽可能多的句柄,匹配的属性与服务器中存在的属性类型和属性值符合最大PDU大小(ATT_MTU-1)。 4.4 读属性
ATT_READ_BY_TYPE_REQ
?ATT_READ_BY_TYPE_REQPDU用于获取属性类型已知但句柄不知道的属性的值。
将只返回具有属性句柄之间的属性,包括开始句柄和与给定的属性类型相同的属性类型相同的结束句柄。搜索所有属性,起始手柄设置为0x0001,结束手柄设置为0xFFFF。
?起始句柄应小于或等于结束句柄。如果服务器接收到的ATT_READ_BY_TYPE_REQPDU参数大于“结束句柄”参数或“起始手柄”参数为0x0000,则应发送ATT_ERROR_RSPPDU,且错误代码为“错误句柄”;“属性句柄”参数应设置为“起始句柄”参数。 如果在句柄范围内不存在给定类型的属性,则不会返回属性句柄和值,并发送包含错误代码的ATT_ERROR_RSPPDU。错误中的属性句柄参数应设置为起始句柄。 ?返回的属性应为句柄范围内句柄最低的属性。这些属性被称为所请求的属性。 如果在句柄范围内具有所请求类型的属性具有相同长度的属性值,那么这些属性都可以在单个请求中读取。 属性服务器应在响应中包含尽可能多的属性,以尽量减少读取相同类型的属性所需的pdu数量。 注意:如果在句柄范围内具有所请求类型的属性具有不同长度的属性值,则必须发出多个ATT_READ_BY_TYPE_REQPDU。 ?当多个属性匹配时,应将以下规则依次应用于每个规则。
如果所请求的属性有足够的权限来允许读取,则服务器应使用ATT_READ_BY_TYPE_RSPPDU进行响应。 如果客户端没有足够的安全性来读取所请求的属性,则应发送具有错误代码的ATT_ERROR_RSPPDU,且认证不足。错误中的属性句柄参数应设置为导致错误的属性的句柄。 ATT_READ_BY_TYPE_RSP? ?发送ATT_READ_BY_TYPE_RSP PDU以回复收到的ATT_READ_BY_TYPE_REQ PDU,并包含已读取属性的句柄和值。
ATT_READ_BY_TYPE_RSPPDU应包含完整的手柄值对。这些数据对不得跨响应数据包进行分组。句柄值对应根据属性句柄按顺序返回。 长度参数应设置为一个属性句柄值对的大小。 属性句柄值对的最大长度为255字节,以一个八进制的长度参数为限。因此,在此响应中返回的属性值的最大长度是(长度-2)=253字节。 属性句柄值对应设置为请求内句柄范围内的属性类型标识的属性的值。如果属性值大于(ATT_MTU-4)或253字节,以较小者为准,则第一个(ATT_MTU-4)或253字节应包含在此响应中。 ?ATT_READ_REQ ?ATT_READ_REQPDU用于请求服务器读取属性的值,并在ATT_READ_RSPPDU中返回其值。
?如果客户端没有足够的权限读取请求的属性,则应以错误代码发送ATT_ERROR_RSPPDU。 如果客户端没有足够的安全性来读取所请求的属性,则应发送具有错误代码的ATT_ERROR_RSP PDU,且认证不足。 如果客户端的加密密钥大小不足,无法读取所请求的属性,则应发送一个ATT_ERROR_RSPPDU,其错误代码为加密密钥大小不足。 如果客户端没有启用加密,并且需要加密才能读取所请求的属性,则应发送一个ATT_ERROR_RSP PDU,错误代码为加密不足。 如果句柄无效,则应发送具有错误代码无效句柄的ATT_ERROR_RSP PDU。 如果由于权限而无法读取属性值,则应使用错误代码发送ATT_ERROR_RSP PDU。
ATT_READ_RSP
?属性值应设置为请求中属性句柄标识的属性值。如果属性值大于(ATT_MTU-1),则应将第一个(ATT_MTU-1)包含在此响应中。
ATT_READ_BLOB_REQ
ATT_READ_BLOB_RSPPDU用于请求服务器读取给定偏移量下的属性值的一部分,并在ATT_READ_BLOB_RSPPDU中返回该值的特定部分。
属性句柄参数应设置为一个有效的句柄
值偏移参数基于零;第一个值的偏移量为零,第二个值偏移量为1,等等。
如果句柄有效,且属性和值偏移量不大于属性值的长度,且具有足够的权限允许读取,则服务器应使用ATT_READ_BLOB_RSPPDU进行响应。
如果客户端没有足够的权限读取请求的属性,则应以错误代码发送ATT_ERROR_RSPPDU。
如果客户端没有足够的安全性来读取所请求的属性,则应发送具有错误代码的ATT_ERROR_RSPPDU,且认证不足。 如果客户端没有足够的权限读取请求的属性,则应以错误代码发送ATT_ERROR_RSPPDU。 如果客户端的加密密钥大小不足,无法读取所请求的属性,则应发送一个ATT_ERROR_RSP PDU,其错误代码为加密密钥大小不足。 如果客户端没有启用加密,并且需要加密才能读取所请求的属性,则应发送一个ATT_ERROR_RSP PDU,错误代码为加密不足。 如果句柄无效,则应发送具有错误代码无效句柄的ATT_ERROR_RSP PDU。 如果由于权限而无法读取属性值,则应使用错误代码发送ATT_ERROR_RSP PDU。 如果读取Blob请求的偏移值大于属性值的长度,则应发送带有错误码的ATT_ERROR_RSP PDU无效偏移的ATT_ERROR_RSP PDU。 如果属性值的固定长度小于或等于(ATT_MTU-1)八位节,则可以使用错误代码属性长短发送ATT_ERROR_RSPPDU。 如果ATT_READ_BLOB_REQPDU的值偏移量等于属性值的长度,则响应中的零件属性值的长度应为零。 注意:如果属性大于(ATT_MTU-1)八进制,则ATT_READ_-BLOB_REQPDU是读取长属性的附加八进制的唯一方法。第一个(ATT_MTU-1)八进制可以使用ATT_READ_RSP、ATT_HANDLE_VALUE_NTF或ATT_HANDLE_VALUE_INDPDU来读取。 ATT_READ_BLOB_RSP ATT_READ_BLOB_RSPPDU是响应接收到的ATT_READ_BLOB_REQPDU,并包含已读取的属性的部分值。
ATT_READ_MULTIPLE_REQ
ATT_READ_MULTIPLE_REQ PDU用于请求服务器读取一组属性的两个或多个值,并在ATT_READ_MULTIPLE_RSP PDU中返回其值。只能读取具有已知固定长度的值,除了最后一个可以具有可变长度的值。关于属性是否具有已知的固定大小的知识将在更高的层规范中定义。
“句柄集”参数中的属性句柄应为有效的句柄。
?如果所有句柄都有效,并且所有属性都有足够的权限允许读取,则服务器应使用ATT_READ_MULTIPLE_RSPPDU进行响应。 注意:处理集参数中属性的属性值不必都具有相同的大小。 注意:“手柄集”参数中的属性句柄不必按属性句柄的顺序排列;它们按响应中需要的值的顺序排列。 如果客户端没有足够的授权来读取任何属性,则应与错误代码和授权不足一起发送ATT_ERROR_RSPPDU。
如果客户端没有足够的安全性来读取任何属性,则应发送ATT_ERROR_RSPPDU,错误代码为ATT_ERROR_RSPPDU认证不足。
如果客户端的加密密钥大小不足,无法读取任何属性,则应发送一个ATT_ERROR_RSPPDU,错误代码为加密密钥大小不足。
如果客户端没有启用加密,并且需要加密才能读取请求的属性,则应发送ATT_ERROR_RSPPDU,错误代码加密不足。
如果任何句柄无效,则应发送包含错误代码无效句柄的ATT_ERROR_RSPPDU。
如果由于权限而无法读取任何属性值,则应发送ATT_ERROR_RSPPDU,错误代码为禁止读取ATT_ERROR_RSPPDU。
如果发送了ATT_ERROR_RSPPDU,则应将错误中的属性句柄参数设置为导致错误的第一个属性的句柄。
ATT_READ_MULTIPLE_RSP
?ATT_READ_MULTIPLE_RSPPDU是响应接收到的ATT_READ_MULTIPLE_REQPDU,并包含已读取的属性的值。
值集参数应该是请求中每个属性句柄的属性值的连接。如果“各值集”参数大于(ATT_MTU-1),则只有第一个(ATT_MTU-1)八位位包含在此响应中。 ?注意:当“各值集”参数可能为(ATT_MTU-1)时,客户端不应使用此属性请求,因为无法确定最后一个属性值是否完成,或者是否溢出。
ATT_READ_BY_GROUP_TYPE_REQ
ATT_READ_BY_GROUP_TYPE_REQPDU用于获取属性类型已知的属性的值,由更高层规范定义的分组属性的类型,但句柄不知道。
只返回具有属性句柄的属性,包括开始句柄和与属性类型给出的属性组类型相同的结束句柄。搜索所有属性,起始手柄设置为0x0001,结束手柄设置为0xFFFF。 ?注意:所有属性类型都可以有效地与128位uuid进行比较,即使在此请求中提供了16位UUID或为属性定义了UUID。 起始句柄应小于或等于结束句柄。如果服务器接收到的ATT_READ_BY_GROUP_TYPE_REQPDU的起始句柄参数大于“结束句柄”参数或“起始句柄”参数为0x0000,则应发送ATT_ERROR_RSPPDU,并包含错误代码“无效句柄”错误代码。错误中的属性句柄参数应设置为起始句柄参数。 如果属性组类型不是由高层规范定义的支持的分组属性,则应使用错误代码发送ATT_ERROR_RSP PDU,代码为不支持的组PDU。“错误中的属性句柄”参数应设置为起始句柄。 ?如果在句柄范围内不存在给定类型的属性,则不会返回属性句柄和值,并发送包含错误代码的ATT_ERROR_RSP PDU。错误中的属性句柄参数应设置为起始句柄。 返回的属性应为句柄范围内句柄最低的属性。这些属性被称为所请求的属性。 如果在句柄范围内具有所请求类型的属性具有相同长度的属性值,那么这些属性都可以在单个请求中读取。 属性服务器应在响应中包含尽可能多的属性,以尽量减少读取相同类型的属性所需的pdu数量。 注意:如果在句柄范围内具有所请求类型的属性具有不同长度的属性值,则必须发送多个ATT_READ_BY_GROUP_-TYPE_REQPDU。 当多个属性匹配时,应将以下规则依次应用于每个规则。
如果所请求的属性有足够的权限来允许读取,则服务器应使用ATT_READ_BY_GROUP_TYPE_RSPPDU进行响应。 如果客户端没有足够的权限读取请求的属性,则应以错误代码发送ATT_ERROR_RSPPDU。错误中的属性句柄参数应设置为导致错误的属性的句柄。 如果客户端没有足够的安全性来读取所请求的属性,则应发送具有错误代码的ATT_ERROR_RSPPDU,且认证不足。错误中的属性句柄参数应设置为导致错误的属性的句柄。 如果客户端的加密密钥大小不足,无法读取所请求的属性,则应发送一个ATT_ERROR_RSPPDU,其错误代码为加密密钥大小不足。错误中的属性句柄参数应设置为导致错误的属性的句柄。 如果客户端没有启用加密,并且需要加密才能读取请求的属性,则应发送ATT_ERROR_RSPPDU,错误代码加密不足。错误中的属性句柄参数应设置为导致错误的属性的句柄。 如果由于权限而无法读取所请求属性的值,则ATT_ERROR_RSPPDU应发送错误代码不允许读取PDU。错误中的属性句柄参数应设置为导致错误的属性的句柄。 注意:如果在句柄范围内有多个请求类型的属性,并且客户端希望获得请求类型的下一个属性,它必须发布另一个启动句柄更新的ATT_READ_BY_GROUP_TYPE_REQPDU。一旦客户端获得一个没有找到错误代码属性的ATT_ERROR_RSPPDU,客户端就不再剩下这样的属性了。
ATT_READ_BY_GROUP_TYPE_RSP
ATT_READ_BY_GROUP_TYPE_RSPPDU是响应接收到的ATT_READ_BY_GROUP_TYPE_REQPDU,并包含已读取的属性的句柄和值。
ATT_READ_BY_GROUP_TYPE_RSPPDU应包含完整的属性数据。属性数据不应跨响应数据包进行分割。属性数据列表将根据属性句柄按顺序排序。? 长度参数应设置为一个属性数据的大小. 属性数据的最大长度为255八进制,由一个八进制的长度参数为限。因此,在此响应中返回的属性值的最大长度是(长度-4)=251个字节。 ATT_READ_MULTIPLE_VARIABLE_REQ ATT_READ_MULTIPLE_VARIABLE_REQPDU用于请求服务器读取一组具有变量或未知值长度的属性的两个或多个值,并在ATT_READ_MULTIPLE_-VARIABLE_RSPPDU中返回它们的值。
?ATT_READ_MULTIPLE_VARIABLE_RSP ATT_READ_MULTIPLE_VARIABLE_RSPPDU是响应接收到的ATT_READ_MULTIPLE_VARIABLE_REQPDU,并包含已读取的属性的长度和值。
长度值元组列表应该是请求中每个属性句柄的请求顺序的长度值元组的连接。如果长度值元组列表大于(ATT_MTU-1)八位符,则应在长度值元组的开头对(长度值-1)之后,或者在长度值元组的值长度字段内的长度值元组进行截断。 4.5 写属性
ATT_WRITE_REQ
ATT_WRITE_RSP
ATT_WRITE_CMD
ATT_SIGNED_WRITE_CMD
4.6 队列写
ATT_PREPARE_WRITE_REQ
ATT_PREPARE_WRITE_RSP
ATT_EXECUTE_WRITE_REQ
ATT_EXECUTE_WRITE_RSP
4.7 已启动服务器?ATT_HANDLE_VALUE_NTF
ATT_HANDLE_VALUE_IND
ATT_HANDLE_VALUE_CFM
ATT_MULTIPLE_HANDLE_VALUE_NTF
4.8 属性操作值总结
4.9?属性PDU响应总结????????表给出了允许的属性PDU方法响应的摘要。每个方法都表示应该作为成功响应发送的方法,以及是否可以作为响应发送ATT_ERROR_RSPPDU。如果可以发送ATT_ERROR_RSPPDU,那么表还指示了对于给定方法在此ATT_ERROR_RSPPDU中有效的错误码。
5.安全属性协议可用于访问在属性被读写之前可能需要授权和经过身份验证和加密的物理链接的信息。 如果在客户端未被授权访问此信息时发出此类请求,服务器应发送一个错误代码设置为授权不足的ATT_ERROR_RSPPDU。本部分中未定义访问给定属性的授权要求。每个设备的实现都将决定授权发生的方式。授权程序在GAP中定义,并可以在更高的层规范中进一步细化。 如果在物理链路未经身份验证时发出这样的请求,服务器应发送一个ATT_ERROR_RSPPDU,错误代码设置为认证不足。想要读写此属性的客户端可以请求对物理链接进行身份验证,一旦完成,将再次发送该请求。 属性协议可用于通知或指示在执行属性通知或指示之前可能需要经过身份验证和加密的物理链接的属性的值。想要通知或指示此属性的服务器可以请求对物理链接进行身份验证,一旦完成,就发送通知或指示。 设备支持的属性列表不被认为是私有或机密信息,因此应始终允许ATT_FIND_INFORMATION_REQPDU。这意味着在ATT_FIND_INFORMATION_REQPDU的ATT_ERROR_RSPPDU中不应使用错误代码授权不足或授权不足的身份验证。 例如,属性值可以允许任何设备读取,但只能由经过身份验证的设备写入。实现应该考虑到这一点,而不是假设仅仅因为它可以读取属性的值,它就将能够写入该值。类似地,仅仅因为一个属性值可以被写入,并不意味着一个属性值也可以被读取。每个单独属性都可能有不同的安全要求。 当客户端访问属性时,在服务器上执行的检查顺序将产生安全影响。在执行任何其他检查之前,服务器应检查身份验证和授权要求。 注意:例如,如果不先执行身份验证和授权要求检查,则可以通过发送客户端无法访问的属性的重复ATT_READ_BLOB_REQpdu来确定属性的大小,因为将返回错误代码无效偏移或身份验证不足。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 16:26:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |