2 基本工作原理
2.1 代码框架
基本上来说,openobex实现了obex protocol中相关的API接口,实现了对Connect / Disconnect / Get / Put / Setpath / Abort 等command的支持。
而在obexd的代码中,则实现了对FTP、PBAP、OPP等profile的支持(包括Server端的代码和Client端的代码)
2.2 大致工作流程
因为基于OBEX的协议,基本上都会包括Server和Client两端,obexd中实现的FTP和PBAP也不例外。Obexd和上层应用的交互是通过DBUS接口来实现的。详细的dbus接口API定义可以看源码包中doc目录下的相关文档
2.2.1 Server端启动流程
Obexd
启动后,首先会初始化Manager模块,在dbus的org.openobex service中注册一个org.openobex.Manager
接口,主要用来注册Agent代理,和发送session、transfer等数据传输相关操作的signal。
在加载Plugin后,obexd会根据启动命令行传入的参数,相应的加载FTP、OPP、PBAP等相关Profile的server端代码,并在SDP数据库中添加相关server的记录,便于客户端查找相关服务。
对
于PBAP来说,为了能够支持从不同的数据来源获取电话号码簿信息,例如不同的电话协议栈或者其它联系人地址簿来源(例如从MAIL相关应用的地址簿数据
库中),Server端的实现是分成common的接口框架和具体的Plugin来实现的。Common的接口框架负责和obex交互,应答从
client端发送过来的请求,并调用具体的Plugin获取应答所需的联系人地址簿信息
对于FTP来说,上层应用还需要通过Manager接口在DBUS上注册一个Agent对象用来获取和处理权限和文件路径等相关信息。在test目录下可以找到一个python脚本的示例程序:simple-agent
2.2.2 Client端调用流程
在Client端,obex-client同样是作为后台守护进程来实现的,启动后,会在dbus的org.openobex.client service 中注册一个org.openobex.Client接口,用来接收上层应用发送的具体操作请求。
对
于FTP和PBAP来说,应用程序首先都要先通过org.openobex.Client接口创建一个数据传输的Session并在DBUS上注册
Session相关接口和函数。根据创建session时传递的参数,obex-client会加载FTP或PBAP的相关代码,在DBUS中注册FTP
或PBAP相关的具体接口函数。应用程序进一步调用这些接口上的相关函数实现所需的操作。
FTP和PBAP client端同样可以通过Session的接口,注册一个Agent(不是必需的)用来显示数据传输的进程,或者中断数据传输。
阅读(2846) | 评论(1) | 转发(0) |