obex

OBEX全称为Object Exchange,中文对象交换,所以称之为对象交换协议。它在此软件当中有着核心地位,文件传输和IrMC同步都会使用到它。OBEX协议构建在IrDA架构的上层。

   一、什么是OBEX,它有什么用途?  OBEX协议通过简单的使用“PUT”和“GET”命令实现在不同的设备、不同的平台之间方便、高效的交换信息。支持的设备广泛,例如PC,PDA,电话,摄像头,自动答录机,计算器,数据采集器,手表等等。  OBEX协议定义了一种柔性的概念——objects。也即是对象。这些对象可以包括文件,诊断信息,电子商务卡片,银行的存款等等。Objects在这里没有高级的技术含义,而是视你的应用而定。  OBEX协议小到可作“命令和控制”功能,例如对电视机,录像机等的操作。大道可以做很复杂的操作,例如数据库的事务处理和同步。  OBEX能够具有以下几个特点:  1、 友好的应用——可实现快速开发。  2、 紧缩——可用在资源有限的小型设备上。  3、 跨平台  4、 柔性的数据支持。  5、 方便的作为其他Internet传输协议的上层协议。  6、 可扩展性——提供了对未来需求的扩充支持而不影响以存在的实现。例如可扩展安全,数据压缩等。  7、 可测试可调试。  更为具体的关于OBEX的介绍请查阅IrOBEX协议。  二、OBEX对象模型  关于Headers  对象模型回答了对象是如何在OBEX协议描述的。这个模型必须包括被传输的对象和对对象的描述。为了做到这点,OBEX定义了Headers的概念。  一个Header反映了对象的一个方面,例如名字、长度、描述文字或者对象本身。例如,一个文件对象demo.txt会包含它的名字,一个类型标示为“text”,长度和文件本身。  Headers的构成  Headers简单的由<Header ID>和<Header Value>组成,简称为<HI>和<HV>。  HI由一个字节组成,指出了Header包含的内容以及它的格式。HV包含了一个或者多个字节,其结构由HI所决定。  所有的Header都是可选的,取决于设备的类型和事务的种类。你可以使用所有的Header,或者一些,或者没有。ID可以使Header可解析以及与传输顺序无关,也可以使不支持的Header被忽略掉。  HI又可以分为两部分,高2位和低6位。高2位确定了HI的编码方式(见表二),低6位确定了HI的意义(见表三)。两个表都是我从IrOBEX中的表摘抄并部分翻译过来的。  表二  
HI的第8和第7意义
00(0x00)以Null(0x00)结尾的的Unicode文字。2个字节的无符号整数长度前缀。
01(0x40)Byte块,2个字节的无符号整数前缀。
10(0x80)1Byte容量。
11(0xC0)4Byte容量,以高位先传输为原则。
表三  
HIHeader名称描述
0xC0Count连接中用于指名对象的数量。
0x01Name对象的名字。一般为文件名。
0x42Type对象的类型。例如text,html,binary,manufacture specific
0x44  0xC4Time时间戳。ISO 8601版本  时间戳。4Byte版本(用于兼容)
0x05Description对对象的文本描述
0x46Target操作的目的服务名
0x47HTTP一个HTTP1.x头
0x48Body对象的一部分
0x49End of body对象的最后一部分
0x4AWhoOBEX Application标识,用于表明是否是同一个应用。
0xCBConnection ID用于OBEX多路连接的标识
0x4CApp.Parameters扩展的应用层请求和回复信息
0x4DAuth.ChallengeAuthentication digest-challenge
0x4EAuth.ResponseAuthentication digest-response
0x4FObject Class对象的OBEX对象类
0x10 to 0x2FReserved保留
0x30 to 0x3FUser defined用户自定义的。
关于常用Header的更详尽的解释,更详尽信息请参考IrOBEX   1、Name  Name是一个用来描述对象名称的Header,由以Null(0x00)结尾的Unicode字符串组成。例如:DEMO.TXT  2、Length  Length描述了对象的大小,由4个字节组成。如果Length事先知道,这个Header应该被用到。这样可以让接受者迅速的知道需要分配多少空间,可使处理更为迅速。但这也不是必须的,有些情况下长度无法确认,但设备可以通过End-Body Header知道什么时候结束。  3、Time  Time描述了对象的最后修改的时间。使用ISO8601格式。  本地时间格式:YYYYMMDDTHHMMSS  UTC时间格式:YYYYMMDDTHHMMSSZ  格式中的T可以方便的区分日期和时间。UTC时间使用Z作为标记。建议使用UTC时间。  4、Body、End-of-Body  Body Header由HI、一个2Byte长度的描述和整个的对象本身。End-of-Body组成和Body组成一样,但标识了这是对象的最后一部分。如果对象本来就很小,就直接使用End-of-Body。  三、请求(Request)和回应(Response)  OBEX使用Request和Response作为最基本的操作。请求的每个Request必然有一个Response,否则可认为Request失败。  Request由一个或多个的Packet(包)组成,每个包的结构如下表  Request数据包结构  
Byte 0Byte 1,2Byte 3 to n
操作码(opcode)Packet Length(包长度)Headers或请求信息
由于每个Request可能有多个Packet,opcode的最高位称为Final bit。如果被设置为1,那么说明这是Request的最后一个Packet。例如:当用PUT操作发送一个大文件时,会有几个Packet作为一个Request。那么只有最后一个Packet的FinalBit设置为1。  Response也由一个或多个Packet组成,每个包的结构如下表  Response数据包结构  
Byte 0Byte 1,2Byte 3 to n
Response Code(返回值)Response Length(回应长度)ResponseData回应的数据
同样的ResponseCode的最高位也叫做FinalBit。ResponseData可能包含对象和Header,或者其它信息。  下表列出了了常见的opcode和responseCode,更详尽的请参考IrOBEX 1.2文档。  opcode  
Opcode(w/high bit set)定义意义
0x80 *Connect连接
0x81 *Disconnect断开连接
0x02(0x82)Put发送一个对象
0x03(0x83)Get取得一个对象
0x04(0x84)Reserved保留的
0x85 *SetPath设置路径
0xFF *Abort取消当前的操作
0x06到0x0FReserved作为扩展保留
0x10到0x1FUser definable用户自定义的
*总是设置FinalBit  ResponseCode  
ResponseCode定义
0x10(0x90)Continue(继续)
0x20(0xA0)OK,Success
0x40(0xC0)Bad Request(服务端不明白Request)
0x41(0xC1)Unauthorized(未授权的)
0x43(0xC3)Fobidden(禁止——服务器明白Request,但拒绝)
0x44(0xC4)Not Found(未找到)
四、说明。  1、 Connect(连接)  此操作初始化会话然后设置参数。其Request格式为  
Byte 0Byte 1,2Byte 3Byte 4Byte 5,6Byte 7 to n
0x80包长度OBEX版本标志最大OBEX包长度可选Header
注:OBEX版本现在为1.0。  Response格式为:  
Byte 0Byte 1,2Byte 3Byte 4Byte 5,6Byte 7 to n
ResponseCode包长度OBEX版本标志最大OBEX包长度可选Header
对于更多关于Connect的说明请参考IrOBEX  2、 Disconnect(断开当前会话)  此操作断开OBEX会话。例如断开当前FolderListing Service,然后使用Connect连接到IrMC Sync Service实现同步通讯薄等功能。  Disconnect格式为:  
Byte 0Bytes 1,2Bytes 3 to n
0x81包长度可选Header
成功的断开会返回0Xa0,拒绝会返回0xD3  3、 Put操作  Put操作从客户端发送一个对象到服务端。一般至少含有Name和Length两个Header。对于文件而言有可能还有Date/Time Header

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值