WAP協議研究-彩信的傳輸

原帖:http://developer.sonyericsson.com/community/docs/DOC-3339

 

彩信(MMS)和WAP瀏覽器是WAP協議的兩大主要應用。WAP協議有點複雜,也算是SmartPhone中的 核心技術之一吧,它包括WDP/WTP/WSP這一套傳輸協議,也包括WML/和SMIL這樣的內容表示協議。去年花了一點時間去研究它,後來該任務取消 了,所以沒有搞得太透徹。今年要真正使用了,現在繼續研究,主要側重於它的實現。這裏記錄一些研究筆記,本文是關於彩信的。

 

彩信的架構 。彩信和其它WAP 應用的架構差不多,都要經過WAP Gateway中轉。要注意的是彩信並非直接投遞給接收方,而是像郵件一樣,先發送給一箇中間服務器MMS Proxy-Relay。MMS Proxy-Relay暫時保存彩信,然後通過push協議給彩信接收方發送一個通知,彩信接收方收到通知後從MMS Proxy-Relay上獲取彩信內容。MMS Client和WAP Gateway之間用WAP傳輸協議傳輸,而WAP Gateway和MMS Proxy-Relay之間走傳統的TCP/IP協議。

wap_mmsarch  

彩信的交互過程 。對彩信客戶端實現者來說,我們主要關心:彩信發送方與MMS Proxy-Relay之間的交互和彩信接收方和MMS Proxy-Relay之間的交互,這包括下列幾個過程。

l          發送過程。這是彩信發送方把彩信發送給MMS Proxy-Relay的過程,MMS Proxy-Relay在收到彩信後會給發送方一個確認消息。

 

l          通知過程。爲了把彩信投遞給接收方,MMS Proxy-Relay要通過PUSH協議給接收方發送一條彩信通知消息,這個消息通常是一條特殊短信,裏面包含彩信的位置URL。

l          彩信接收。接收方收到彩信通知後,從中取出URL,然後通過標準的HTTP GET請求從MMS Proxy-Relay上獲取彩信。

l          彩信回執。當MMS Proxy-Relay成功的通知彩信接收方後,它會給彩信發送方發送一個消息表明彩信投遞成功。

 

l          彩信閱讀回執。彩信閱讀回執是一條新彩信,它的傳遞過程和普通彩信沒有什麼差別,只是不能再有閱讀回執。

 

彩信的PDU PDU 即協議數據單元,對應前面每種消息的消息格式。彩信的PDU和HTTP協議極爲類似,當然相對來說要簡單多了。它定義了一些常用的消息域,有的消息域是公 有的,每種消息都可以使用,有的消息域是專用的,只有特定的消息才能使用。除了常用的消息域外,也可以自定義消息域,自定義消息域以X-打頭,但不能以 X-Mms-打頭。常用的消息域如:

l          X-Mms-Message-Type

l          X-Mms-Transaction-ID

l          X-Mms-MMS-Version

l          Date

l          From

l          To

l          Cc

l          Bcc

l          Subject

l          X-Mms-Message-Class

l          X-Mms-Expiry

l          X-Mms-Delivery-Time

l          X-Mms-Priority

l          X-Mms-Sender-

l          Visibility

l          X-Mms-Delivery-Report

l          X-Mms-Read-Reply

l         Content-Type

 

PDU的類型有:

l          發送請求。m-send-req

l          發送確認。m-send-conf

l          彩信通知。m-notification-ind

l          通知迴應。m-notifyresp-ind

l          獲取彩信迴應。m-retrieve-conf

l          接收確認。m-acknowledge-ind

l          彩信回執。m-delivery-ind

 

 

獲取彩信只是一個普通的HTTP GET請求,而沒有專門的PDU。

 

彩信的PDU編碼 。彩信PDU在語義上與HTTP協議類似,但是其編碼方式並不一樣,爲了充分利用帶寬,彩信PDU採用二進制方式編碼。其編碼規則很簡單,預定義的消息域的KEY都有唯一的單字節編碼,如:

Key

編碼

Bcc

0x01

Cc

0x02

Content-Location

0x03

Content-Type

0x04

Date

0x05

Delivery-Report

0x06

Delivery-Time

0x07

Expiry

0x08

From

0x09

Message-Class

0x0A

Message-ID

0x0B

Message-Type

0x0C

MMS-Version

0x0D

Message-Size

0x0E

Priority

0x0F

Read-Reply

0x10

Report-Allowed

0x11

Response-Status

0x12

Response-Text

0x13

Sender-Visibility

0x14

Status

0x15

Subject

0x16

To

0x17

Transaction-Id

0x18

 

 

 

而消息域的Value部分,如果只有幾個固定的可選值,這幾個值也用單子節的編碼,由於這些值只出現在特定的上下文中,所以無需要全局唯一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章