王朝网络
分享
 
 
 

WAP协议研究笔记--wbxml2代码导读

王朝other·作者佚名  2006-12-05
宽屏版  字体: |||超大  

WAP协议研究笔记--wbxml2代码导读

转载时请注明出处:http://blog.csdn.net/absurd

我们知道,彩信(MMS)和WAP浏览器是WAP协议的两大主要应用。WAP协议有点复杂,也算是SmartPhone中的核心技术之一吧,它包括WDP/WTP/WSP这一套传输协议,也包括WML/和SMIL这样的内容表示协议。去年花了一点时间去研究它,后来该任务取消了,所以没有搞得太透彻。今年要真正使用了,现在继续研究,主要侧重于它的实现。这里记录一些研究笔记,本文是关于wbxml解析器的。

WBXML是WAP Binary XML Content Format的简称。WML和HTML有些类似,但针对手持设备做了些特殊处理,只支持一些最基本的功能,同时加了一些特殊的元素。像大多数标记语言一样,WML的tag本身占了不少空间。为了充分利用有限的带宽资源,wapforum提出了WBXML规范,它实际上相当于一种简单的压缩算法。

这种算法比较简单,它给常用的字符串指定一个单字节的ID,这些字符串包括TAG、属性和属性的值等等,比如<anchor>用0x22表示,这样8个字节压缩成了1个字节。而TAG的结束统一用0x01表示,进一步对数据进行压缩。这种压缩算法简单,尽管它只针对标记语言本身,而不能针对网页内容,但由于标记语言在文件中所占比例较大,所以压缩率仍然十分可观。下面是一个简单的例子(压缩前后):

<wml>

<card id="abc" ordered="true">

<p>

<do type="accept">

<go href="http://xyz.org/s"/>

</do>

X: $(X)<br/>

Y: $(&#x59;)<br/>

Enter name: <input type="text" name="N"/>

</p>

</card>

</wml>

02 08 6A 04 'X' 00 'Y' 00 7F E7 55 03 'a' 'b' 'c' 00

33 01 60 E8 38 01 AB 4B 03 'x' 'y' 'z' 00 88 03

's' 00 01 01 03 ' ' 'X' ':' ' ' 00 82 00 26 03 ' ' 'Y'

':' ' ' 00 82 02 26 03 ' ' 'E' 'n' 't' 'e' 'r' ' ' 'n'

'a' 'm' 'e' ':' ' ' 00 AF 48 21 03 'N' 00 01 01 01 01

虽然无论是解析WML还是WBXML,其算法都不是太难。但其工作量可不小的,特别是要花不少时间去阅读相关规范,漏掉一点都可能会造成不小的麻烦。幸好sourceforge上已经有一个叫做wbxml2的项目,它实现了WML和WBXML的解析以及两者之间的转换功能。下面我们介绍一下wbxml2-0.9.2的代码:

1. wbxml_base64.c/wbxml_base64.h base64编码算法,wbxml中用来编/解码Digital Rights Management(DRM)的KeyValue。

2. wbxml_buffers.c/wbxml_buffers.h buffer管理算法,通常解析器都会实现一个buffer管理算法,一方面有效利用内存,避免内存碎片。另一方面使用也比较方便。

3. wbxml_charset.c/wbxml_charset.h 字符集转换函数,里面调用libc的iconv系列函数实现。

4. wbxml_conv.c/wbxml_conv.h 实现了两个函数,用来在WML和WBXML之间转换。

5. wbxml_elt.c/wbxml_elt.h 对TAG的抽象,实现了一些常用的函数。

6. wbxml_encoder.c/wbxml_encoder.h 对语法树进行编码,即把语法树转换成WBXML语言。

7. wbxml_errors.c/wbxml_errors.h 错误信息,主要是WML/WBXML的语法错误。

8. wbxml.h 总的头文件。

9. wbxml_handlers.h SAX解析器的回调函数的原型定义。

10. wbxml_lists.c/wbxml_lists.h 一个简单的链表实现。

11. wbxml_log.c/wbxml_log.h log函数,用来打印一些调试信息。

12. wbxml_mem.c/wbxml_mem.h 对内存分配/释放函数的封装,主要是用来查内存泄漏。

13. wbxml_parser.c/wbxml_parser.h 这是WBXML的解析器,采用类SAX的方式解析。

14. wbxml_tables.c/wbxml_tables.h 字符串和其编码的对应关系表,在编/解码时需要。

15. wbxml_tree.c/wbxml_tree.h WML/WBXML的语法树。

16. wbxml_tree_clb_wbxml.c/wbxml_tree_clb_wbxml.h WBXML的回调函数,用来构建语法树。

17. wbxml_tree_clb_xml.c/wbxml_tree_clb_xml.h XML的回调函数,用来构建语法树。

18. wbxml_wrap_syncml.c/wbxml_wrap_syncml.h 对syncml的封装,没有任何实现。

WBXML的解析是wbxml_parser实现的,而对WML的解析是用expat实现的,所以它依赖于expat函数库。

~~~end~~

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有