OBEX(Object Exchange)協(xié)議將點(diǎn)對點(diǎn)設(shè)備間的信息交互應(yīng)用以面向?qū)ο蟮姆绞椒纸鉃閿?shù)據(jù)+操作,把數(shù)據(jù)柔性抽象為對象來描述,同時(shí)定義一種信息交互方式規(guī)范操作。OBEX協(xié)議的兩個關(guān)鍵部分便是定義了對象模型和會話方式,對象模型依據(jù)應(yīng)用而定,定義了Header描述對象的一個方面,Header的集合便是一個完整的對象。會話采用請求-響應(yīng)方式,客戶端發(fā)起請求,服務(wù)器端給與響應(yīng)。下面從對象模型和會話協(xié)議上詳細(xì)解析下OBEX協(xié)議。
對象模型
對象模型是對對象本身的抽象描述,它定義了Header的概念,一個Header描述對象的一個方面。對象模型是一系列Header的集合體,依據(jù)應(yīng)用而定,因?yàn)镺BEX是很多應(yīng)用的基礎(chǔ)協(xié)議,所以這里的應(yīng)用包括底層信息交互操作及其之上的應(yīng)用。對象模型可以認(rèn)為是對象和應(yīng)用之間的載體,因?yàn)樗环矫婷枋隽藢ο笮畔,另一方面又滿足具體應(yīng)用的可操作性。
下面對Header舉個例子。比如文件傳輸應(yīng)用,將文件抽象為對象模型時(shí),需要的Header有文件名稱Name、文件數(shù)據(jù)長度DataLength、文件類型Type,可能還會有ApplicatiON specific Header即具體應(yīng)用相關(guān)的Header,比如定義MASK選定文件數(shù)據(jù)只包含某些屬性。
Header的形式為ID+Value,ID為單字節(jié),它定義了Value類及其表示格式,Bit7和Bit6指定了Value值的格式,如ID==0x01則表示NAME,格式為兩字節(jié)長度+以0x00結(jié)尾的字符串?dāng)?shù)據(jù)的方式,當(dāng)文件名為teST.txt時(shí),Header即為01 00 0b 't' 'e' 's' 't' '.' 't' 'x' 't' 00。ID作為Value的一種描述,就像Header只是對象的一種描述一樣,這種定義方式大大擴(kuò)展了OBEX的Header空間。
OBEX會話協(xié)議定義了請求-響應(yīng)形式的會話式操作,定義發(fā)起請求的一端為客戶端,給與響應(yīng)的為服務(wù)器端,OBEX應(yīng)用便是在客戶端和服務(wù)器端的一系列請求-響應(yīng)會話中完成的。OBEX以“操作符”的方式來定義請求,以“回應(yīng)符”的方式定義響應(yīng)。操作符包括:連接CONNECT(0x80)、斷開連接DISCONNECT(0x81)、發(fā)送PUT(0x02,0x82)、索取GET(0x03,0x83)、設(shè)置路徑SETPATH(0x85)、中止當(dāng)前會話ABORT(0xff);回應(yīng)符有0x90-繼續(xù)、0xA0-成功和其他表示錯誤原因的回應(yīng)符。