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

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

?? htutree.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/***	URL DATA TREE STRUCTURE****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTUTree.c,v 2.6 1999/02/22 22:10:12 frystyk Exp $**** AUTHORS:**	HFN	Henrik Frystyk Nielsen <frystyk@w3.org>****	An infobase is a tree structure where we can store all the information**	we know about a remote server. Typically, each remote server will**	have its own infobase which gets richer as we get to know more about**	the remote web site.****	This module maintains an URL information database**	which can contain information stored by filters. This can for**	example be used to store challenges received from remote server.**	A infobase has the advantage that it can be searched using URLs _or_**	using realms. The letter is most useful to "guess" information**	about a remote URL that we haven't seen before*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "HTUTree.h"					 /* Implemented here */#define TREE_TIMEOUT		43200L	     /* Default tree timeout is 12 h */struct _HTUTree {			  /* Server URL info base */    char *		name;    char *		host;    int			port;    HTList *		templates;	  /* List of templates for this tres */    HTList * 		realms;		     /* List of realms for this tree */    time_t		created;	     /* Creation time of this object */    HTUTree_gc * 	gc;			/* Contect garbage collector */};struct _HTURealm {			  		  /* Realm specifics */    char *		realm;    void *		context;    HTUTemplate *	tm_ptr;};struct _HTUTemplate {				 /* Hierarchical information */    char *		tmplate;    HTURealm *	       	rm_ptr;};PRIVATE HTList ** InfoTable = NULL;    		/* List of information bases */PRIVATE time_t UTreeTimeout = TREE_TIMEOUT;/* ------------------------------------------------------------------------- *//***	Create a new realm**	Returns new object or NULL if error*/PRIVATE HTURealm * HTUTree_newRealm (HTUTree * tree, const char * realm,				     void * context){    if (tree) {	HTURealm * me;	if ((me = (HTURealm *) HT_CALLOC(1, sizeof(HTURealm))) == NULL)	    HT_OUTOFMEM("HTURealm_new");	if (realm) StrAllocCopy(me->realm, realm);	me->context = context;	HTList_addObject(tree->realms, (void *) me);	return me;    }    return NULL;}/***	Delete a realm. We call the scheme gc callback to free the opaque**	context object.*/PRIVATE BOOL HTUTree_deleteRealm (HTUTree * tree, HTURealm * me){    if (tree && me) {	if (tree->gc && me->context) (*tree->gc)(me->context);	HTList_removeObject(tree->realms, (void *) me);	HT_FREE(me->realm);	HT_FREE(me);	return YES;    }    return NO;}/***	Find a realm*/PRIVATE HTURealm * HTUTree_findRealm (HTUTree * tree, const char * realm){    if (tree && tree->realms && realm) {	HTList * cur = tree->realms;	HTURealm * pres;	while ((pres = (HTURealm *) HTList_nextObject(cur))) {	    if (!strcmp(pres->realm, realm)) {		HTTRACE(CORE_TRACE, "URL Node.... Realm `%s\' found\n" _ realm);		return pres;	    }	}    }    return NULL;}/***	Create a new template and add to URL tree**	Returns new object or NULL if error*/PRIVATE HTUTemplate * HTUTree_newTemplate (HTUTree * tree,const char * tmplate){    if (tree && tmplate) {	HTUTemplate * me;	if ((me = (HTUTemplate *) HT_CALLOC(1, sizeof(HTUTemplate))) == NULL)	    HT_OUTOFMEM("HTUTemplate_new");	StrAllocCopy(me->tmplate, tmplate);	HTList_addObject(tree->templates, (void *) me);	return me;    }    return NULL;}/***	Delete a template*/PRIVATE BOOL HTUTree_deleteTemplate (HTUTree * tree, HTUTemplate * me){    if (tree && me) {	HTList_removeObject(tree->templates, (void *) me);	HT_FREE(me->tmplate);	HT_FREE(me);	return YES;    }    return NO;}/***	Find a template*/PRIVATE HTUTemplate * HTUTree_findTemplate (HTUTree * tree, const char * path){    if (tree && tree->templates && path) {	HTUTemplate * pres;	HTList * cur = tree->templates;	while ((pres = (HTUTemplate *) HTList_nextObject(cur))) {	    if (HTStrMatch(pres->tmplate, path)) {		HTTRACE(CORE_TRACE, "URL Node.... Found template `%s\' for for `%s\'\n" _ 			    pres->tmplate _ path);		return pres;	    }	}    }    return NULL;}/***	Search a URL Tree for a matching template or realm**	Return the opaque context object found or NULL if none**	Please regard this as a first simple attempt - it can be done**	much more efficient!*/PUBLIC void * HTUTree_findNode (HTUTree * tree,				const char * realm, const char * path){    HTURealm * rm = HTUTree_findRealm(tree, realm);    if (rm)	return rm->context;    else {	HTUTemplate * tm = HTUTree_findTemplate(tree, path);	if (tm) return tm->rm_ptr ? tm->rm_ptr->context : NULL;    }    HTTRACE(CORE_TRACE, "URL Node.... Not found\n");    return NULL;}/***	Add a new node (a template and a realm) to the tree*/PUBLIC BOOL HTUTree_addNode (HTUTree * tree,			     const char * realm, const char * path,			     void * context){    if (tree) {	if (realm && path) { 		       /* If both a path and a realm */	    HTUTemplate * new_template = HTUTree_newTemplate(tree, path);	    HTURealm * new_realm = HTUTree_newRealm(tree, realm, context);	    new_realm->tm_ptr = new_template;	    new_template->rm_ptr = new_realm;	    return YES;	} else if (realm) {				  /* If only a realm */	    HTUTree_newRealm(tree, realm, context);	    return YES;	}	HTTRACE(CORE_TRACE, "URL Node.... At least realm must be present\n");    }    return NO;}/***	Replace node (insert a new context at the same node)*/PUBLIC BOOL HTUTree_replaceNode (HTUTree * tree,				 const char * realm, const char * path,				 void * context){    HTURealm * rm = HTUTree_findRealm(tree, realm);    if (!rm) {	HTUTemplate * tm = HTUTree_findTemplate(tree, path);	if (tm) rm = tm->rm_ptr;    }    if (rm) {	if (tree->gc && rm->context) (*tree->gc)(rm->context);	rm->context = context;	return YES;    }    HTTRACE(CORE_TRACE, "URL Node.... Not found\n");    return NO;}/***	Remove a node (a template and a realm) from the tree*/PUBLIC BOOL HTUTree_deleteNode (HTUTree * tree,				const char * realm, const char * path){    if (tree) {	HTURealm * rm = HTUTree_findRealm(tree, realm);	HTUTemplate * tm = rm ? rm->tm_ptr : HTUTree_findTemplate(tree, path);	if (!rm) rm = tm ? tm->rm_ptr : NULL;	HTUTree_deleteRealm(tree, rm);	HTUTree_deleteTemplate(tree, tm);	return YES;    }    return NO; }PRIVATE BOOL delete_tree (HTUTree * tree){    if (tree) {	HTList * cur;	/* Free all templates */	if ((cur = tree->templates)) {	    HTUTemplate * pres;	    while ((pres = (HTUTemplate *) HTList_lastObject(cur)))		HTUTree_deleteTemplate(tree, pres);	    HTList_delete(tree->templates);	}	/* Free all nodes */	if ((cur = tree->realms)) {	    HTURealm * pres;	    while ((pres = (HTURealm *) HTList_lastObject(cur)))		HTUTree_deleteRealm(tree, pres);	    HTList_delete(tree->realms);	    	}	HT_FREE(tree->name);	HT_FREE(tree->host);	HT_FREE(tree);	return YES;    }    return NO;}/***	Find an existing URL Tree**	Returns tree or NULL if error*/PRIVATE HTUTree * find_tree (const char * 	name,			     const char *	host,			     int		port,			     HTList **		hashlist){    HTUTree * pres = NULL;    *hashlist = NULL;    if (!name || !host) {	HTTRACE(CORE_TRACE, "URL Tree.... Bad argument\n");	return NULL;    }    /* Find a hash for this host */    {	int hash;	const unsigned char * p;	for (p=host, hash=0; *p; p++) {	    hash = (hash * 3 + *p) % HT_L_HASH_SIZE;	}	if (!InfoTable) {	    if ((InfoTable = (HTList **) HT_CALLOC(HT_L_HASH_SIZE,						   sizeof(HTList *))) == NULL)	        HT_OUTOFMEM("HTUTree_find");	}	if (!InfoTable[hash])	    InfoTable[hash] = *hashlist = HTList_new();	else	    *hashlist = InfoTable[hash];    }    /* Search the existing list to see if we already have this entry */    {	HTList * cur = *hashlist;	while ((pres = (HTUTree *) HTList_nextObject(cur))) {	    if (!strcmp(pres->name, name) && !strcmp(pres->host, host) &&		pres->port==port) {		if (time(NULL) > pres->created + UTreeTimeout) {		    HTTRACE(CORE_TRACE, "URL Tree.... Collecting URL Tree %p\n" _ pres);		    HTList_removeObject(*hashlist, pres);		    delete_tree(pres);		    pres = NULL;		}		return pres;	    }	}    }    return NULL;}/***	Create a new URL Tree (or return an aready existing one)**	Returns new object (or the one found) or NULL if error*/PUBLIC HTUTree * HTUTree_new (const char * 		name,			      const char * 		host,			      int 			port,			      HTUTree_gc *	 	gc){    if (name && host) {	HTList * hashlist = NULL;	HTUTree * pres = find_tree(name, host, port, &hashlist);	/* If not found (or gc'ed) then create a new URL tree */	if (!pres) {	    if ((pres = (HTUTree *) HT_CALLOC(1, sizeof(HTUTree))) == NULL)		HT_OUTOFMEM("HTUTree_new");	    StrAllocCopy(pres->name, name);	    StrAllocCopy(pres->host, host);	    pres->port = (port > 0 ? port : 80);	    pres->templates = HTList_new();	    pres->realms = HTList_new();	    pres->created = time(NULL);	    pres->gc = gc;	    /* Add the new URL tree to the hash table */	    HTList_addObject(hashlist, (void *) pres);	    HTTRACE(CORE_TRACE, "URL Tree.... Created %p with name `%s\'\n" _ 				   pres _ pres->name);	} else {	    HTTRACE(CORE_TRACE, "URL Tree.... Found %p with name `%s\'\n" _ 				    pres _ pres->name);	}	return pres;    } else {	HTTRACE(CORE_TRACE, "URL Tree.... Bad argument\n");	return NULL;    }}/***	Find a URL tree*/PUBLIC HTUTree * HTUTree_find (const char *	name,			       const char * 	host,			       int		port){    if (name && host) {	HTList * hashlist = NULL;	HTUTree * pres = find_tree(name, host, port, &hashlist);	HTTRACE(CORE_TRACE, "URL Tree.... did %sfind `%s\'\n" _ 				pres ? "" : "NOT " _ name);	return pres;    } else {	HTTRACE(CORE_TRACE, "URL Tree.... Bad augument\n");    }    return NULL;}/***	Delete a complete server tree and everything within it.*/PUBLIC BOOL HTUTree_delete (const char * 	name,			    const char * 	host,			    int			port){    if (name && host) {	HTList * hashlist = NULL;	HTUTree * pres = find_tree(name, host, port, &hashlist);	if (pres) {	    HTList_removeObject(hashlist, pres);	    delete_tree(pres);	    HTTRACE(CORE_TRACE, "URL Tree.... deleted %p\n" _ pres);	    return YES;	}    }    return NO;}/***	Delete all URL Trees*/PUBLIC BOOL HTUTree_deleteAll (void){    if (InfoTable) {	int cnt;	HTList * cur;	for (cnt=0; cnt<HT_L_HASH_SIZE; cnt++) {	    if ((cur = InfoTable[cnt])) { 		HTUTree * pres;		while ((pres = (HTUTree *) HTList_nextObject(cur)))		    delete_tree(pres);	    }	    HTList_delete(InfoTable[cnt]);	}	HT_FREE(InfoTable);	return YES;    }    return NO;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美aⅴ...| 国产a区久久久| proumb性欧美在线观看| 7777精品久久久大香线蕉| 粉嫩嫩av羞羞动漫久久久 | 亚洲成人动漫在线观看| 久久www免费人成看片高清| 国产亚洲精品久| 91精品免费在线观看| 婷婷综合久久一区二区三区| 日韩精品久久久久久| 国产不卡一区视频| 亚洲欧洲精品天堂一级| 色婷婷久久久亚洲一区二区三区 | 久久久亚洲精华液精华液精华液| 精品欧美一区二区久久| 国产精品久久一卡二卡| 奇米888四色在线精品| 国产成人免费在线视频| 欧美一区二区免费视频| 亚洲国产va精品久久久不卡综合| 日本福利一区二区| 久久久精品天堂| 一区二区中文字幕在线| 麻豆精品国产传媒mv男同| 欧美亚洲国产一区二区三区| 欧美精选一区二区| 欧美大尺度电影在线| 久久丝袜美腿综合| 久久精品av麻豆的观看方式| 欧美电视剧在线看免费| 91麻豆国产香蕉久久精品| 激情综合色播五月| 亚洲高清视频中文字幕| 欧美国产一区在线| www亚洲一区| 7777精品伊人久久久大香线蕉的| 蜜桃一区二区三区四区| 国产精品久久久久精k8| 精品国产乱码91久久久久久网站| 欧美影院一区二区| 91久久精品一区二区二区| 成人午夜激情影院| 国产精品一区三区| 极品尤物av久久免费看| 国产精品免费视频网站| 欧美日韩中文另类| 久草精品在线观看| 亚洲v中文字幕| 亚洲国产精华液网站w| 2欧美一区二区三区在线观看视频| 日韩中文字幕不卡| 91麻豆文化传媒在线观看| 国产精品免费视频一区| 欧美一区二区三区爱爱| 日av在线不卡| 在线不卡一区二区| 国产一区二区三区香蕉 | 亚洲永久免费视频| 国产精品网站一区| 久久久国产一区二区三区四区小说 | 激情亚洲综合在线| 蜜臀av一区二区在线免费观看 | 91蝌蚪porny九色| 不卡免费追剧大全电视剧网站| 在线免费亚洲电影| 国产成人av福利| 粉嫩av一区二区三区在线播放 | 在线不卡一区二区| 日韩欧美不卡在线观看视频| 欧日韩精品视频| 五月婷婷综合网| 国产欧美一区二区在线| 欧美一区二区在线免费播放| 成人视屏免费看| 久久99精品久久只有精品| 日韩毛片在线免费观看| 亚洲欧美日韩国产另类专区| 91精品国产91久久综合桃花| 成人av电影免费在线播放| 亚洲午夜影视影院在线观看| 国产精品久久久久久一区二区三区| 欧美刺激午夜性久久久久久久| 93久久精品日日躁夜夜躁欧美| 日韩电影网1区2区| 色婷婷久久久亚洲一区二区三区| 成人性生交大片免费看中文 | 久久午夜老司机| 中文字幕在线观看一区| 亚洲欧美日本韩国| 亚洲高清免费观看高清完整版在线观看 | 国产高清不卡一区二区| 成人在线综合网| 欧美性欧美巨大黑白大战| 9191久久久久久久久久久| 精品成人免费观看| 中文字幕不卡的av| 亚洲一二三级电影| 久久国产精品一区二区| 91一区一区三区| 日韩一级视频免费观看在线| 久久人人爽人人爽| 亚洲线精品一区二区三区| 国产乱码字幕精品高清av | 日韩一级黄色大片| 国产精品狼人久久影院观看方式| 曰韩精品一区二区| 激情综合色播五月| 欧美日韩精品二区第二页| 国产三级精品视频| 视频一区二区三区在线| 99久久国产综合色|国产精品| 欧美日本韩国一区二区三区视频| 国产情人综合久久777777| 性做久久久久久久免费看| 99精品黄色片免费大全| 久久综合色婷婷| 蜜臂av日日欢夜夜爽一区| 在线观看亚洲a| 亚洲人精品午夜| 国产成人精品免费一区二区| 日韩视频一区二区| 日韩精品91亚洲二区在线观看| 色综合视频一区二区三区高清| 国产精品少妇自拍| 国产一区中文字幕| 精品精品欲导航| 麻豆一区二区三| 日韩一区二区三区视频| 亚洲一区二区在线免费观看视频| zzijzzij亚洲日本少妇熟睡| 国产日韩精品久久久| 国产乱码精品一区二区三 | 久草热8精品视频在线观看| 欧美精品久久天天躁| 日本欧美一区二区| 日韩手机在线导航| 国产成人精品一区二区三区网站观看| 欧美一区二区三区免费观看视频| 天天亚洲美女在线视频| 欧美日韩在线三级| 久久久久久99久久久精品网站| 黄色日韩网站视频| 国产精品婷婷午夜在线观看| 国产精品一卡二卡在线观看| 国产欧美日韩精品在线| 成人免费视频app| 洋洋av久久久久久久一区| 欧美理论片在线| 狠狠色丁香婷婷综合| 亚洲视频一区二区在线观看| 91成人免费在线| 免费人成在线不卡| 国产精品少妇自拍| 91麻豆精品国产91久久久使用方法 | 国产乱对白刺激视频不卡| 色综合久久99| 亚洲午夜免费电影| 成人免费毛片app| 中文字幕一区二区三区在线不卡| 国产精品一区免费在线观看| 亚洲日本一区二区三区| 欧美高清你懂得| 成人高清视频在线| 丝袜亚洲另类欧美| 中文字幕一区日韩精品欧美| 欧美精品久久99| 色婷婷国产精品| 国产一区二区三区久久久| 夜夜爽夜夜爽精品视频| 久久综合久久99| 欧美一区二区美女| 欧洲色大大久久| av成人免费在线观看| 久久精品国产精品亚洲综合| 一区二区三区四区乱视频| 国产片一区二区| 国产丝袜美腿一区二区三区| 欧美丰满一区二区免费视频| 91浏览器打开| 91麻豆123| 91在线免费播放| 99精品视频一区二区三区| 国产精品综合视频| 精品一区二区三区久久| 蜜臀91精品一区二区三区| 午夜久久久影院| 天天亚洲美女在线视频| 亚洲第一精品在线| 天天操天天色综合| 亚洲成人av电影在线| 亚洲一区在线看| 亚洲图片欧美综合| 日本亚洲最大的色成网站www| 午夜久久电影网| 日韩国产一二三区| 韩国毛片一区二区三区| 国产伦精品一区二区三区免费 | 91亚洲精品久久久蜜桃| 91一区二区在线观看|