亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? htrobot.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/***	@(#) $Id: HTRobot.c,v 1.90 1999/03/19 20:20:14 frystyk Exp $**	**	W3C Webbot can be found at "http://www.w3.org/Robot/"**	**	Copyright 仼 1995-1998 World Wide Web Consortium, (Massachusetts**	Institute of Technology, Institut National de Recherche en**	Informatique et en Automatique, Keio University). All Rights**	Reserved. This program is distributed under the W3C's Software**	Intellectual Property License. This program is distributed in the hope**	that it will be useful, but WITHOUT ANY WARRANTY; without even the**	implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR**	PURPOSE. See W3C License http://www.w3.org/Consortium/Legal/ for more**	details.****  Authors:**	HFN		Henrik Frystyk Nielsen, (frystyk@w3.org)**	BR		Bob Racko**	JP		John Punin****  History:**	Dec 04 95	First version**	Oct 1998	Split into separate files*/#include "HTRobMan.h"#include "HTQueue.h"#include "HTAncMan.h"#define SHOW_QUIET(mr)		((mr) && !((mr)->flags & MR_QUIET))#define SHOW_REAL_QUIET(mr)	((mr) && !((mr)->flags & MR_REAL_QUIET))PRIVATE HTErrorMessage HTErrors[HTERR_ELEMENTS] = {HTERR_ENGLISH_INITIALIZER};/***  Some sorting algorithms*/PRIVATE HTComparer HitSort, FormatSort, LastModifiedSort, TitleSort;/***  Ths callbacks that we need from the libwww HTML parser*/PRIVATE HText_new	RHText_new;PRIVATE HText_delete	RHText_delete;PRIVATE HText_foundLink	RHText_foundLink;/* ------------------------------------------------------------------------- *//*	Create a "HyperDoc" object**	--------------------------**	A HyperDoc object contains information about whether we have already**	started checking the anchor and the depth in our search*/PUBLIC HyperDoc * HyperDoc_new (Robot * mr,HTParentAnchor * anchor, int depth){    HyperDoc * hd;    if ((hd = (HyperDoc *) HT_CALLOC(1, sizeof(HyperDoc))) == NULL)	HT_OUTOFMEM("HyperDoc_new");    hd->depth = depth;    hd->hits = 1;    hd->code = NO_CODE;    hd->index = ++mr->cindex;    /* Bind the HyperDoc object together with the Anchor Object */    hd->anchor = anchor;    HTAnchor_setDocument(anchor, (void *) hd);    /* Add this HyperDoc object to our list */    if (!mr->hyperdoc) mr->hyperdoc = HTList_new();    HTList_addObject(mr->hyperdoc, (void *) hd);    return hd;}/*	Delete a "HyperDoc" object**	--------------------------*/PUBLIC BOOL HyperDoc_delete (HyperDoc * hd){    if (hd) {	HT_FREE (hd);	return YES;    }    return NO;}/***  Sort the anchor array and log reference count*/PRIVATE BOOL calculate_hits (Robot * mr, HTArray * array){    if (mr && array) {        HTLog * log = HTLog_open(mr->hitfile, YES, YES);        if (log) {            void ** data = NULL;            HTParentAnchor * anchor = NULL;            HTArray_sort(array, HitSort);            anchor = (HTParentAnchor *) HTArray_firstObject(array, data);	    while (anchor) {                char * uri = HTAnchor_address((HTAnchor *) anchor);                HyperDoc * hd = (HyperDoc *) HTAnchor_document(anchor);                if (uri && hd) HTLog_addText(log, "%8d %s\n", hd->hits, uri);                HT_FREE(uri);                anchor = (HTParentAnchor *) HTArray_nextObject(array, data);            }	}        HTLog_close(log);        return YES;    }    return NO;}PRIVATE int HitSort (const void * a, const void * b){    HyperDoc * aa = HTAnchor_document(*(HTParentAnchor **) a);    HyperDoc * bb = HTAnchor_document(*(HTParentAnchor **) b);    if (aa && bb) return (bb->hits - aa->hits);    return bb - aa;}/***  Sort the anchor array and log link relations*/PRIVATE BOOL calculate_linkRelations (Robot * mr, HTArray * array){    if (mr && array) {        HTLog * log = mr->relfile ? HTLog_open(mr->relfile, YES, YES) : NULL;	void ** data = NULL;	HTParentAnchor * anchor = NULL;	anchor = (HTParentAnchor *) HTArray_firstObject(array, data);	while (anchor) {	    /*	    **  If we have a specific link relation to look for then do this.	    **  Otherwise look for all link relations.	    */	    if (mr->relation) {		HTLink * link = HTAnchor_findLinkType((HTAnchor *) anchor, mr->relation);		if (link) {		    HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link));		    char * src_uri = HTAnchor_address((HTAnchor *) anchor);		    char * dest_uri = HTAnchor_address((HTAnchor *) dest);		    if (src_uri && dest_uri) {#ifdef HT_MYSQL			if (mr->sqllog) {			    HTSQLLog_addLinkRelationship (mr->sqllog,							  src_uri, dest_uri,							  HTAtom_name(mr->relation),							  NULL);			}#endif			if (log) {			    HTFormat format = HTAnchor_format(dest);			    HTLog_addText(log, "%s %s %s --> %s\n",					  HTAtom_name(mr->relation),					  format != WWW_UNKNOWN ?					  HTAtom_name(format) : "<unknown>",					  src_uri, dest_uri);			}			/* Cleanup */			HT_FREE(src_uri);			HT_FREE(dest_uri);		    }		}	    } else {		HTLink * link = HTAnchor_mainLink((HTAnchor *) anchor);		HTList * sublinks = HTAnchor_subLinks((HTAnchor *) anchor);		char * src_uri = HTAnchor_address((HTAnchor *) anchor);		HTLinkType linktype;		/* First look in the main link */		if (link && (linktype = HTLink_type(link))) {		    		    HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(link));		    char * dest_uri = HTAnchor_address((HTAnchor *) dest);		    if (src_uri && dest_uri) {#ifdef HT_MYSQL			if (mr->sqllog) {			    HTSQLLog_addLinkRelationship (mr->sqllog,							  src_uri, dest_uri,							  HTAtom_name(linktype),							  NULL);			}#endif			if (log) {			    HTFormat format = HTAnchor_format(dest);			    HTLog_addText(log, "%s %s %s --> %s\n",					  HTAtom_name(linktype),					  format != WWW_UNKNOWN ?					  HTAtom_name(format) : "<unknown>",					  src_uri, dest_uri);			}		    }		    HT_FREE(dest_uri);		}		/* and then in any sublinks */		if (sublinks) {		    HTLink * pres;		    while ((pres = (HTLink *) HTList_nextObject(sublinks))) {			if ((linktype = HTLink_type(pres))) {			    HTParentAnchor * dest = HTAnchor_parent(HTLink_destination(pres));			    char * dest_uri = HTAnchor_address((HTAnchor *) dest);			    if (src_uri && dest_uri) {#ifdef HT_MYSQL				if (mr->sqllog) {				    HTSQLLog_addLinkRelationship (mr->sqllog,								  src_uri, dest_uri,								  HTAtom_name(linktype),								  NULL);				}#endif				if (log) {				    HTFormat format = HTAnchor_format(dest);				    HTLog_addText(log, "%s %s %s --> %s\n",						  HTAtom_name(linktype),						  format != WWW_UNKNOWN ?						  HTAtom_name(format) : "<unknown>",						  src_uri, dest_uri);				}				HT_FREE(dest_uri);			    }			}		    }		}		/* Cleanup */		HT_FREE(src_uri);	    }	    anchor = (HTParentAnchor *) HTArray_nextObject(array, data);	}        if (log) HTLog_close(log);        return YES;    }    return NO;}/***  Sort the anchor array and log last modified date*/PRIVATE BOOL calculate_lm (Robot * mr, HTArray * array){    if (mr && array) {        HTLog * log = HTLog_open(mr->lmfile, YES, YES);        if (log) {            void ** data = NULL;            HTParentAnchor * anchor = NULL;            HTArray_sort(array, LastModifiedSort);            anchor = (HTParentAnchor *) HTArray_firstObject(array, data);	    while (anchor) {                char * uri = HTAnchor_address((HTAnchor *) anchor);                time_t lm = HTAnchor_lastModified(anchor);                if (uri && lm > 0)		    HTLog_addText(log, "%s %s\n", HTDateTimeStr(&lm, NO), uri);                HT_FREE(uri);                anchor = (HTParentAnchor *) HTArray_nextObject(array, data);            }	}        HTLog_close(log);        return YES;    }    return NO;}PRIVATE int LastModifiedSort (const void * a, const void * b){    time_t aa = HTAnchor_lastModified(*(HTParentAnchor **) a);    time_t bb = HTAnchor_lastModified(*(HTParentAnchor **) b);    return bb - aa;}/***  Sort the anchor array and log the document title*/PRIVATE BOOL calculate_title (Robot * mr, HTArray * array){    if (mr && array) {        HTLog * log = HTLog_open(mr->titlefile, YES, YES);        if (log) {            void ** data = NULL;            HTParentAnchor * anchor = NULL;            HTArray_sort(array, TitleSort);            anchor = (HTParentAnchor *) HTArray_firstObject(array, data);	    while (anchor) {                char * uri = HTAnchor_address((HTAnchor *) anchor);                const char * title = HTAnchor_title(anchor);		HTCharset charset = HTAnchor_charset(anchor);                if (uri) HTLog_addText(log, "%s `%s\' %s\n",				       charset ? HTAtom_name(charset) : "<none>",				       title ? title : "<none>",				       uri);                HT_FREE(uri);                anchor = (HTParentAnchor *) HTArray_nextObject(array, data);            }	}        HTLog_close(log);        return YES;    }    return NO;}PRIVATE int TitleSort (const void * a, const void * b){    const char * aa = HTAnchor_title(*(HTParentAnchor **) a);    const char * bb = HTAnchor_title(*(HTParentAnchor **) b);    return strcasecomp(bb?bb:"", aa?aa:"");}/***  Calculate distributions for media types. The same mechanism**  can be used for other characteristics with relatively**  few outcomes.*/PRIVATE HTList * mediatype_distribution (HTArray * array){    if (array) {	HTList * mt = HTList_new();	MetaDist * pres = NULL;	void ** data = NULL;	HTParentAnchor * anchor = NULL;	anchor = (HTParentAnchor *) HTArray_firstObject(array, data);	while (anchor) {	    HTFormat format = HTAnchor_format(anchor);	    if (format && format != WWW_UNKNOWN) {		HTList * cur = mt;		/* If found then increase counter */		while ((pres = (MetaDist *) HTList_nextObject(cur))) {		    if (pres->name == format) {			pres->hits++;			break;		    }		}		/* If not found then add new format to list */		if (!pres) {                    if ((pres = (MetaDist *) HT_CALLOC(1, sizeof(MetaDist))) == NULL)        	         HT_OUTOFMEM("mediatype_distribution");		    pres->name = format;		    pres->hits = 1;		    HTList_addObject(mt, pres);		    HTList_insertionSort(mt, FormatSort);		}	    }	    /* Find next anchor in array */	    anchor = (HTParentAnchor *) HTArray_nextObject(array, data);	}	return mt;    }    return NULL;}/***  Calculate distributions for charsets. The same mechanism**  can be used for other characteristics with relatively**  few outcomes.*/PRIVATE HTList * charset_distribution (HTArray * array){    if (array) {	HTList * cs = HTList_new();	MetaDist * pres = NULL;	void ** data = NULL;	HTParentAnchor * anchor = NULL;	anchor = (HTParentAnchor *) HTArray_firstObject(array, data);	while (anchor) {	    HTCharset charset = HTAnchor_charset(anchor);	    if (charset) {		HTList * cur = cs;		/* If found then increase counter */		while ((pres = (MetaDist *) HTList_nextObject(cur))) {		    if (pres->name == charset) {			pres->hits++;			break;		    }		}		/* If not found then add new format to list */		if (!pres) {                    if ((pres = (MetaDist *) HT_CALLOC(1, sizeof(MetaDist))) == NULL)        	         HT_OUTOFMEM("charset_distribution");		    pres->name = charset;		    pres->hits = 1;		    HTList_addObject(cs, pres);		    HTList_insertionSort(cs, FormatSort);		}	    }	    /* Find next anchor in array */	    anchor = (HTParentAnchor *) HTArray_nextObject(array, data);	}	return cs;    }    return NULL;}PRIVATE int FormatSort (const void * a, const void * b){    MetaDist * aa = (MetaDist *) a;    MetaDist * bb = (MetaDist *) b;    return strcmp(HTAtom_name(bb->name), HTAtom_name(aa->name));}PRIVATE BOOL log_meta_distribution (const char * logfile, HTList * distribution){    if (logfile && distribution) {        HTLog * log = HTLog_open(logfile, YES, YES);	if (log) {	    HTList * cur = distribution;	    MetaDist * pres;	    while ((pres = (MetaDist *) HTList_nextObject(cur))) {		if (pres->name) {		    HTLog_addText(log, "%8d %s\n", pres->hits, HTAtom_name(pres->name));		}	    }	    HTLog_close(log);	}    }    return NO;}PRIVATE BOOL delete_meta_distribution (HTList * distribution){    if (distribution) {	HTList * cur = distribution;	MetaDist * pres;	while ((pres = (MetaDist *) HTList_nextObject(cur)))	    HT_FREE(pres);	HTList_delete(distribution);		return YES;	    }    return NO;}/*	Statistics**	----------**	Calculates a bunch of statistics for the anchors traversed*/PRIVATE BOOL calculate_statistics (Robot * mr){    long total_docs = mr->get_docs + mr->head_docs + mr->other_docs;    if (!mr) return NO;    /* Calculate efficiency */    if (mr->time > 0) {	ms_t t = HTGetTimeInMillis() - mr->time;	if (t > 0) {	    double loadfactor = (mr->get_bytes / (t * 0.001));	    double reqprsec = (total_docs / (t * 0.001));	    double secs = t / 1000.0;            char bytes[50];	    if (SHOW_REAL_QUIET(mr))		HTPrint("\nAccessed %ld documents in %.2f seconds (%.2f requests pr sec)\n",			total_docs, secs, reqprsec);            HTNumToStr(mr->get_bytes, bytes, 50);	    if (SHOW_REAL_QUIET(mr))		HTPrint("\tDid a GET on %ld document(s) and downloaded %s bytes of document bodies (%2.1f bytes/sec)\n",			mr->get_docs, bytes, loadfactor);            HTNumToStr(mr->head_bytes, bytes, 50);	    if (SHOW_REAL_QUIET(mr))		HTPrint("\tDid a HEAD on %ld document(s) with a total of %s bytes\n",			mr->head_docs, bytes);	}    }    /* Create an array of existing anchors */    if (total_docs > 1) {	HTArray * array = HTAnchor_getArray(total_docs);        if (array) {	    /* Distributions */	    if (mr->flags & MR_DISTRIBUTIONS) {		if (SHOW_REAL_QUIET(mr)) HTPrint("\nDistributions:\n");	    }            /* Sort after hit counts */            if (mr->hitfile) {		if (SHOW_REAL_QUIET(mr))		    HTPrint("\tLogged hit count distribution in file `%s\'\n",			    mr->hitfile);		calculate_hits(mr, array);	    }            /* Sort after link relations */#ifdef HT_MYSQL            if (mr->relfile || mr->sqllog) {#else            if (mr->relfile) {#endif		if (mr->relfile && SHOW_REAL_QUIET(mr))		    HTPrint("\tLogged link relationship distribution in file `%s\'\n",			    mr->relfile);		calculate_linkRelations(mr, array);	    }            /* Sort after modified date */            if (mr->lmfile) {		if (SHOW_REAL_QUIET(mr))		    HTPrint("\tLogged last modified distribution in file `%s\'\n",			    mr->lmfile);		calculate_lm(mr, array);	    }            /* Sort after title */            if (mr->titlefile) {		if (SHOW_REAL_QUIET(mr))		    HTPrint("\tLogged title distribution in file `%s\'\n",			    mr->titlefile);		calculate_title(mr, array);	    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青椒成人免费视频| 奇米777欧美一区二区| 色综合天天综合网天天狠天天 | 狠狠网亚洲精品| 精品国产一区二区三区久久久蜜月 | 国产精品色眯眯| 波多野结衣中文字幕一区二区三区| 国产精品网站在线观看| 亚洲精品你懂的| 久88久久88久久久| 国产欧美一区二区三区在线看蜜臀| 成人深夜在线观看| 亚洲美女在线国产| 69久久夜色精品国产69蝌蚪网| 在线一区二区三区四区| 中文字幕精品一区二区三区精品| bt7086福利一区国产| 一区二区免费视频| 91精品久久久久久蜜臀| 韩国av一区二区| 国产精品午夜在线观看| 在线精品视频免费播放| 日本欧美一区二区三区乱码| 色综合久久中文综合久久97| 夜夜爽夜夜爽精品视频| 欧美一区二区三区男人的天堂| 国产精品综合一区二区| 亚洲伦理在线精品| 制服丝袜亚洲播放| 国产成人精品一区二区三区四区 | 在线视频你懂得一区二区三区| 亚洲午夜一区二区| 精品伦理精品一区| 97se亚洲国产综合自在线观| 亚洲第一精品在线| 久久久欧美精品sm网站| 色噜噜狠狠色综合中国| 奇米一区二区三区| 中文字幕第一区第二区| 欧美日韩一区二区电影| 国产一区二区不卡| 一区二区在线观看免费| 欧美tickling网站挠脚心| 91在线视频18| 日av在线不卡| 国产精品超碰97尤物18| 国产精品午夜在线| 欧洲一区二区三区在线| 国产一区二区三区国产| 亚洲一区二区中文在线| 国产亚洲成年网址在线观看| 欧美三区在线观看| 成人一区二区视频| 日本在线不卡一区| 亚洲天堂网中文字| 日韩欧美一卡二卡| 日本高清不卡视频| 国产精品乡下勾搭老头1| 亚洲成年人网站在线观看| 亚洲国产精品高清| 日韩一区二区三区三四区视频在线观看 | 天天色 色综合| 国产精品短视频| 日韩免费福利电影在线观看| 色综合久久久网| 国产一区二区三区免费看| 亚洲成人精品在线观看| 国产精品高潮久久久久无| 337p粉嫩大胆噜噜噜噜噜91av| 欧美性一级生活| 成人午夜在线播放| 久久9热精品视频| 亚洲午夜久久久久久久久久久| 国产女主播一区| 日韩欧美中文一区| 欧美午夜免费电影| 91在线播放网址| 国产98色在线|日韩| 久久99蜜桃精品| 日韩二区三区四区| 亚洲一区av在线| 国产精品黄色在线观看| 久久综合九色综合97婷婷女人 | 欧美精品一区视频| 欧美精品黑人性xxxx| 日本高清不卡视频| 91日韩在线专区| 成人高清免费观看| 国产黄人亚洲片| 精久久久久久久久久久| 日韩电影在线看| 午夜精品久久久久久久久久| 一区二区三区国产精华| 一区在线播放视频| 亚洲国产高清在线| 国产日韩一级二级三级| 久久亚区不卡日本| 精品国产免费人成在线观看| 日韩欧美成人午夜| 欧美一区二区三区视频| 欧美二区在线观看| 欧美女孩性生活视频| 欧美性猛交xxxx乱大交退制版| 色婷婷av一区二区三区软件| 99re这里只有精品视频首页| 99久久国产综合精品女不卡| 成人a区在线观看| 成人av资源站| 不卡电影一区二区三区| 99久久综合99久久综合网站| 99在线视频精品| av中文字幕亚洲| 99久久精品免费看国产| av资源网一区| 日本韩国精品在线| 国产精品久久久久三级| 6080国产精品一区二区| 91麻豆精品91久久久久同性| 91.麻豆视频| 日韩午夜精品电影| 精品sm捆绑视频| 久久精品在线观看| 亚洲国产精品成人综合色在线婷婷| 欧美激情一区二区三区在线| 中日韩免费视频中文字幕| 亚洲天堂2014| 夜夜夜精品看看| 日韩二区三区在线观看| 久久电影国产免费久久电影| 国产一区二区伦理片| 国产精品 欧美精品| 成人aa视频在线观看| 91老司机福利 在线| 欧美性猛片xxxx免费看久爱| 678五月天丁香亚洲综合网| 精品久久99ma| 国产日韩欧美综合一区| **性色生活片久久毛片| 亚洲一二三四区| 日韩黄色片在线观看| 久草精品在线观看| 成人app下载| 欧美日本国产视频| xnxx国产精品| 中文字幕一区二区三区不卡在线 | 日韩欧美亚洲国产另类| 久久久久久久综合| 亚洲日本在线a| 婷婷综合另类小说色区| 激情综合网激情| av在线播放成人| 欧美日韩精品一区视频| 午夜精品久久久久影视| 亚洲综合激情小说| 老司机精品视频导航| 丰满放荡岳乱妇91ww| 在线视频观看一区| 日韩免费看网站| 成人欧美一区二区三区小说 | 亚洲制服丝袜在线| 裸体健美xxxx欧美裸体表演| 国产成人免费视频精品含羞草妖精| 91免费版在线看| 欧美一区二区三区在线观看视频| 久久久精品天堂| 一区二区三区中文字幕精品精品| 美女网站色91| av一区二区三区| 欧美一区二区高清| 国产精品日韩精品欧美在线| 午夜精品福利一区二区三区av | 亚洲视频免费看| 人禽交欧美网站| 成人a级免费电影| 日韩欧美亚洲国产精品字幕久久久| 亚洲人成精品久久久久| 麻豆freexxxx性91精品| 91色九色蝌蚪| 久久亚洲精品国产精品紫薇| 亚洲观看高清完整版在线观看| 国产精品996| 欧美剧在线免费观看网站| 国产精品色眯眯| 久国产精品韩国三级视频| 91免费在线看| 久久色.com| 午夜精品久久久久久久| 成人夜色视频网站在线观看| 欧美一区二区三区四区久久| 日韩理论片网站| 韩国av一区二区三区在线观看| 欧美日韩国产在线观看| 亚洲成在线观看| 风间由美中文字幕在线看视频国产欧美 | 国产午夜亚洲精品理论片色戒| 亚洲va天堂va国产va久| 成人美女视频在线看| 欧美电影免费观看完整版| 亚洲午夜三级在线| av一区二区三区|