WAP协议研究笔记--wbxml2代码导读
虽然无论是解析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 字符串和其编码的对应关系表,在编/解码时需要。