今天分析SDP协议,SDP看完后,会去解析部分代码;
一、概念
1、定义:
SDP(service discovery profile)服务搜索协议;由于蓝牙服务在不断增加,一个设备不可能也没有必要支持所有服务,所以需要在建立链接时获知哪些services可以提供,无法提供或未知服务如何处理,这就需要SDP来实现;SDP是一个user-initiated application,应用层通过SDP获知是否有必要打开通信服务,如RFCOMM,是否有特殊使用场景,如传输文件;SDP用于定位哪些服务可用,但是选择、接入、使用服务并不是SDP的范畴,需要参照具体的服务协议;
SDP的主要作用就是search:
a、搜索服务类;
b、搜索服务属性;
c、服务浏览;
2、通信架构
如下图所示,SDP中分为client和server;server保存服务列表,client通过request向server获取;
SDP提供查询服务和属性的机制,但并不提供使用这些服务的机制;
如果多个应用在一个设备上提供服务,那么需要多个client使用SDP来查询servers,SDP client会根据servers距离client的RF proximity动态改变访问的server;
3、service record
一个服务记录可以包含多个属性,一个服务记录有唯一的标识,32bit,需要注意的是,这个唯一标识是在每个server中唯一的,两个同样值得标识在不同服务器代表的意义并不相同;
service recode handle在server的services移除或改变前都是有效的,但SDP并没有提供server服务发生变化的通知机制,所以当client使用了server已经移除的service,server需要给出错误应答;
4、service attribute
每一个属性都描述了一个服务的一个特点,部分属性如下图所示:
上图显示了属性格式,其中attribute ID是16-bit,每一种服务都有自己的属性ID列表;Attribute Value是可变长度的;
5、service class
每个服务类都有一个类ID属性,the ServiceClassIDList attribute,每个子类也有UUID,子服务类必须包含其上级服务类的所有属性;
UUID为128-bit,但为了更加方便的使用,我们一般简化为16-bit或32-bit,这里要说明的是Bluetooth Base UUID,他们的值包括00000000-0000-1000-8000-00805F9B34FB,换算公式如下:
6、BROWSINGFOR SERVICES
二、数据
1、属性中value定义:
数据元素分为头和数据部分,其中头又分为type段和size段,如下图所示,各部分说明也见下面几个图:
2、PDU格式
不多说,上图,看图很明白;
3、实例
看下图SDP_ServiceSearchAttributeRequest PDU包,可根据spec解析;