Larbin源码分析:Url.cc

Url.cc主要功能是对url进行分析,提取出相应的host、port、file,并对file进行规格化。这里还涉及了Cookies的机制,关于Cookies,我还不是很熟。所以要继续努力。 

 fileNormalize:
    将从url中提取出来的文件名规格化:
   (1)#后面的跳过。
   (2)/./当前目录字符,跳过
   (3)// 用 / 代替
   (4)/../如果出现在首位置则返回false,否则,向前找到上一级目录(标志为:/)
   (5)/.:直接跳过
   (6)/..同(4)
   (7)如果是%号,则表示是个十六进制数,此时将这两个数转换为一个字符。
        如果这个字符是可打印的,则直接存储;如果是空格或‘/’则跳过,否则则表示一个错误的文件名,返回false。
   (8)如果不是前面的几种情况,则直接跳过,因为这本身就是一个归一化字符。 
    注意:Larbin中灰色的??号之间是用来表示if结束的地方,因为有些if..else特别多。

Normalize:直接调用fileNormalize

parse:从url字符串中提取主机名,端口号,文件名。url字符串已经去掉了http://
      获取主机名:找到第一个/,将前面的字符串复制入host,统一转换为小写字母;
      获取端口号:如果不是/,而是:,则表明url使用的不是端口80,此时里面的是数字的话记录下来,将数字写到port里面。
      获取文件名:如果没有,比如:http://www.google.com.hk/,则file为/
                 如果有,则将arg+fin后面的文件名记录下来。
parseWithBase:
      在一个url基类的文件中,追加一些字符。port和host不变。
      如果基类的文件是/,则现在文件为追加字符串,否则,将追加字符串和原文件copy到同一个char *里面;然后进行文件名的规格化。

siteHashcode;针对host,求hash码。这里定义的位因子为37,长度为20000。此函数仅本文件可见。
hostHashCode: 直接调用siteHashcode,求出host的hash码。
hashCode:针对端口、主机、文件求hash码。先让h=port,再用因子31,对host和file依次求hash。长度为64000000。
int_of_hexa:将char型16进制数,用int型返回。兼容大小写。
print:打印URL。printf("http://%s:%u%s\n",host,port,file)

url的构造函数:从url中提取出file、host、port信息。
      url::url(char *u ,int8_t depth, url * base):不是很明白base的用处,正常的情况下是提取信息,并规格化文件,如果url不是http://开头的,
                                                  而是http:开头的,则用基类base,调用parsewith提取。如果是其他协议,则不予处理(此时
                                                  file和host等为NULL)。
      url::url(char * host,uint port, char * file):直接用提供的变量初始化。
      url::url (char *line,  int8_t depth):line的前几个字符可能是数字,把他们转换为变量,然后分析接下来的字符串。 这里好像是定义了url_tag
                                           时才被使用。
      url::url (char *line):line中似乎先放数字,表示深度,然后定义了url_tags的话,放tags。然后再读入host、file、port和cookies。
 
~url(): 删除host、file、cookies变量
 isValid:判断host是否为空,是否超过最长字符串长度,整个url是否超过最长字符串长度。
 giveUrl: 返回一个url的字符串;(当前url类)
 getUrl:返回url字符串,不过不是字符指针,而是指定大小的字符数组。
 writeUrl:打印当前url类,所对应的字符串。

 serialize():为PresFifo序列化buf。格式为:depth+tag+host+port+file+cookie,返回该字符串。

 giveBase:返回host+port+文件夹名,不包括当前文件名。

     

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值