田海立@CSDN
2012-06-30
WAP PUSH业务是承载在SMS业务之上的,亦即WAP PUSH数据封装在SMS PDU的UserData中。本文分析PDU的UserData中WAP PUSH的WSP和WBXML的编码。
本文以《WAP PUSH解析(1)——SMS PDU编码》中已经讲解了SMS PDU封装的WAP PUSH数据为例来讲解WSP和WBXML的编码。SMS PDU封装在WSP和WBXML外面,所以WSP和WBXML的编码是不考虑数据是否是拼接的长短信的,WSP和WBXML要解析的是SMS PDU(如果分多个SMS发送,这里是拼接后的)的完整UserData。
79 06 01 ae 02056a0045c6080c03662e31303038362e636e2f662f736a6678000103e689bee69c8be5
8f8be38081e69fa5e5a4a9e6b094e38081e79c8be5b08fe8afb4e38081e79c8be696b0e997bbe280
a6e6898be69cbae9a39ee4bfa1efbc8ce7ae80e58d95e4bda0e79a84e7949fe6b4bbefbc81e8b5b6
e5bfabe4b88be8bdbde4bd93e9aa8ce6898be69cbae9a39ee4bfa1000101
一、WSP
下面是按次解析的WSP封装
1. transactionId:
0x79
2. pduType: 06
06 PDU_TYPE_PUSH
07 PDU_TYPE_CONFIRMED_PUSH
3. headerLength:
头长度是变长的:32bits标示的7位编码,最多用5个octets编码
octet的bit7为1标识后续octet仍为长度数据;为0标识长度结束
所以,这里01也就是头的长度。
4. ContentType:
(wap-230-wsp-20010705-a section 8.4.2.24)
WAP PUSH是通常的说法,其实WAP PUSH并不是最终的业务,最终业务是ContentType中标识的业务。
ae & 0x80 -> 2E
0x2e CONTENT_TYPE_B_PUSH_SI "application/vnd.wap.sic"
0x30 CONTENT_TYPE_B_PUSH_SL "application/vnd.wap.slc"
0x32 CONTENT_TYPE_B_PUSH_CO "application/vnd.wap.coc"
0x3e CONTENT_TYPE_B_MMS "application/vnd.wap.mms-message"
0x44 CONTENT_TYPE_B_PUSH_SYNCML_NOTI "application/vnd.syncml.notification"
可以看到,PUSH Service Indication(SI) / PUSH Sservice Load(SL) / MMS都是WAP PUSH over SMS中的业务,而通常说的WAP PUSH业务指的是SI/SL。
这里封装的是SI。
接下来是WBXML封装的SI数据。
02056a 00 45c6 08 0c 03662e31303038362e636e2f662f736a6678000103e689bee69c8be58f8be380
81e69fa5e5a4a9e6b094e38081e79c8be5b08fe8afb4e38081e79c8be696b0e997bbe280a6e6898b
e69cbae9a39ee4bfa1efbc8ce7ae80e58d95e4bda0e79a84e7949fe6b4bbefbc81e8b5b6e5bfabe4
b88be8bdbde4bd93e9aa8ce6898be69cbae9a39ee4bfa100 0101
二、PUSH SI的封装WBXML
WAP PUSH SI是封装在XML格式中的,但是XML不适合在SMS这种长度极度受限的传输手段,所以采用PUSH采用WBXML(WAP Binary XML)封装。WBXML用一个字节代替常用的TAG和Attribute,所以能极大的节约传输数据量。
下面是WBXML到XML的解析:
02 <?xml version="1.0" encoding="UTF-8"?>
05 <!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN"
"http://www.wapforum.org/DTD/si.dtd">
6A IANACharset
04 iso-8859-1
17 shift_JIS
6A UTF-8
03 US-ASCII
00 String table Length
45 <si>
C6 <indication
08 action="signal-high"
06 action="signal-low"
07 action="signal-medium"
0C href="http://
0D href="http://www.
0E href="https://
0F href="https://www.
03 start of inline string value
662e31303038362e636e2f662f736a6678
f . 1 0 0 8 6 . c n / f / s j f x
00 end of inline string value
01 '>' end of attributes
>
03 start of inline string value
e689bee69c8be58f8be38081e69fa5e5a4a9 找朋友、查天
e6b094e38081e79c8be5b08fe8afb4e38081 气、看小说、
e79c8be696b0e997bbe280a6e6898be69cba 看新闻…手机
e9a39ee4bfa1efbc8ce7ae80e58d95e4bda0 飞信,简单你
e79a84e7949fe6b4bbefbc81e8b5b6e5bfab 的生活!赶快
e4b88be8bdbde4bd93e9aa8ce6898be69cba 下载体验手机
e9a39ee4bfa1 飞信
00 end of inline string value
01 </indication>
01 </si>
最终解析得到的XML为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN"
"http://www.wapforum.org/DTD/si.dtd">
<si>
<indication action="signal-high" href="http://f.10086.cn%2Ff%2Fsjfx">
找朋友、查天气、看小说、看新闻…手机飞信,简单你的生活!赶快下载体验手机飞信
</indication>
</si>
三、带有string table的WBXML
WBXML封装的字符串有inline string和string table两种,这两种字串都以’\0’结束。String table中可以由’\0’结束的多个字符串,stringtable的长度把结束符’\0’计算在内,是所有字串的总长度。
139邮箱的WAP PUSH提醒通知采用了String tables。很多手机终端虽然能收到通常的PUSH消息,但是却接收不到139邮箱的WAP PUSH通知,原因就是不支持带stringtable的WBXML的解析,而忽略了这样的PUSH消息。
下面是带有String table的WAP PUSH SI数据
02056a0fe982aee4bbb63a52653a507573680045c60c03792e31303038362e636e2f693f663d3430
26693d313039383830393834303100080183000101
下面是WBXML到XML的解析:
02 <?xml version="1.0" encoding="UTF-8"?>
05 <!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN"
"http://www.wapforum.org/DTD/si.dtd">
6A IANACharset
04 iso-8859-1
17 shift_JIS
6A UTF-8
03 US-ASCII
0f String Table Length
长度是string table中所有string的长度,长度包含结束符’\0’。
e982aee4bbb63a52653a50757368
邮件:Re:Push
00 end of string table value
45 <si>
C6 <indication
0C href="http://
03 start of inline string value
792e31303038362e636e2f693f663d343026693d3130393838303938343031
y.10086.cn/i?f=40&i=10988098401
00 end of inline string value
08 action attribute - signal high
action="signal-high"
01 '>' end of attributes
>
83 String table reference below
00 String table index
01 </indication>
01 </si>
把String Table中的内容替换,得到最终解析出的XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE si PUBLIC "-//WAPFORUM//DTD SI 1.0//EN"
"http://www.wapforum.org/DTD/si.dtd">
<si>
<indication href="http://y.10086.cn/i?f=40&i=10988098401" action="signal-high">邮件:Re:Push
</indication>
</si>
四、小结
本文以WAP PUSH Service Indication为例,讲解WAP PUSH的WSP编码和WBXML编码。并对WBXML的两种string——inline string和string table进行了详细阐述。
参考资料
1. WAP Binary XMLContent Format
WBXML标准,必看!
2. MIUI ROM接收WAP PUSH短信的补丁
Android上的WAP PUSH解析实现,有源代码,但是解析不全。
3. WAP Push over SMS
WAP PUSH over SMS的大致介绍(英文)
4. WAP Push SMS encoding
WAP PUSH Service Indication封装实例(英文)
5. Sending SMS WAP Push messages using the ActiveXperts SMS and MMS Toolkit
发送WAP PUSH的工具。是使用说明,虽然没实现细节,但可参考WBXML的Token和Attribute对照。(英文)
6. android wap push功能实现
反面教材。用固定位置解析,以及固定用000103标识URL结束,固定用000101标识内容结束,简直是胡扯!
关于协议的解析还是要依据标准!用自己遇到的情况可以帮助理解协议,但是据此来做实现的话,只能解析一种情况,被解析内容或格式有少许变化,所做的实现就没用了,到处是BUG。
【修改历史记录】
2012/07/02 对页面布局做了修改
-
把PDU数据和编码解析部分放在了CSDN编辑工具“编程语言(其他)”里,这样看起来段落上好多了,不过损失了颜色标注!
- 把解析后的XML放在CSDN编辑工具“编程语言(HTML/XML)”里。
分享到:
相关推荐
wap-230-wsp-20010705-a协议下载,英文版的呀
wap push 的rfc文档,英文版的,对wap-push的权威描述
介绍wap无线应用协议中得会话层得协议格式,是做无线应用开发很好得参看文档,欢迎下载交流
使用Wap中的WSP发送短信的例子,适用于WinCE和Windows Mobile下,在vc2005下编译
jWAP is a Java implementation of the Wireless Application Protocol (WAP). It includes Wireless ... Additionally, jWAP contains a WAP Binary XML (WBXML) Parser/Generator. jWAP requires Java V >= 1.2.
RTK 是一个比较成熟的产品,可以在 Windows 平台和 Linux 平台上编译。...它支持 XML 和 WBXML 编码,还支持 HTTP(用于 Web 上的同步)、WSP(在 WAP 上使用)和 OBEX(在 IrDA 或蓝牙上使用)传输。
WSP_采集数据包易语言源码
wap无线应用协议pdf完整版,含详细书签,方便查阅 本书目录: 第1章 无线应用协议体系结构规范 第2章 无线应用环境概述 第3章 无线应用环境规范 第4章 无线标志语言规范 第5章 二进制XML内容格式规范 第6章 ...
三菱机器人与上位机TCP通讯
一个用WSP工具制作的实例
前阶段研究wap push时阅读过的文档,希望对大家由帮助
Dahua大华DH 显示与控制 dh-wsp-er04 操作手册.pdf
WSP wonderware intouch 2014r2 真的能用的到2020年1月的lic,不用换dll文件就能用 Lic To: C:\Program Files (X86)\Common Files\ArchestrA\License\ 2014R2
新版的办公软件,2012年版的,直接安装即可
ExpertNewsRotator.wsp。专家新闻轮转器。让你的站点熠熠生辉。
移动多媒体消息封装的详细介绍的标准规范,是进行移动通信多媒体协议开发的知识
科威 新字符屏WSP-0301-24 组态软件2.12.Drar,科威 新字符屏WSP-0301-24 组态软件2.12.D
window编程代码,在机子上已经跑过,确保没有bug的,大家支持下,没有积分了。
用于Windows网络编程的API同步函数API异步函数WinPcap Documentation 3.1
wsp_health