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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? htcache.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 5 頁
字號:
		HTChunk_clear(me->buffer);		continue;	    }	} else if (*b == CR) {	    me->EOLstate = EOL_FCR;	} else if (*b == LF) {	    me->EOLstate = EOL_FLF;			       /* Line found */	} else	    HTChunk_putc(me->buffer, *b);	l--; b++;    }    return HT_OK;}PRIVATE int HTCacheIndex_put_character (HTStream * me, char c){    return HTCacheIndex_put_block(me, &c, 1);}PRIVATE int HTCacheIndex_put_string (HTStream * me, const char * s){    return HTCacheIndex_put_block(me, s, (int) strlen(s));}PRIVATE int HTCacheIndex_flush (HTStream * me){    if (me) {	char * flush = HTChunk_data(me->buffer);	if (flush) HTCacheIndex_parseLine(flush);	HTChunk_clear(me->buffer);    }    return HT_OK;}PRIVATE int HTCacheIndex_free (HTStream * me){    if (me) {	int status = HTCacheIndex_flush(me);	HTTRACE(APP_TRACE, "Cache Index. FREEING....\n");	HTChunk_delete(me->buffer);	HT_FREE(me);	return status;    }    return HT_ERROR;}PRIVATE int HTCacheIndex_abort (HTStream * me, HTList * e){    if (me) {	int status = HT_ERROR;	HTTRACE(APP_TRACE, "Cache Index. ABORTING...\n");	HTChunk_delete(me->buffer);	HT_FREE(me);	return status;    }    return HT_ERROR;}/*	Structured Object Class**	-----------------------*/PRIVATE const HTStreamClass HTCacheIndexClass ={		    "CacheIndexParser",    HTCacheIndex_flush,    HTCacheIndex_free,    HTCacheIndex_abort,    HTCacheIndex_put_character,    HTCacheIndex_put_string,    HTCacheIndex_put_block};PRIVATE HTStream * HTCacheIndexReader (HTRequest *	request){    HTStream * me;    if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL)	HT_OUTOFMEM("HTCacheIndexs");    me->isa = &HTCacheIndexClass;    me->request = request;    me->buffer = HTChunk_new(512);    me->EOLstate = EOL_BEGIN;    return me;}/***	Read the saved set of cached entries from disk. we only allow the index**	ro be read when there is no entries in memory. That way we can ensure**	consistancy.*/PUBLIC BOOL HTCacheIndex_read (const char * cache_root){    BOOL status = NO;    if (cache_root && CacheTable == NULL) {	BOOL wasInteractive;	char * file = cache_index_name(cache_root);	char * index = HTLocalToWWW(file, "cache:");	HTAnchor * anchor = HTAnchor_findAddress(index);		HTRequest * request = HTRequest_new();	HTRequest_setPreemptive(request, YES);	HTRequest_setOutputFormat(request, WWW_SOURCE);	/* Make sure we don't use any filters */	HTRequest_addBefore(request, NULL, NULL, NULL, 0, YES);	HTRequest_addAfter(request, NULL, NULL, NULL, HT_ALL, 0, YES);	/* Set the output */    	HTRequest_setOutputStream(request, HTCacheIndexReader(request));	HTRequest_setAnchor(request, anchor);	HTAnchor_setFormat((HTParentAnchor *) anchor, HTAtom_for("www/cache-index"));	wasInteractive = HTAlert_interactive();	HTAlert_setInteractive(NO);	status = HTLoad(request, NO);	HTAlert_setInteractive(wasInteractive);	HTRequest_delete(request);	HT_FREE(file);	HT_FREE(index);    }    return status;}/* ------------------------------------------------------------------------- *//*  			      CACHE PARAMETERS				     *//* ------------------------------------------------------------------------- */PRIVATE BOOL create_cache_root (const char * cache_root){    struct stat stat_info;    char * loc = NULL;    char * cur = NULL;    BOOL create = NO;    if (!cache_root) return NO;    StrAllocCopy(loc, cache_root);			 /* Get our own copy */#ifdef WWW_MSWINDOWS    cur = *(loc+1) == ':' ? loc+3 : loc+1;#else    cur = loc+1;#endif    while ((cur = strchr(cur, DIR_SEPARATOR_CHAR))) {	*cur = '\0';	if (create || HT_STAT(loc, &stat_info) == -1) {	    create = YES;		   /* To avoid doing stat()s in vain */	    HTTRACE(CACHE_TRACE, "Cache....... Creating dir `%s\'\n" _ loc);	    if (MKDIR(loc, 0777) < 0) {		HTTRACE(CACHE_TRACE, "Cache....... can't create\n");		HT_FREE(loc);		return NO;	    }	} else {	    HTTRACE(CACHE_TRACE, "Cache....... dir `%s\' already exists\n" _ loc);	}	*cur++ = DIR_SEPARATOR_CHAR;    }    HT_FREE(loc);    return YES;}/***	If `cache_root' is NULL then the current value (might be a define)**	Should we check if the cache_root is actually OK? I think not!*/PRIVATE BOOL HTCacheMode_setRoot (const char * cache_root){    if (cache_root) {        if ((HTCacheRoot = HTWWWToLocal(cache_root, "file:", NULL)) == NULL)            return NO;        if (*(HTCacheRoot+strlen(HTCacheRoot)-1) != DIR_SEPARATOR_CHAR)	    StrAllocCat(HTCacheRoot, DIR_SEPARATOR_STR);    } else {	/*	**  If no cache root has been indicated then look for a suitable	**  location.	*/	char * addr = NULL;	char * cr = (char *) getenv("WWW_CACHE");	if (!cr) cr = (char *) getenv("TMP");	if (!cr) cr = (char *) getenv("TEMP");	if (!cr) cr = HT_CACHE_LOC;	addr = HTLocalToWWW(cr, NULL);	if (*(addr+strlen(addr)-1) != DIR_SEPARATOR_CHAR)	    StrAllocCat(addr, DIR_SEPARATOR_STR);	StrAllocCat(addr, HT_CACHE_ROOT);	if (*(addr+strlen(addr)-1) != DIR_SEPARATOR_CHAR)	    StrAllocCat(addr, DIR_SEPARATOR_STR);        if ((HTCacheRoot = HTWWWToLocal(addr, "file:", NULL)) == NULL) {            HT_FREE(addr);            return NO;        }        HT_FREE(addr);    }    if (create_cache_root(HTCacheRoot) == NO) return NO;    HTTRACE(CACHE_TRACE, "Cache Root.. Local root set to `%s\'\n" _ HTCacheRoot);    return YES;}/***	Return the value of the cache root. The cache root can only be**	set through the HTCacheInit() function*/PUBLIC char * HTCacheMode_getRoot (void){    return HTLocalToWWW(HTCacheRoot, NULL);}/***	As this is a single user cache, we have to lock it when in use.*/PRIVATE FILE *locked_open_file = {NULL};PRIVATE BOOL HTCache_getSingleUserLock (const char * root){    if (root && !locked_open_file) {	FILE * fp;	char * location = NULL;	if ((location = (char *)	     HT_MALLOC(strlen(root) + strlen(HT_CACHE_LOCK) + 1)) == NULL)	    HT_OUTOFMEM("HTCache_getLock");	strcpy(location, root);	strcat(location, HT_CACHE_LOCK);	if ((fp = fopen(location, "r")) != NULL) {	    HTAlertCallback *cbf = HTAlert_find(HT_A_CONFIRM);	    HTTRACE(CACHE_TRACE, "Cache....... In `%s\' is already in use\n" _ root);	    fclose(fp);            if (cbf) {                BOOL result = (*cbf)(NULL, HT_A_CONFIRM,                                     HT_MSG_CACHE_LOCK,NULL,location,NULL);                if (result == YES) {                    REMOVE(location);                } else {                    HT_FREE(location);                    return NO;                }            } else {                HT_FREE(location);                return NO;                }	}	if ((fp = fopen(location, "w")) == NULL) {	    HTTRACE(CACHE_TRACE, "Cache....... Can't open `%s\' for writing\n" _ location);	    HT_FREE(location);	    return NO;	}	locked_open_file = fp;	HT_FREE(location);	return YES;    }    return NO;}/***	Release the single user lock*/PRIVATE BOOL HTCache_deleteSingleUserLock (const char * root){    if (root) {	char * location = NULL;	if ((location = (char *)	     HT_MALLOC(strlen(root) + strlen(HT_CACHE_LOCK) + 1)) == NULL)	    HT_OUTOFMEM("HTCache_deleteLock");	strcpy(location, root);	strcat(location, HT_CACHE_LOCK);	/* under UNIX you can remove an open file, not so under NT */	if (locked_open_file) {		fclose(locked_open_file);	    locked_open_file = NULL;	}	REMOVE(location);	HT_FREE(location);	return YES;    }    return NO;}/***	If `cache_root' is NULL then reuse old value or use HT_CACHE_ROOT.**	An empty string will make '/' as cache root**	We can only enable the cache if the HTSecure flag is not set. This**	is for example the case if using an application as a telnet shell.*/PUBLIC BOOL HTCacheInit (const char * cache_root, int size){    if (!HTLib_secure() && !HTCacheRoot) {	/*	**  Find an appropriate root for the cache	*/	if (HTCacheMode_setRoot(cache_root) != YES) return NO;	/*	**  Set the max size of the cache 	*/	HTCacheMode_setMaxSize(size);	/*	**  Set a lock on the cache so that multiple users	**  don't step on each other.	*/	if (HTCache_getSingleUserLock(HTCacheRoot) == NO)	    return NO;	/*	**  Look for the cache index and read the contents	*/	HTCacheIndex_read(HTCacheRoot);	/*	**  Register the cache before and after filters	*/	HTNet_addBefore(HTCacheFilter, "http://*", NULL, HT_FILTER_MIDDLE);	HTNet_addAfter(HTCacheUpdateFilter, "http://*", NULL,		       HT_NOT_MODIFIED, HT_FILTER_MIDDLE);		/*	**  Register the cache AFTER filter for checking whether        **  we should invalidate the cached entry	*/	HTNet_addAfter(HTCacheCheckFilter, "http://*",	NULL, HT_ALL,		       HT_FILTER_MIDDLE);	/*	**  Do caching from now on	*/	HTCacheEnable = YES;	HTCacheInitialized = YES;	return YES;    }    return NO;}/***	Turns off the cache and updates entries on disk.*/PUBLIC BOOL HTCacheTerminate (void){    if (HTCacheInitialized) {	/*	**  Write the index to file	*/	HTCacheIndex_write(HTCacheRoot);	/*	**  Unregister the cache before and after filters	*/	HTNet_deleteBefore(HTCacheFilter);	HTNet_deleteAfter(HTCacheUpdateFilter);	HTNet_deleteAfter(HTCacheCheckFilter);	/*	**  Remove the global cache lock.	*/	HTCache_deleteSingleUserLock(HTCacheRoot);	/*	**  Cleanup memory by deleting all HTCache objects	*/	HTCache_deleteAll();	/*	**  Don't do anymore caching from now on	*/	HT_FREE(HTCacheRoot);	HTCacheEnable = NO;	return YES;    }    return NO;}/***	The cache can be temporarily suspended by using the enable/disable**	flag. This does not prevent the cache from being enabled/disable at**	a later point in time.*/PUBLIC void HTCacheMode_setEnabled (BOOL mode){    HTCacheEnable = mode;}PUBLIC BOOL HTCacheMode_enabled (void){    return HTCacheEnable;}PUBLIC void HTCacheMode_setProtected (BOOL mode){    HTCacheProtected = mode;}PUBLIC BOOL HTCacheMode_protected (void){    return HTCacheProtected;}/***  We can set the cache to operate in disconnected mode in which we only**  return (valid) responses from the cache. Disconnected mode does not**  automatically deliver stale documents as this must be declared **  explicitly. */PUBLIC void HTCacheMode_setDisconnected (HTDisconnectedMode mode){    DisconnectedMode = mode;}PUBLIC HTDisconnectedMode HTCacheMode_disconnected (void){    return DisconnectedMode;}PUBLIC BOOL HTCacheMode_isDisconnected (HTReload mode){    return (DisconnectedMode != HT_DISCONNECT_NONE);}/***  Set the mode for how we handle Expires header from the local history**  list. The following modes are available:****	HT_EXPIRES_IGNORE : No update in the history list**	HT_EXPIRES_NOTIFY : The user is notified but no reload**	HT_EXPIRES_AUTO   : Automatic reload*/PUBLIC void HTCacheMode_setExpires (HTExpiresMode mode){    HTExpMode = mode;}PUBLIC HTExpiresMode HTCacheMode_expires (void){    return HTExpMode;}/***  Cache size management. We set the default cache size to 20M.**  We set the minimum size to 5M in order not to get into weird**  problems while writing the cache. The size is indicated in Mega**  bytes*/PUBLIC BOOL HTCacheMode_setMaxSize (int size){    long new_size = size < HT_MIN_CACHE_TOTAL_SIZE ?	HT_MIN_CACHE_TOTAL_SIZE*MEGA : size*MEGA;    long old_size = HTCacheTotalSize;    HTCacheTotalSize = new_size;    HTCacheFolderSize = HTCacheTotalSize/HT_CACHE_FOLDER_PCT;    HTCacheGCBuffer = HTCacheTotalSize/HT_CACHE_GC_PCT;    if (new_size < old_size) HTCacheGarbage();    HTTRACE(CACHE_TRACE, "Cache....... Total cache size: %ld with %ld bytes for metainformation and folders and at least %ld bytes free after every gc\n" _ 		HTCacheTotalSize _ HTCacheFolderSize _ HTCacheGCBuffer);    return YES;}PUBLIC int HTCacheMode_maxSize (void){    return HTCacheTotalSize / MEGA;}/***  How big can a single cached entry be in Mbytes. The default is 3M**  */PUBLIC BOOL HTCacheMode_setMaxCacheEntrySize (int size){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清免费一级二级三级| 国产精品一区二区黑丝| 国产精品美日韩| 日韩欧美电影一二三| 日本韩国欧美国产| 国产综合久久久久影院| 日产国产欧美视频一区精品| 玉米视频成人免费看| 中文字幕精品在线不卡| 2024国产精品| 日韩精品中文字幕一区二区三区| 欧美军同video69gay| 色94色欧美sute亚洲线路一久| 不卡的av在线| 丰满少妇在线播放bd日韩电影| 久久香蕉国产线看观看99| 欧美欧美午夜aⅴ在线观看| 91久久免费观看| 日本高清成人免费播放| 一本一道久久a久久精品 | 中文字幕中文字幕一区| 26uuu欧美| 久久嫩草精品久久久久| 久久久久国色av免费看影院| 日韩精品最新网址| 日韩精品一区二区三区视频播放 | 欧美日韩日日骚| 欧美午夜在线一二页| 欧美日韩中文一区| 欧美日韩中字一区| 欧美亚洲一区二区在线观看| 欧美中文字幕一区二区三区 | 日本不卡视频在线观看| 日本aⅴ亚洲精品中文乱码| 日韩国产一区二| 国内一区二区视频| 高清国产一区二区| 色婷婷久久久综合中文字幕| 色婷婷综合久久久中文一区二区| 在线观看av一区| 欧美一级国产精品| 久久久综合九色合综国产精品| 中文字幕第一页久久| 国产精品久久久久久妇女6080| 亚洲欧洲成人av每日更新| 亚洲综合成人在线视频| 日本美女一区二区三区| 蜜臀久久久99精品久久久久久| 精品在线你懂的| 成人av网址在线| 欧美最新大片在线看| 欧美日韩在线电影| 精品成人一区二区三区| 中文字幕一区在线观看| 无码av免费一区二区三区试看 | 日本一区二区三区高清不卡| 国产精品久久毛片av大全日韩| 亚洲乱码国产乱码精品精可以看 | 欧美日韩一区高清| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美一级欧美三级| 国产拍揄自揄精品视频麻豆| 亚洲影院免费观看| 久久 天天综合| 一本一本大道香蕉久在线精品 | 亚洲免费资源在线播放| 全国精品久久少妇| 9色porny自拍视频一区二区| 欧美一区二区免费视频| 欧美极品美女视频| 偷拍亚洲欧洲综合| 韩国一区二区视频| 欧洲在线/亚洲| 欧美韩国日本一区| 免费av网站大全久久| 成人av在线资源网| 欧美岛国在线观看| 色综合一个色综合亚洲| 制服丝袜国产精品| 亚洲精品视频一区| 国产91丝袜在线播放九色| 日韩午夜小视频| 亚洲国产中文字幕在线视频综合 | 丁香啪啪综合成人亚洲小说| 欧美成人综合网站| 男女男精品网站| 5858s免费视频成人| 一区二区三区高清| 91麻豆免费看片| 1000部国产精品成人观看| 国产69精品久久久久777| 精品成人一区二区三区| 久久精品国产久精国产| 9191成人精品久久| 日韩成人一区二区三区在线观看| 欧美少妇一区二区| 亚洲午夜影视影院在线观看| 色婷婷久久久亚洲一区二区三区| 自拍偷拍亚洲综合| 91免费看片在线观看| 亚洲男同性恋视频| 欧美亚日韩国产aⅴ精品中极品| 亚洲你懂的在线视频| 91国产视频在线观看| 亚洲欧美日韩电影| 欧美伊人精品成人久久综合97 | 色美美综合视频| 亚洲视频免费观看| 91毛片在线观看| 亚洲国产日韩a在线播放性色| 欧美午夜电影在线播放| 天堂av在线一区| 日韩欧美综合一区| 国产精品资源网| 国产精品天美传媒沈樵| 成人av影院在线| 伊人开心综合网| 欧美三级电影网站| 日韩电影免费在线看| 欧美v日韩v国产v| 国产一区二区视频在线播放| 欧美激情一区二区三区不卡 | kk眼镜猥琐国模调教系列一区二区| 国产午夜亚洲精品午夜鲁丝片| 国产高清不卡一区| 国产精品久久久久久久久图文区| 91老司机福利 在线| 婷婷开心激情综合| 精品国产一区二区国模嫣然| 国产91精品一区二区麻豆亚洲| 中文字幕在线一区| 欧美三级日韩在线| 激情欧美一区二区| 中文字幕一区在线观看视频| 欧美综合久久久| 久久精品国产999大香线蕉| 久久九九全国免费| 在线欧美小视频| 日本亚洲最大的色成网站www| 26uuu亚洲| 在线视频国产一区| 久久99精品久久久| 亚洲啪啪综合av一区二区三区| 欧美日韩久久不卡| 极品美女销魂一区二区三区| 亚洲欧洲色图综合| 欧美一区二区三区在线| 成人h精品动漫一区二区三区| 亚洲国产精品自拍| 国产欧美一区二区三区在线看蜜臀 | 欧美国产精品一区二区| 欧美吞精做爰啪啪高潮| 国产精品影视在线| 亚洲综合小说图片| 国产日韩高清在线| 欧美日韩一区二区三区在线看| 国产在线看一区| 亚洲成在线观看| 久久久精品国产免费观看同学| 91国偷自产一区二区三区观看 | 高清国产一区二区| 午夜精品久久久久久久久久| 国产性色一区二区| 这里只有精品视频在线观看| 成人午夜精品一区二区三区| 日本va欧美va瓶| 亚洲乱码日产精品bd| 国产日韩亚洲欧美综合| 欧美三级日本三级少妇99| 成a人片国产精品| 日韩成人一区二区三区在线观看| 亚洲人精品一区| 久久九九国产精品| 日韩美女主播在线视频一区二区三区| 91免费观看在线| 国产不卡视频在线观看| 午夜精品一区二区三区三上悠亚| 国产精品麻豆久久久| 2020国产精品自拍| 91精品国产品国语在线不卡| 色国产精品一区在线观看| 成人免费看的视频| 国产伦精一区二区三区| 蜜桃av一区二区| 亚洲 欧美综合在线网络| 亚洲视频综合在线| 国产精品久久久久影院| 久久亚洲一区二区三区四区| 91精品国产综合久久久久久漫画| 91九色02白丝porn| 99热这里都是精品| 本田岬高潮一区二区三区| 国产成人精品亚洲日本在线桃色 | 欧美电影免费观看高清完整版| 欧美三区在线观看| 欧美最猛黑人xxxxx猛交| 色婷婷精品久久二区二区蜜臀av| 99久久综合精品| 99视频一区二区三区| 成人av集中营|