** (一) ** ** OBEX ** ** 介绍 **
** 一、什么是 OBEX ** ** ,它有什么用途? **
OBEX 全称为 Object Exchange ,中文对象交换,所以称之为对象交换协议。它在此软件当中有着核心地位,文件传输和 IrMC 同步都会使用到它。
OBEX 协议构建在 IrDA 架构的上层.
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 简单的由
1<header id=""> 和 <header value=""> 组成,简称为 <hi> 和 <hv> 。
2
3HI 由一个字节组成,指出了 Header 包含的内容以及它的格式。 HV 包含了一个或者多个字节,其结构由 HI 所决定。
4
5所有的 Header 都是可选的,取决于设备的类型和事务的种类。你可以使用所有的 Header ,或者一些,或者没有。 ID 可以使 Header 可解析以及与传输顺序无关,也可以使不支持的 Header 被忽略掉。
6
7HI 又可以分为两部分,高 2 位和低 6 位。高 2 位确定了 HI 的编码方式(见表二),低 6 位确定了 HI 的意义(见表三)。两个表都是我从 IrOBEX 中的表摘抄并部分翻译过来的。
8
9** 表二 **
10
11** HI ** ** 的第 8 ** ** 和第 7 ** ** 位 **
12
13|
14
15** 意义 **
16
17---|---
18
1900(0x00)
20
21|
22
23以 Null ( 0x00 )结尾的的 Unicode 文字。 2 个字节的无符号整数长度前缀。
24
2501(0x40)
26
27|
28
29Byte 块, 2 个字节的无符号整数前缀。
30
3110(0x80)
32
33|
34
351Byte 容量。
36
3711(0xC0)
38
39|
40
414Byte 容量,以高位先传输为原则。
42
43** 表三 **
44
45** HI **
46
47|
48
49** Header ** ** 名称 **
50
51|
52
53** 描述 **
54
55---|---|---
56
570xC0
58
59|
60
61Count
62
63|
64
65连接中用于指名对象的数量。
66
670x01
68
69|
70
71Name
72
73|
74
75对象的名字。一般为文件名。
76
770x42
78
79|
80
81Type
82
83|
84
85对象的类型。例如 text,html,binary,manufacture specific
86
870x44
88
890xC4
90
91|
92
93Time
94
95|
96
97时间戳。 ISO 8601 版本
98时间戳。 4Byte 版本(用于兼容)
99
1000x05
101
102|
103
104Description
105
106|
107
108对对象的文本描述
109
1100x46
111
112|
113
114Target
115
116|
117
118操作的目的服务名
119
1200x47
121
122|
123
124HTTP
125
126|
127
128一个 HTTP1.x 头
129
1300x48
131
132|
133
134Body
135
136|
137
138对象的一部分
139
1400x49
141
142|
143
144End of body
145
146|
147
148对象的最后一部分
149
1500x 4A
151
152|
153
154Who
155
156|
157
158OBEX Application 标识,用于表明是否是同一个应用。
159
1600xCB
161
162|
163
164Connection ID
165
166|
167
168用于 OBEX 多路连接的标识
169
1700x 4C
171
172|
173
174App.Parameters
175
176|
177
178扩展的应用层请求和回复信息
179
1800x4D
181
182|
183
184Auth.Challenge
185
186|
187
188Authentication digest-challenge
189
1900x4E
191
192|
193
194Auth.Response
195
196|
197
198Authentication digest-response
199
2000x 4F
201
202|
203
204Object Class
205
206|
207
208对象的 OBEX 对象类
209
2100x10 to 0x 2F
211
212|
213
214Reserved
215
216|
217
218保留
219
2200x30 to 0x 3F
221
222|
223
224User defined
225
226|
227
228用户自定义的。
229
230** 关于常用 Header ** ** 的更详尽的解释,更详尽信息请参考 IrOBEX **
231
232** 1 ** ** 、 Name
233** Name 是一个用来描述对象名称的 Header ,由以 Null(0x00) 结尾的 Unicode 字符串组成。例如: DEMO.TXT
234
235** 2 ** ** 、 Length
236** Length 描述了对象的大小,由 4 个字节组成。如果 Length 事先知道,这个 Header 应该被用到。这样可以让接受者迅速的知道需要分配多少空间,可使处理更为迅速。但这也不是必须的,有些情况下长度无法确认,但设备可以通过 End-Body Header 知道什么时候结束。
237
238** 3 ** ** 、 Time **
239
240Time 描述了对象的最后修改的时间。使用 ISO8601 格式。
241
242本地时间格式: YYYYMMDDTHHMMSS ** **
243
244UTC 时间格式: YYYYMMDDTHHMMSSZ
245
246格式中的 T 可以方便的区分日期和时间。 UTC 时间使用 Z 作为标记。建议使用 UTC 时间。
247**4** ** 、 Body ** ** 、 End-of-Body **
248
249** ** Body Header 由 HI 、一个 2Byte 长度的描述和整个的对象本身。 End-of-Body 组成和 Body 组成一样,但标识了这是对象的最后一部分。如果对象本来就很小,就直接使用 End-of-Body 。
250
251** 三、请求( Request ** ** )和回应( Response ** ** ) **
252
253OBEX 使用 Request 和 Response 作为最基本的操作。请求的每个 Request 必然有一个 Response ,否则可认为 Request 失败。
254
255Request 由一个或多个的 Packet (包)组成,每个包的结构如下表
256
257Request 数据包结构
258
259<TD style="BORDER-RIGHT: #ebe9ed; PADDING-RIGHT: 5.4pt; BORDER-TOP: black 1.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: gray; PADDING-BOTTOM: 0cm; BORDER-LEFT: black 1.5pt solid; WIDTH: 142pt; PA</hv></hi></header></header>