韩国rass实感模拟射击:wap push二进制短信配置浏览器的说明并有短信测试地址.

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 07:33:19
手机收到短信二进制码流解析
(2010-11-26 22:38:45)转载
标签: pushemail
短信
it
你要给目的手机发送一条短信,它必须是二进制格式的,这样手机才能够识别出来。
这条短信内容差不多分为三块:
l         WDP Layer的包头;
l         WSP Layer的包头;
l         WBXML。
书签的真正内容是用WBXML表述的。
WDP、WSP
什么是WDP和WSP呢?。
WDP即Wireless Datagram Protocol。WSP即Wireless Session Protocol。
更多信息可以参考http://www.protocols.com/pbook/wap.htm。
WAP Forum 在设计1.x版本的时候是经过深思熟虑的,但它和我们熟知和喜爱的3W协议(比如HTTP, SSL 和HTML)并不兼容。
WAP1.x堆栈被定义为五层,自底向上依次是:
u       WDP (Wireless Datagram Protocol),
u       WTLS (Wireless Transport Layer Security),
u       WTP (Wireless Transaction Protocol),
u       WSP (Wireless Session Protocol),
u       WAE (Wireless Application Environment,包括 Wireless Markup Language 或WML, 以及 WMLScript )。
每一层都和3W堆栈层面大致吻合:
n         WDP->IP,
n         WTP->TCP,
n         WTLS->SSL/TLS,
n         WSP->HTTP,
n         WML->HTML。
这时你可以参考
http://www.protocols.com/pbook/images/wapstack.gif
,The OSI Model for Wireless Communication。
由于WSP相当于HTTP层,那么WSP层所肩负的职责是:
1).提供HTTP 1.1的功能和语义
2).能力协商
3).会话状态长期保存
4).会话挂起和恢复
5).可靠以及不可靠的Push的公共机制
等等。
在我们的OTA实现中,WSP Header其实就是声明两个内容:PDU type和MIME Type;至于WDP,就是声明一个端口号,并说明本数据包是整条短信的第几个包。
本实现代码参考了CodeProject上的一个生成WAP Push的工程,所以你将会看到类似于它的WDP、WSP类和方法。
WBXML
WBXML,就是WAP Binary XML。
简单地说,它就是一个定义好的XML片断,可以表述出WAP浏览器设置、WAP书签设置等等内容。
比如,这样一个实例:
UltraBinarySMS






这样指明一个名为“yahoo”的WAP书签,指向http://wap.yahoo.com/。
很简单不是吗?
但是如何将这个XML转换为短信所需要的二进制呢?
转换过程:按图索骥
Nokia是这么定义转换规则的,很简单,就是尽可能简短地用一个字符表示某一个元素。比如我们上面定义的WBXML可以用下面的转换规则:
WBXML节点定义
对应的二进制ASCII字符

45
C6
TYPE="BOOKMARK"
7F
> (End attribute)
01
PARM
87
NAME="NAME"
15
VALUE
11
String start
03
Yahoo
7961686F6F
String end
00
/> End (PARM)
01
PARM
08
NAME="URL"
17
VALUE
11
String start
03
http://wap.yahoo.com
687474703A2F2F7761702
E7961686F6F2E636F6D
String end
00
/> End (PARM)
01
/> End (CHARACTERISTIC)
01
/> End (CHARACTERISTIC-LIST)
01
是不是很简单?
具体的转换规则,可以参考《OTA_settings_general_7_0.pdf》的8.2章节。
下面简单说一下分包:
分包
如果你的短信既要设置浏览器,又要设置书签,就有可能短信内容超长,必须事先分为两个或者多个包。
《OTA_settings_general_7_0.pdf》
和《OTA_service_settings_example_v11.pdf》的例子可以很明显地看出来这一点。
每个包还按照二进制短信发出,由客户端-手机自行合并为一个,并解析。
《OTA_service_settings_example_v11.pdf》的例子中,通过WDP的包头来设置:
02代表共有两个包(Total no. of segments in datagram);
第一个短信的01代表这是第一个包(segment count);
第二个短信则是02。
我的源代码
OTASMS工程中有一个OTACreator项目,它提供了一个com.ultrapower.OTACreator.dll,来给出如何根据输入参数“书签标题”和“书签URL”生成最终要发送的OTA短信内容。它的调用方法如下所示:
OTAMessage
OTAMessage message = new OTAMessage();
string strSMSContent = message.GetSMSBytes(“我的WAP”, “http://mywap.com”);
strSMSContent就是我们要的短信内容。上面的代码执行之后,得到的二进制ASCII文本内容是:
Sms content
0B0504C34FC002000304010101062C1F2A6170706C69636174696F6E2F782D7761702D
70726F762E62726F777365722D73657474696E67730081EA01016A0045C67F018715110
3E68891E79A8477617000018717110387687474703A2F2F6D797761702E636F6D00010101
稍候我们按照《OTA_service_settings_example_v11.pdf》解释一下这个字符串每一个字符的含义。
我们还提供了一个公开的Web Service:
http://219.238.168.183/SendBinarySMS/sendsms.asmx?wsdl
Web service介绍
提供免费的发送二进制短信的渠道。本服务仅供测试OTA自动配置和书签短信。中国移动有监控,请勿作其他用途。
支持下列操作。有关正式定义,请查看服务说明。
·                     send
填写二进制短信的HEX ASCII文本内容。比如“0B0504C34FC0020003040202296A0101860711036874”之类的。具体要填写的内容,请参考我的OTASMS工程,它会帮助你生成要发送的二进制内容。
,供您测试发送OTA短信。只需要提供输入参数:短信内容和目标号码即可。
你运行本工程的OTATextBuilder,可以看到这样的界面:

点击“调用OTACreator生成OTA”按钮之后,再点击“将上面的二进制短信发出去”按钮,你的手机上就会收到一个叫做“配置信息”的短信,它有一个菜单叫做“存入书签”。
逐行解释OTA例子
上面生成了一个OTA短信:
Sms content
0B0504C34FC002000304010101062C1F2A6170706C69636174696F6E2F782D
7761702D70726F762E62726F777365722D73657474696E67730081EA01016A
0045C67F0187151103E68891E79A8477617000018717110387687474703A2F2F6
D797761702E636F6D00010101
我们尽量细地解释一下。首先是WDP:
Layer
binary
解释
WDP层
0B
User-Data-Header (UDHL) Length = 11
05
UDH IE identifier: Port numbers
04
UDH port number IE length
C3
这四个数字定义了一个端口号:49999
4F
C0
02
00
UDH IE identifier: SAR
03
UDH SAR IE length
04
Datagram ref no.
01
这两个只有当OTA内容过长时,短信会被拆分为两条或多条,这时候第1个字节表明OTA短信共有几个数据包,也就是共被拆分为几条短信;第2个字节表明当前数据包是第几个数据包。
默认情况下,我们只有一个数据包,并且当前包是第一个数据包。所以就是0x01 0x01了。
01
接下来是WSP:
Layer
binary
解释
WSP层
01
Transaction ID / Push ID WSP layer
06
PDU type (push)
2C
Header length (content type+headers)
1F
value length quote length greater than 30
2A
value length (value name not used)
61,70,70,6C,69,63,61,74,69,
6F,6E,2F,78,2D,77,61,70,2D
,70,72,6F,76,2E,62,72,6F,77,
73,65,72,2D,73,65,74,74,69,
6E,67,73
就是ASCII字符串:'a','p','p','l','i','c','a','t','i','o','n','/','x','-
','w','a','p','-
','p','r','o','v','.','b','r','o','w','s','e','r','-
','s','e','t','t','i','n','g','s',
MIME-Type =
browser settings
00
Null termination of content type string
81
charset (well known PARM.(short
integer))
EA
UTF-8 (using short integer) WSP layer (end WSP
headers)
然后是WBXML:
Layer
binary
解释
WBXML
01
Version WBXML 1.1
01
Unknown public identifier
06
Charset UTF-8
00
string table length
45
CHARACTERISTIC_LIST with content tag
C6
CHARACTERISTIC with content and
attributes
tag
7F
书签属性。
在规范8.2章节定义的
TYPE=BOOKMARK
对应的binary是7F
01
属性定义结束
87
PARM with attributes
15
NAME=NAME
11
VALUE
03
Inline string
E68891E79A84574150
“我的WAP”所对应的binary
00
End inline string
01
End(PARM)
87
PARM with attributes
17
NAME=URL
11
VALUE
03
Inline string
687474703A2F2F6D797761702E636F6D
“http://mywap.com”所对应的binary
00
End inline string
01
End(PARM)
01
end (CHARACTERISTIC)
01
end (CHARACTERISTIC_LIST)