DWATER

屋檐下的水滴 [持续关注移动通信和互联网的融合]

用户操作
[即时聊天] [发私信] [加为好友]
LanceID:dwater
96299次访问,排名1017,好友0人,关注者4人。
在无线通信领域,有6年的终端研发经验。
dwater的文章
原创 33 篇
翻译 8 篇
转载 93 篇
评论 47 篇
Lance的公告
这个博客的目的,是给自己多开创一个交流的窗口。在这里会和大家分享一些职业上的感悟以及个人的兴趣,欢迎大家多提宝贵意见。 2007-9-23
最近评论
icemouse321:谢谢你啊,明白了许多
wohuifada:转发了,谢谢!
kitty:我喜欢狐狸。
andyyang1011:我是北京一家猎头公司的andy,目前有个C++的职位,是关于通讯方面的,熟悉• Symbian OS,具体职位信息如下,如果你或者你的朋友有兴趣了解一下的话可以加我msn:it-hunter@hotmail.com
The Shortlink Group has responsibility for the Shortlink Technology Stream comprisin……
IT-HUNTER:it-hunter@hotmail.com
文章分类
收藏
    相册
    电子商务
    好文章
    友情空间
    手機界面設計
    窝棚窝棚有它不穷
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 OBEX介绍收藏

    新一篇: SyncML协议简述 | 旧一篇: 关于SMIL

    一、什么是OBEX,它有什么用途?

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

    OBEX协议构建在IrDA架构的上层.

    OBEX协议通过简单的使用“PUT”和“GET”命令实现在不同的设备、不同的平台之间方便、高效的交换信息。支持的设备广泛,例如PCPDA,电话,摄像头,自动答录机,计算器,数据采集器,手表等等。

    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)

    Null0x00)结尾的的Unicode文字。2个字节的无符号整数长度前缀。

    01(0x40)

    Byte块,2个字节的无符号整数前缀。

    10(0x80)

    1Byte容量。

    11(0xC0)

    4Byte容量,以高位先传输为原则。

    表三

    HI

    Header名称

    描述

    0xC0

    Count

    连接中用于指名对象的数量。

    0x01

    Name

    对象的名字。一般为文件名。

    0x42

    Type

    对象的类型。例如text,html,binary,manufacture specific

    0x44

    0xC4

    Time

    时间戳。ISO 8601版本
    时间戳。4Byte版本(用于兼容)

    0x05

    Description

    对对象的文本描述

    0x46

    Target

    操作的目的服务名

    0x47

    HTTP

    一个HTTP1.x

    0x48

    Body

    对象的一部分

    0x49

    End of body

    对象的最后一部分

    0x4A

    Who

    OBEX Application标识,用于表明是否是同一个应用。

    0xCB

    Connection ID

    用于OBEX多路连接的标识

    0x4C

    App.Parameters

    扩展的应用层请求和回复信息

    0x4D

    Auth.Challenge

    Authentication digest-challenge

    0x4E

    Auth.Response

    Authentication digest-response

    0x4F

    Object Class

    对象的OBEX对象类

    0x10 to 0x2F

    Reserved

    保留

    0x30 to 0x3F

    User defined

    用户自定义的。

     

    关于常用Header的更详尽的解释,更详尽信息请参考IrOBEX

    1Name
                  Name是一个用来描述对象名称的Header,由以Null(0x00)结尾的Unicode字符串组成。例如:DEMO.TXT

    2Length
                 
    Length描述了对象的大小,由4个字节组成。如果Length事先知道,这个Header应该被用到。这样可以让接受者迅速的知道需要分配多少空间,可使处理更为迅速。但这也不是必须的,有些情况下长度无法确认,但设备可以通过End-Body Header知道什么时候结束。

    3Time

    Time描述了对象的最后修改的时间。使用ISO8601格式。

    本地时间格式:YYYYMMDDTHHMMSS

    UTC时间格式:YYYYMMDDTHHMMSSZ

    格式中的T可以方便的区分日期和时间。UTC时间使用Z作为标记。建议使用UTC时间。
    4
    BodyEnd-of-Body

           Body HeaderHI、一个2Byte长度的描述和整个的对象本身。End-of-Body组成和Body组成一样,但标识了这是对象的最后一部分。如果对象本来就很小,就直接使用End-of-Body

     

    三、请求(Request)和回应(Response

    OBEX使用RequestResponse作为最基本的操作。请求的每个Request必然有一个Response,否则可认为Request失败。

    Request由一个或多个的Packet(包)组成,每个包的结构如下表

    Request数据包结构

    Byte 0

    Byte 1,2

    Byte 3 to n

    操作码(opcode)

    Packet Length(包长度)

    Headers或请求信息

     

    由于每个Request可能有多个Packetopcode的最高位称为Final bit。如果被设置为1,那么说明这是Request的最后一个Packet。例如:当用PUT操作发送一个大文件时,会有几个Packet作为一个Request。那么只有最后一个PacketFinalBit设置为1

     

    Response也由一个或多个Packet组成,每个包的结构如下表

    Response数据包结构

    Byte 0

    Byte 1,2

    Byte 3 to n

    Response Code(返回值)

    Response Length(回应长度)

    ResponseData回应的数据

     

    同样的ResponseCode的最高位也叫做FinalBitResponseData可能包含对象和Header,或者其它信息。

    下表列出了了常见的opcoderesponseCode,更详尽的请参考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

    取消当前的操作

    0x060x0F

    Reserved

    作为扩展保留

    0x100x1F

    User definable

    用户自定义的

    *总是设置FinalBit

     

    ResponseCode

    ResponseCode

    定义

    0x10(0x90)

    Continue(继续)

    0x200xA0

    OKSuccess

    0x40(0xC0)

    Bad Request(服务端不明白Request

    0x41(0xC1)

    Unauthorized(未授权的)

    0x43(0xC3)

    Fobidden(禁止——服务器明白Request,但拒绝)

    0x44(0xC4)

    Not Found(未找到)

     

    四、说明。

    1、 Connect(连接)

    此操作初始化会话然后设置参数。其Request格式为

    Byte 0