分享

WAP协议研究笔记—彩信的传输 - Linux mobile development - ...

 xrzs 2010-02-05

更新时间:2006-12-19

我们知道,彩信(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协议。

彩信的交互过程。对彩信客户端实现者来说,我们主要关心:彩信发送方与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部分,如果只有几个固定的可选值,这几个值也用单子节的编码,由于这些值只出现在特定的上下文中,所以无需要全局唯一。

参考资料:

http://www.

http://www.

~~end~~

发表于 @ 2006年10月30日 22:04:00 | 评论( 6 ) | 编辑| 举报| 收藏

旧一篇:Freetype学习笔记 | 新一篇:serif vs sans serif
查看最新精华文章 请访问博客首页相关文章
Linux电源管理研究笔记—动态电源管理(DPM)multiplexer protocol研究笔记WAP协议研究笔记—WAP传输协议彩信库(mmslib)设计备忘录MMS開發備忘錄OpenOBEX代码阅读笔记彩信收发模块设计备忘录Mozilla研究—传输协议yikun 发表于2007年4月30日 15:43:01  IP:举报回复删除
你好拜读原文.发觉我抓的包与你的不符.以下是手机发彩信的时候抓的包.

POST http://10.41.83.239/ HTTP/1.1
Host: 10.41.83.239
Content-Type: application/vnd.wap.mms-message
Cookie2: $Version="1"
Content-Length: 18508
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
User-Agent: Nokia7600/2.0 (dbwk27) Profile/MIDP-1.0 Configuration/CLDC-1.0
x-wap-profile: "http://nds1.nds./uaprof/N7600r100.xml"

寑榖PvjuzLMJ4 崘?亞仐14101110052/TYPE=PLMN ?硥application/smil ?pHMZT> B?#application/smil 侁唒.smil 卲.smil ?<pHMZT> 巔.smil ?亞p.smil <smil>
<head>
<layout>
<root-layout width="122" height="115" />
<region id="Image" width="100%" height="67%" left="0%" top="0%" fit="meet" />
<region id="Text" width="100%" height="33%" left="0%" top="67%" fit="scroll" />
</layout>
</head>
<body>
<par dur="15000ms">
<text src="cidUlsncJ4uQ" region="Text" />
<img src="cid:9JxooThD0N" region="Image" />
</par>
</body>
</smil>
L亱瀱Image000.jpg 匢mage000.jpg 嶪mage000.jpg ?亞Image000.jpg ?<9JxooThD0N> *******(数据)

在这个报里面我找不到mms_header.也没有mmsbody中正常的content_type等字段.这与你说的结构报文不一样. 我抓过其他彩信的包与我上面贴的类似.我也认为你说的结构都是对的,可是实际抓的包为什么不一样?谢谢yikun 发表于2007年4月30日 15:51:05  IP:举报回复删除
你好拜读原文.发觉我抓的包与你的不符.以下是手机发彩信的时候抓的包.

POST http://10.41.83.239/ HTTP/1.1
Host: 10.41.83.239
Content-Type: application/vnd.wap.mms-message
Cookie2: $Version="1"
Content-Length: 18508
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
User-Agent: Nokia7600/2.0 (dbwk27) Profile/MIDP-1.0 Configuration/CLDC-1.0
x-wap-profile: "http://nds1.nds./uaprof/N7600r100.xml"

寑榖PvjuzLMJ4 崘?亞仐14101110052/TYPE=PLMN ?硥application/smil ?pHMZT> B?#application/smil 侁唒.smil 卲.smil ?<pHMZT> 巔.smil ?亞p.smil <smil>
<head>
<layout>
<root-layout width="122" height="115" />
<region id="Image" width="100%" height="67%" left="0%" top="0%" fit="meet" />
<region id="Text" width="100%" height="33%" left="0%" top="67%" fit="scroll" />
</layout>
</head>
<body>
<par dur="15000ms">
<text src="cidUlsncJ4uQ" region="Text" />
<img src="cid:9JxooThD0N" region="Image" />
</par>
</body>
</smil>
L亱瀱Image000.jpg 匢mage000.jpg 嶪mage000.jpg ?亞Image000.jpg ?<9JxooThD0N> *******(数据)

在这个报里面我找不到mms_header.也没有mmsbody中正常的content_type等字段.这与你说的结构报文不一样. 我抓过其他彩信的包与我上面贴的类似.我也认为你说的结构都是对的,可是实际抓的包为什么不一样?谢谢absurd 发表于2007年5月4日 21:54:12  IP:举报回复删除
to yikun: 去掉前面的HTTP协议头就是了。yikun 发表于2007年5月8日 9:57:18  IP:举报回复删除
去头也不行啊.我还是没找到他的mms_header,content_type等等. 去头后
寑榖PvjuzLMJ4 崘?亞仐14101110052/TYPE=PLMN ?硥application/smil ?pHMZT> B?#application/smil 侁唒.smil 卲.smil ?<pHMZT> 巔.smil ?亞p.smil

除了我能猜出 14101110052/TYPE=PLMN.前面包含了什么信息?
又比如L亱瀱Image000.jpg 匢mage000.jpg 嶪mage000.jpg ?亞Image000.jpg ?<9JxooThD0N>*******(数据)
9JxooThD0N是文件名称,但是前面的什么Image000.jpg是什么意思呢? 他有没有规范的格式?yikun 发表于2007年5月11日 9:42:10  IP:举报回复删除
明白了很多了.
X-Mms-Message-Type: m-retrieve-conf (0x84)

为什么X-Mms-Message-Type对应的是0x8c,m-retrieve-conf对应的是0x84.他是怎么编码的,在那个rfc又说明?absurd 发表于2007年5月12日 22:00:15  IP:举报回复删除
to yikun: WAP 2.0 SPEC里

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/absurd/archive/2006/10/30/1357619.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多