Dillo 2.0 学习笔记二

来源:互联网 发布:如何写淘宝试用报告 编辑:程序博客网 时间:2024/05/29 04:48

从a_Cache_process_dbuf开始,Dillo开始解析Http协议:

1. 解析Http头。一个典型的Http头可能是如下所示:

HTTP/1.1 200 OKDate: Mon, 06 Dec 1999 20:54:26 GMTServer: Apache/1.3.6 (Unix)Last-Modified: Fri, 04 Oct 1996 14:06:11 GMTETag: "2f5cd-964-381e1bd6"Accept-Ranges: bytesContent-length: 327Connection: closeContent-type: text/html<title>Sample Homepage</title><img src="/images/oreilly_mast.gif"><h1>Welcome</h1>Hi there, this is a simple web page.  Granted,it may not be as elegant as some other webpages you've seen on the net, but there are some common qualities:<ul>  <li> An image,  <li> Text,  <li> and a <a href="/example2.html"> hyperlink. </a></ul>

Dillo 通过查找连续/n(丢弃/r)来确定包头的位置,并填充CacheEntry_t->Header。将Http头全部取出之后,交由Cache_parse_header处理。

Cache_parse_header首先根据Http状态码(第10,11,12字节)判断是否是continue,404以及redirect标志。如果不是以上标志,则根据Transfer-Encoding域初始化TransferDecoder,根据Content-Encoding初始化ContentDecoder,以及根据Content-Type初始化CharsetDecoder。

接下来处理body的内容:将内容依次通过3个Decoder,完成chunk分段、gzip解压和字符转码(至UTF8)的工作,得到真正的内容,并将3个Decoder释放。

终于要开始处理Http内容了,当然还要先处理一些杂事,比如更新一下界面上的状态栏,还有进度条等等。最关键的是这一句:

(Client->Callback)(CA_Close, Client);

即调用Client的Callback来处理页面的真正内容。该回调函数的设置是在设置type的时候调用a_Mime_set_viewer完成的。具体来说,就是初始化时向mime管理注册各种类型的处理器,比如a_Html_text,该函数的功能就是设置这个Callback。当Dillo处理到对应类型时,会根据类型名称字符串Content-Type找到对应type的注册函数并进行注册,这样Client->Callback就被设置了。

对于text/html来说,调用a_Html_text来注册,最终调用的是Html_callback。

今天就到这里,明天分析Html_text中的词法分析~

原创粉丝点击