/** This represent a connection : we have a fixed number of them
* fetchOpen links them with servers
* fetchPipe reads those which are linked
*/
//表达连接相关信息
struct Connexion {
char state; // socket状态 : EMPTY, CONNECTING, WRITE, OPEN
int pos; //请求发送位置标记
FetchError err; // 连接如何终止,enum
int socket; // socket descriptor number
int timeout; // 连接超时时间设置
LarbinString request; // http请求报头
file *parser; // 解析连接 (a robots.txt or an html file)
char buffer[maxPageSize];//下载的网页数据
Connexion();//初始化state=emptyC,parser=NULL
~Connexion();//不执行,一旦执行就出错,assert(false)
void recycle();//释放*parser,再次初始化request
};

该结构体的主要两个类成员LarbinStrng,file。

LarbinString类(string.h声明,string.cc实现),主要是对字符串http报头的字符串相关操作

class LarbinString {
private:
char *chaine; //http报头字符串
uint pos; //http报头当前位置标记
uint size; //http报头大小
public:
LarbinString(uint size = STRING_SIZE); //初始化*chaine,pos=0,size
~LarbinString(); //释放*chaine
void recycle(uint size = STRING_SIZE); //重新分配*chaine
char *getString(); //返回*chaine
char *giveString(); //返回*chaine的拷贝
void addChar(char c); //chaine[pos]=c
void addString(char *s); //添加*s到*chine后(pos起)
void addBuffer(char *s, uint len); //添加*s到*chine后(pos起)
inline uint getLength() { return pos; }; //return pos
inline char operator [] (uint i) //数组[]运算符重载
void setChar(uint i, char c); //chaine[i]=c
};

file类,(html类,robots类),二者继承file类。解析连接(robots.txt or .html file)

class file {
protected:
char *buffer; //connexion中的buffer[maxPageSize(100000)],下载的网页数据
char *posParse; //解析位置
public:
file(Connexion *conn); //初始化*buffer=*posParse=conn->buffer;pos=0
virtual ~file();
bool isRobots; // Is it a robots.txt
uint pos; //*buffer的当前位置
// a string arrives from the server
virtual int inputHeaders(int size) = ; // just parse headers
virtual int endInput() = ;
}; class html : public file {
private:
url *here; //url地址
char *area; //当前感兴趣区的起始位置
char *contentStart; //真正内容的起始位置,报头之后的内容
url *base; //url基地址
/* manage a new url : verify and send it */
void manageUrl(url *nouv, bool isRedir);

larbin源码之global.h的更多相关文章

  1. ncnn 源码学习-Mat.h Mat.c

    纯小白记录下腾讯的ncnn框架源码的学习.纯粹写给自己看的,不保证正确性. Mat 类似于 caffe中的blob,是一个张量的存储结构体. 一.数据成员: 1.void * data 多维数据按一位 ...

  2. mini-httpd源码分析-port.h

    针对不同系统的宏定义,对于Linux而言 /* port.h - portability defines */ #elif defined(linux) # define OS_Linux # def ...

  3. mini-httpd源码分析-version.h

    /* version.h - version defines for mini_httpd */ #ifndef _VERSION_H_ #define _VERSION_H_ #define SER ...

  4. Redis源码研究--redis.h

    ------------7月3日------------ /* The redisOp structure defines a Redis Operation, that is an instance ...

  5. mini-httpd源码分析-match.h

    //字符串匹配,匹配返回 1,否则返回 0. //pattern可以通过任意个 | 字符,组合match_one中pattern的功能 int match(const char* pattern, c ...

  6. mini-httpd源码分析-tdate_parse.h

    ///关联字符串和整数 struct strlong { char* s; long l; }; ///将字符串中的大写字母转换成小写字母 static void pound_case(char* s ...

  7. 包含到cocos2d-x里的tcpsocket源码

    声明:本文参考了langresser发布的blog“跨平台的游戏客户端Socket封装” Socket处理是异步非阻塞的,所以可以放心的放到主线程处理消息,并且在原作者的基本上进行了系列优化,考虑了客 ...

  8. [小工具] Command-line CPU Killer(附源码及下载链接)

    博主有次在拆卸自己的笔记本电脑后,发现电脑如果静置时间长了有时会重启,但奇怪的是当我自己在电脑前工作的时候从来没有重启过.据此推测可能 CPU 完全空闲的时候风扇完全停转了,虽然 CPU 温度不高,但 ...

  9. php源码分析之PHPAPI宏的作用

    在PHP源码中,我们经常会看到很多函数前面有个PHPAPI,但这是什么呢? 于是我在php源码/main/php.h中找到了它的定义 #ifdef PHP_WIN32 # include " ...

随机推荐

  1. OC 数组

    /*---------------------------创建数组------------------------------*/ //NSArray *array = [[NSArray alloc ...

  2. Bootstrap插件——(Tab)标签页

    项目中用到了Bootstrap的(Tab)标签页插件,记录如下: 代码如下: <div class="tabbable"> <ul class="nav ...

  3. *++p和*p++的区别

    *p++:先是用*p这个值,然后再使p的地址加1. #include<iostream>using namespace std;int main(){    char s[81]=&quo ...

  4. 关于在页面上执行sql语句

    在页面上执行sql语句,首先在页面上顶一个文本域,让用户输入需要执行的sql语句. html代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...

  5. for之Python vs C#

    class test(object): def rangetest(self): for i in range(2,0,-1): print i print i i=2 while i>0: p ...

  6. 多主一从mysql replication同步表的大胆尝试.

    能否将不同机器上的不同库中的表同步到同一个机器的同一个库中?表是不同的.而且对于slave这台机子来说,这些表只用来读.   同步不同库的表很简单了,用 replicate-do-table=db_n ...

  7. phpcms v9 万能字段使用

    <input type="text" name="info[down]" id="down" value="{FIELD_V ...

  8. View的滑动冲突

    一.常见的滑动冲突 场景1:外部滑动和内部滑动不一致 场景2:外部滑动和内部滑动一致 场景3:上面两种情况的嵌套 二.滑动冲突的处理方法 场景一:根据水平滑动还是竖直滑动判断到底由谁来拦截事件. 场景 ...

  9. 用正则表达式抓取网页中的ul 和 li标签中最终的值!

                获取你要抓取的页面 const string URL = "http://www.hn3ddf.gov.cn/price/GetList.html?pageno=1& ...

  10. 浅谈局域网ARP攻击的危害及防范方法(图)

    浅谈局域网ARP攻击的危害及防范方法(图)   作者:冰盾防火墙 网站:www.bingdun.com 日期:2015-03-03   自 去年5月份开始出现的校内局域网频繁掉线等问题,对正常的教育教 ...