蓝牙电话之PBAP协议分析
蓝牙电话之PBAP—简介
蓝牙电话应用不但需要HFP协议来支持打电话的功能,还有查看通讯录和通话记录等需求,那这就是PBAP协议干的事了,本系列我们就来聊一聊PBAP的前世今生。
PBAP:Phone Book Access Profile的简称,电话本访问协议,是一种基于OBEX的上层协议,该协议可以同步手机这些具有电话本功能设备上的通讯录和通话记录等信息。该协议初始版本为2004-05-20的D05r00版本,随着后续的不断发展优化,首次被蓝牙组织SIG董事会采用是2013-11-05的v1.2.0版本,当前最新版本为2019-01-21发布的v1.2.3。我们之后所讲的PBAP协议规定都是以2015-12-15发布的v1.2.1版本为唯一依据,详情可查看《PBAP_v1.2.1.pdf》。
PBAP协议规定两种角色:
- PSE:Phone Book Server Equipment,拥有电话本源数据的设备,作为服务端,比如手机。
- PCE:Phone Book Client Equipment,向PSE端请求电话本信息的设备,作为客户端,比如车载蓝牙。
由于PBAP协议是基于OBEX协议之上的应用层协议,所以我们先来简单学习下OBEX的相关知识,依据的协议为OBEX 1.3版本,详情可参考《OBEX 1.3.pdf》。
OBEX:Object Exchange的简称,对象交换协议,来源于红外通讯协议,但又不局限于具体的传输方式,后来被蓝牙组织SIG吸纳其中部分并进行优化处理作为蓝牙协议中的OBEX层用于蓝牙设备间的文件数据传输,如蓝牙传输文件(OPP)、同步电话簿(PBAP)和同步短信(MAP)等场景下都是以OBEX协议组织相关数据进行传输的。
OBEX协议有两种角色Server和Clinet,通过request-response(请求-响应)形式进行交互,即客户端Client进行请求,服务端Server响应客户端请求的方式传输数据对象。应用于PBAP协议中客户端只能进行读取操作,不能对源数据进行修改操作,这样保证了源数据的安全性。
OBEX协议的数据组成有两个关键部分,分别为对象模型和会话协议。
(1) 对象模型:根据相关具体应用而定,这部分定义了Header来描述对象的一个方面,多个Header的集合便是一个完整的对象。
每个Header都是由两部分组成:HI + HV
HI:the header ID,一个字节,高两位代表ID的编码方式,低六位代表ID的含义
所以协议定义了如下这些HI,红色图框标注的几个类型的HI在PBAP中很重要:
HI=0x4C的APP.Parameters表示基于OBEX的上层应用协议在请求或响应包中传递的附加信息,也是由一系列连续的Tag-Length-Value构造组成:
那这一系列参数在PBAP中的构造组成主要是:HV:the header value,一个或多个字节,代表HI指示类型的具体值
(2) 会话协议:即Client和Server端采用请求-响应的方式进行数据传输
请求数据格式
每个请求包必须有响应确认。
请求命令中的opcode有如下选择:
其中红框标注的则是在PBAP中常使用到的三条指令,主要是建立连接、断开连接,还有一个Get就是数据传输的主要实现方式,PBAP中获取通讯录及通话记录都是以这样的方式同步数据的。响应数据格式:
回应Client端的请求,response code有多种定义及说明,感兴趣的同学自行可以查看《OBEX 1.3.pdf》的3.2.1部分,但主要使用的回复code还是0xA0(OK)和0x90(Continue)。
前面OBEX会话协议中的请求部分也介绍到了在PBAP中常用的三种请求,接下来我们再分别就这些请求再加以详细说明。
1、Connect
- OBEX version number:已编码的OBEX协议版本,当前默认为1.0,这个和OBEX协议没有必然相同的关系。
- lags:连接的标志,默认为 0。
- maximum OBEX packet length:OBEX数据传输的最大包长,连接两方协议确定。
2、Disconnect
3、Get
总体而言OBEX的操作还是挺简单的,更多OBEX的详细分析可以参考协议或相关文章,这里就不做过多介绍。
接下来我们再回来看看PBAP协议在整体蓝牙协议结构中的位置:
从上面的蓝牙协议栈结构中可以看出,PBAP应用层协议处于最上层,之后就是数据格式处理方式,由于通讯录在手机中都是以vCard的格式存储的,所以这边为vCard的数据处理格式。再往下就是通过OBEX协议层联通蓝牙协议栈中的RFCOMM,最后通过统一的数据传输通道l2cap链路发送数据。
当前vCard的版本有vCard 2.1 and vCard 3.0两种版本,所以PSE需要两种数据格式都支持,同步数据时根据PCE请求的哪种格式就以那种格式封装数据进行传输。但是无论哪种格式,vCard属性内容的字符集使用唯一的字符编码utf-8格式进行编码转换。
PSE如果是手机等带有SIM卡的设备,那其存储源数据的地方可能是手机也可能是SIM卡,因此在同步数据时需要考虑的更全面。这样的设备数据存储形式如下图所示:
其中的各个电话簿对象说明如下表:
所以在同步获取相关数据时需要指明从哪个路径下获取对应的数据,即从手机同步还是从SIM卡中同步数据。
- 手机路径:telecom/xxx.vcf
- SIM卡路径:SIM1/telecom/xxx.vcf
因此根据同步的路径和同步对象的不同,我们大致可以得出四种不同的同步命令:
- 同步手机中的通讯录
- 同步SIM卡中的通讯录
- 同步手机中的通话记录
- 同步SIM卡中的通话记录
在后面的PBAP同步流程分析中我们也将着重讲解以上四个方面,使用PBAP协议中的Phone Book Download Feature功能,同步PCE感兴趣的电话簿对象,整体流程如下:
蓝牙电话中关于PBAP协议我们就总结到这,后续分别总结下PBAP的连接断开、同步等流程,感兴趣的小伙伴欢迎私信留言一起讨论。
更多互联互通技术,欢迎关注微信公众号:Connectivity
蓝牙电话之PBAP协议分析相关推荐
- 蓝牙电话之PBAP协议的连接
蓝牙电话之PBAP-连接 前一篇文章<蓝牙电话之PBAP协议分析>大致讲解了PBAP协议的相关内容,本篇我们就开启PBAP连接流程的分析.由于PBAP的连接过程涉及到的知识点较多,有些地方 ...
- 蓝牙 socket 建立不了_蓝牙电话之PBAP同步电话簿的安卓实现
PBAP同步电话簿的安卓实现 蓝牙电话中同步电话簿基本包含两个流程:同步联系人 + 同步通话记录,那本期我们就简单聊聊安卓系统中蓝牙电话(PCE)的电话簿是如何同步的. 本篇文章参考的安卓源码版本:A ...
- 蓝牙电话之PBAP同步电话簿的安卓实现
PBAP同步电话簿的安卓实现 蓝牙电话中同步电话簿基本包含两个流程:同步联系人 + 同步通话记录,那本期我们就简单聊聊安卓系统中蓝牙电话(PCE)的电话簿是如何同步的. 本篇文章参考的安卓源码版本:A ...
- WebSocket协议分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 解析websocket数据格式." 好久不见,一晃一年又过去了,祝大家新年好运. 今天,给大家分析一个常见的协议--WebSock ...
- 宅男抖音某猫协议分析及应用破解
" 分析传说中的快x,顺便提供破VIP线路及去启动广告方法." 在当今这个由应用市场主导的网络上,流传着一批应用,它们低调又神秘,依赖口碑与独立网站在地下渠道传播,应用市场中从来都 ...
- 从新手到入门,如何进入协议分析的世界
" 协议分析与还原自学及入门指南." 有部分朋友给我发消息,说对协议还原很感兴趣,但苦于没人指导,希望得到我的帮助,问我如何进行协议分析的学习. 这篇文章从初学者的角度,编列了一个 ...
- 协议分析中的TCP/IP网络协议
" TCP/IP协议作为互联网的基础,在协议分析中不可或缺,本文介绍在对协议进行分析还原的过程中的一些要点,快速掌握协议还原的精髓." 注意,本文比较枯燥乏味,若非需要了解TCP/ ...
- 五款常用协议分析处理工具推荐
工欲善其事,必先利其器,一款好的工具,能取到事半功倍的效果. 进行协议分析,好的辅助工具必不可少,本文推荐五款最常用且易用的协议分析工具给大家,包括两款综合抓包及分析工具,一款协议重放工具,一款pca ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- TCP/IP协议分析
一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体 ...
最新文章
- 小程序自定义分享事件及回调函数
- IBM服务器raid5崩溃数据恢复方案及过程
- 通信网络基础期末复习-第三章-网络的时延分析
- 5kyu k-Primes
- ---WebCam网络摄像头10 socket
- Navicat 连接MariaDB 失败: Host '*' is not allowed to connect to this MariaDB server
- 人人都可以创造自己的AI:深度学习的6大应用及3大成熟领域
- java 查找链表中间元素_java查找链表中间元素_如何通过Java单次查找链表的中间元素...
- 20200720:每日一题之两数之和Ⅱ(leetcode167)
- IDEA 手动导入本地依赖包
- qt制作2048小游戏
- 宠物管理系统CLI版本(Python实现/内附完整代码)
- php毕业设计商城模板,基于Thinkphp的毕业设计网上购物商城
- 怎么用matlab做系统辨识,系统辨识大牛Ljung编写的MATLAB系统辨识使用手册
- 服务器安全文件,文件服务器安全防护系统-虹安 - 数据防泄密,文档加密,源代码防泄密,数据防泄漏,DLP数据防泄密整体解决方案提供商...
- 国仁网络资讯:抖音都有哪些运营技巧;抖音算法机制是什么?
- 无人驾驶清扫车落地之路的技术解析
- git 问题解决之remote: Permission to xxx/xxx.git denied to xxx.
- [轉]ERP项目前期调研提纲
- 热评云厂商:BoCloud博云2.8亿元,获得更多的用户认同感
热门文章
- matlab的置换,来自CLUSTERGRAM对象的置换向量(MATLAB)
- ndoutils(ndo2db)安装部署
- Opencv4.2 DNN模块 终于支持Nividia GPU了!
- DataGear 制作Excel动态数据可视化图表
- ZT ---- 给孩子的信(孩子写给爸爸妈妈的信在24、25、26楼)
- 广域网加速方案--Riverbed
- [网络] 数字签名和数字证书的原理机制
- andriod 无网络逻辑设置和判断
- winedit使用教程_latex与winedit入门指导教程.pdf
- 【传感器学习】光电反射传感器