OBEX LÀ GÌ?
OBEX (OBject EXchange) là giao thức trao đổi dữ liệu giữa các thiết bị dùng cổng hồng
ngoại được hiệp hội IrDA (Infrared Data Association) đưa ra lần đầu tiên năm 1997. Ban
đầu, giao thức này chỉ giới hạn cho các thiết bị sử dụng môi trường ánh sáng hồng ngoại,
nhưng rất nhanh sau đó nó được tổ chức Bluetooth SIG (Bluetooth Special Interest
Group) đưa vào hầu hết các thiết bị Bluetooth của mình.
1. Vị trí OBEX trong mô hình OSI
Cũng giống như các giao thức khác, giao thức OBEX được xây dựng trên nền mô hình
OSI (Open Systems Interconnection) bao gồm hai thành phần chính:
•
OBEX session protocol (giao thức phiên OBEX): mô tả cấu trúc gói tin trong phiên
làm việc giữa hai thiết bị.
•
OBEX application framework: tập các dịch vụ OBEX cung cấp cho các ứng dụng đầu
cuối như truyền file, in ảnh...
OBEX Application
Ù
T ầng ứng dụng
ication
OBEX Framework
OBEX Session Tầng phiên
Tầng trình diễn
Tiny TP RFCOMM Tầng giao vận
IrLMP L2CAP Tầng mạng
IrLAP
Link
Manager
Tầng liên kết dữ liệu
IrPHY Baseband Tầng vật lý
IrDA Bluetooth OSI
H n mô hình OSI ình 1: Giao thức OBEX tro g
2. Cấu trúc gói tin trong giao thức phiên OBEX
Giao thức OBEX n kiểu "đẩy" (Push) hoặc "kéo"
(Pull), cho phép m y" dữ liệu l r) hoặc "kéo" dữ liệu
từ server xuống. Đ hiện i t nt server phải tuân
thủ chặt chẽ cấu trúc đề ra. Dưới đây là một vài cấu rong quá trình
truyền file giữa cl erve X1.3 trên website
).
2.1 Gói tin yêu cầu
Mọi gói tin yêu cầu cấu trúc như sau:
đ
á
ược sử dụ
y khách (client) "
g chủ yếu trong các
đẩ
ứ
ê
ng dụng
n máy chủ (serve
rao đổi giữa clie
ể thực điều này, các gó in t và
trúc được sử dụng t
khảo tài liệu IrOB
ient và s r (chi tiết có thể tham E
đều có
Byte 0 Byte 1, 2 Byte 3 đến n
opcode packet length Headers
Opcode: Mã lệnh ừ ầu (Bản ). Bit ca ọi là F al bit.
Packet length: Độ
Header: Thông tin đầu có cấu trúc như sau:
ứng với t ng yêu c g 1 o nhất g in
dài của gói tin
Byte 0 Byte 1, 2 Byte 3 đến n
header
identifier
length (tuỳ
chọn)
value
Bảng 1: Mã lệnh yêu cầu
Mã lệnh Kiểu Mô tả
0x80 CONNECT
Thiết lập phiên
giao dịch
0x81 DISCONNECT
Ngừ ng phiên giao
dịch
0x02
(0x82)
PUT
Gửi dữ liệu lên
server
0x03
(0x83)
GET
Lấy dữ liệu từ
server
0xFF ABORT
Hủy bỏ phiên
giao dịch
Bảng 2: Thông tin đầu
Định
danh
Tên Mô tả
0x01 NAME Tên file (mã Unicode)
0xC3 LENGTH
Kích thước file theo
byte
0x48 BODY Đoạn dữ liệu của file
0x49
END OF
BODY
Đoạn dữ liệu cuối
cùng của file
2.2 Gói tin trả lời
Giống như gói tin yêu cầu, gói tin tr
ả lời có cấu trúc như sau:
Byte 0 Byte 1, 2 Byte 3 to n
response
opcode
response
length
response data
Một số mã trả lời (response opcode) thường gặp:
Bản trả lời g 3: Mã
Mã trả lời Mô tả
0x10 (0x90) Tiếp tục yêu cầ ời u hoặc trả l
0x20 (0xA0)
Xác nhận kết thúc yêu cầu
hoặc trả lời
0x40 (0xC0) Lỗi yêu cầu
0x41 (0xC1) Lỗi do không có quyền
0x43 (0xC3) Phiên giao dịch bị huỷ bỏ
0x44 (0xC4) Không tìm thấy file
3
Quá trình trao đổi file giữa client và server được chia làm 3 giai đoạn:
•
. Cùng giải quyết
•
Ngừng phiên: DISCONNECT
3.1 Thiết lập phiên (CONNECT
Gói tin CONNEC có cấu trúc nh
Thiết lập phiên: CONNECT
•
Nhận/gửi file: GET/PUT
)
T ư sau:
Byte
0 0
Byte 1,
2
Byte 3
Byte
4
Byte 5, 6
Byte 7
to n
0x80
packet
length
OBEX
version
number
flags
maximum
OBEX
packet
length
optional
head s er
OBEX version num o thức OBEX gồm major number lưu tại 4 bit cao,
minor number lưu t hấp. Phiên bản hiện tại là 1.0, do đó giá trị này là 0x10.
Flags: Giá trị này luôn là 0x00 trong phiên b
Maximum OBEX ket len tr g giao ức OBEX mà
thiết bị có thể nhận hoặc gử này hau. Do đó khi
thiết lập phiên, client cần g để kiểm tra xem kích thước gói tin lớn
nhất mà server có thể nhận hoặc gửi là b
Optional headers: Thông tin đầu được tù ch của mỗi phiên giao
dịch. Trong ví dụ dưới đây, giá trị này có thể bỏ qua.
ber: Phiên bản gia
ại 4 bit t
ản hiện tại.
pac gth: Giá ị lớn nhất của gói tin tron th
i. Giá tr
ửi
ị
iá trị này lên server
ở client và server có thể khác n
g
ao nhiêu?
y chọn ứng với mục đí
Yêu cầu từ
client
byte Ý nghĩa
0x80 CONNECT
0x000
7
Độ dài gói tin = 7 bytes
0x10 Phiên bản OBEX 1.0
Mã yêu cầu
0x00 Flags đối với phiên bản
hiện tại
0x200
0
Kích thước lớn nhất của
gói tin là 8K
Trả lời từ server
Mã trả
lời
0xA0 SUCCESS
0x0007 Độ dài gói tin = 7 bytes
0x10 Phiên bản OBEX 1.0
0x00
Flags đối với phiên bản hiện
tại
0x0200
Kích thước lớn nhất của gói
tin mà server có thể nhận
hoặc gửi là 512 bytes
3.2 Gửi file (PUT)
Không giống như gói tin CONNECT, gói tin PU in đầu sau:
NAME: Thông tin về tên file
LENGTH: Thông tin về kích
BODY: Đoạn dữ liệu file
END OF BODY Đoạn dữ liệu cu ủa l
Dưới đây là ví gửi 1 file hello.gif có kích th PC lên server
(ĐTDĐ). Do kích thước của file n hơn kích th rver có thể
nhận (với Sony ricsson T61 ytes) i gói tin để
gửi. Gói tin 1 có mã yêu cầu PUT là 0x02 (khôn tin 2 có mã yêu
cầu PUT là 0x82 (thiết lập Fi
T có thêm một số thông t
thước file
: ối cùng c fi e
dụ ước 721 bytes từ client ( )
lớ ước gói tin lớn nhất mà se
client sẽ chia file thành h
g thiết lập Final bit).
E 0 là 512 b nên a
Gói
nal bit).
Yêu cầu từ
client
byte Ý nghĩa
0x02
PUT, Final bit không
thiết lập để chỉ cho
server biết client còn gửi
yêu cầu tiếp theo
0x01E2
Độ dài gói tin = 482
bytes
Mã yêu cầu
0x01
Định danh thông tin đầu
NAME (tên file)