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

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

?? htpep.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/***	PEP ENGINE****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTPEP.c,v 2.7 1999/02/22 22:10:11 frystyk Exp $****** AUTHORS:**	HFN	Henrik Frystyk**** HISTORY:**	July 96	HFN	Written first version*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTPEP.h"					 /* Implemented here */#define PEP_NAME		"w3c-pep"	     /* Name of the PEP tree */#define DEFAULT_PORT		80		      /* Concentrate on HTTP */struct _HTPEPModule {    char *		name;    HTNetBefore *	before;    HTNetAfter *	after;    HTUTree_gc *	gc;};typedef struct _HTPEPElement {    char * 		name;    void * 		context;} HTPEPElement;PRIVATE HTList ** HTModules;		   /* List of registered PEP modules *//* ------------------------------------------------------------------------- *//*				PEP MODULE MANAGEMENT			     *//* ------------------------------------------------------------------------- */PRIVATE BOOL delete_module (HTPEPModule * module){    if (module) {	HT_FREE(module->name);	HT_FREE(module);	return YES;    }    return NO;}/***	Case sensitive search for module*/PRIVATE HTPEPModule * find_module (const char * name, HTList ** hashlist){    HTPEPModule * pres = NULL;    *hashlist = NULL;    if (!name) {	HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n");	return NULL;    }    /* Find a hash for this PEP module */    {	int hash;	const unsigned char * p;	for (p=name, hash=0; *p; p++) {	    hash = (hash * 3 + *p) % HT_M_HASH_SIZE;	}	if (!HTModules) {	    if ((HTModules = (HTList **) HT_CALLOC(HT_M_HASH_SIZE,						   sizeof(HTList *))) == NULL)	        HT_OUTOFMEM("find_module");	}	if (!HTModules[hash])	    HTModules[hash] = *hashlist = HTList_new();	else	    *hashlist = HTModules[hash];    }    /* Search the existing list to see if we already have this entry */    {	HTList * cur = *hashlist;	while ((pres = (HTPEPModule *) HTList_nextObject(cur))) {	    if (!strcmp(pres->name, name)) return pres;	}    }    return NULL;}PUBLIC HTPEPModule * HTPEP_newModule (const char *	name,				      HTNetBefore *	before,				      HTNetAfter *	after,				      HTUTree_gc *	gc){    if (name) {	HTList * hashlist = NULL;	HTPEPModule * pres = find_module(name, &hashlist);	/* If found then update entry - else create a new one */	if (!pres) {	    if (!(pres = (HTPEPModule *) HT_CALLOC(1, sizeof(HTPEPModule))))		HT_OUTOFMEM("HTPEP_newModule");	    StrAllocCopy(pres->name, name);	    pres->before = before;	    pres->after = after;	    pres->gc = gc;	    /* Add the new PEP Module to the hash table */	    HTList_addObject(hashlist, (void *) pres);	    HTTRACE(APP_TRACE, "PEP Engine.. Created module %p\n" _ pres);	} else {	    HTTRACE(APP_TRACE, "PEP Engine.. Found module %p\n" _ pres);	}	return pres;    } else {	HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n");	return NULL;    }}PUBLIC HTPEPModule * HTPEP_findModule (const char * name){    if (name) {	HTList * hashlist = NULL;	HTPEPModule * pres = find_module(name, &hashlist);	HTTRACE(APP_TRACE, "PEP Engine.. did %sfind %s\n" _ pres ? "" : "NOT " _ name);	return pres;    } else {	HTTRACE(APP_TRACE, "PEP Engine.. Bad augument\n");    }    return NULL;}PUBLIC BOOL HTPEP_deleteModule (const char * name){    if (name) {	HTList * hashlist = NULL;	HTPEPModule * pres = find_module(name, &hashlist);	if (pres) {	    HTList_removeObject(hashlist, pres);	    HTTRACE(APP_TRACE, "PEP Engine.. deleted %p\n" _ pres);	    delete_module(pres);	    return YES;	}    }    return NO;}PUBLIC BOOL HTPEP_deleteAllModules (void){    if (HTModules) {	int cnt;	HTList * cur;	for (cnt=0; cnt<HT_M_HASH_SIZE; cnt++) {	    if ((cur = HTModules[cnt])) { 		HTPEPModule * pres;		while ((pres = (HTPEPModule *) HTList_nextObject(cur)))		    delete_module(pres);	    }	    HTList_delete(HTModules[cnt]);	}	HT_FREE(HTModules);	return YES;    }    return NO;}/* ------------------------------------------------------------------------- *//*			    HANDLE THE PEP URL TREE			     *//* ------------------------------------------------------------------------- *//***	A PEP element is a particular PEP procotol associated with a**	particular point in the URL tree. The name is the name of the**	protocol known to be able to handle this context. This protocol**	must have been registered as a PEP module.*/PRIVATE HTPEPElement * HTPEP_newElement (const char * name, void * context){    if (name) {	HTPEPElement * me;	if ((me = (HTPEPElement *) HT_CALLOC(1, sizeof(HTPEPElement))) == NULL)	    HT_OUTOFMEM("HTPEPElement_new");	StrAllocCopy(me->name, name);	me->context = context;	HTTRACE(APP_TRACE, "PEP Engine.. Created element %p\n" _ me);	return me;    }    return NULL;}PRIVATE BOOL HTPEP_deleteElement (HTPEPElement * me){    if (me) {	HTTRACE(APP_TRACE, "PEP Engine.. Deleted element %p\n" _ me);	HT_FREE(me->name);	HT_FREE(me);	return YES;    }    return NO;}/***	A PEP list is a list of PEP elements and the "thing" we store in the**	PEP URL Tree*/PRIVATE HTList * HTPEP_newList (void){    HTList * me = HTList_new();    HTTRACE(APP_TRACE, "PEP Engine.. Created list %p\n" _ me);    return me;}PRIVATE int HTPEP_deleteList (void * context){    HTList * list = (HTList *) context;    if (list) {	HTPEPElement * pres;	while ((pres = (HTPEPElement *) HTList_nextObject(list)))	    HTPEP_deleteElement(pres);	HTTRACE(APP_TRACE, "PEP Engine.. Deleted list %p\n" _ list);	HTList_delete(list);	return YES;    }    return NO;}/***	Find a PEP List**	---------------**	Seaches the set PEP tree for a match. We do the following:****		1) Find the PEP tree for this host**		2) See if there is a realm match**		3) See if there is a template match for URL****	Return the node found else NULL which means that we don't have any**	authentication information to hook on to this request or response*/PRIVATE HTList * HTPEP_findList (const char * realm, const char * url){    HTUTree * tree;    if (!url) {	HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n");	return NULL;    }    HTTRACE(APP_TRACE, "PEP Engine.. Looking for info on `%s'\n" _ url);    /* Find a URLTree for this URL (if any) */    {	char * host = HTParse(url, "", PARSE_HOST);	char * colon = strchr(host, ':');	int port = DEFAULT_PORT;	if (colon ) {	    *(colon++) = '\0';			     /* Chop off port number */	    port = atoi(colon);	}		tree = HTUTree_find(PEP_NAME, host, port);	HT_FREE(host);	if (!tree) {	    HTTRACE(APP_TRACE, "PEP Engine.. No information\n");	    return NULL;	}    }    /* Find a matchind PEP element (if any)) */    {	char * path = HTParse(url, "", PARSE_PATH);	HTList * list = (HTList *) HTUTree_findNode(tree, realm, path);	HT_FREE(path);	return list;    }    return NULL;						 /* No match */}/*	Add a PEP element to the URL tree**	---------------------------------**	Add a protocol context to the PEP tree*/PUBLIC BOOL HTPEP_addNode (const char * protocol,			   const char * realm, const char * url,			   void * context){    HTUTree * tree = NULL;    HTPEPModule * module = NULL;    if (!protocol || !url) {	HTTRACE(APP_TRACE, "PEP Engine.. Bad argument\n");	return NO;    }    HTTRACE(APP_TRACE, "PEP Engine.. Adding info for `%s'\n" _ url);    /* Find the PEP module with this name */    if ((module = HTPEP_findModule(protocol)) == NULL) {	HTTRACE(APP_TRACE, "PEP Engine.. Module `%s\' not registered\n" _ 			       protocol ? protocol : "<null>");	return NO;    }    /* Find an existing PEP tree or create a new one */    {	char * host = HTParse(url, "", PARSE_HOST);	char * colon = strchr(host, ':');	int port = DEFAULT_PORT;	if (colon ) {	    *(colon++) = '\0';			     /* Chop off port number */	    port = atoi(colon);	}	tree = HTUTree_new(PEP_NAME, host, port, HTPEP_deleteList);	HT_FREE(host);	if (!tree) {	    HTTRACE(APP_TRACE, "PEP Engine.. Can't create tree\n");	    return NO;	}    }    /* Find a matching PEP element or create a new one */    {	char * path = HTParse(url, "", PARSE_PATH);	HTList * list = NULL;	HTPEPElement * element = HTPEP_newElement(protocol, context);	/*	** If existing list not found then create a new list and add it	** to the tree	*/	if ((list = (HTList *) HTUTree_findNode(tree, realm, path)) == NULL) {	    list = HTPEP_newList();	    HTUTree_addNode(tree, realm, path, list);	}	HT_FREE(path);	/* Now add the new element */	return HTList_addObject(list, element);    }}/* ------------------------------------------------------------------------- *//*				   PEP ENGINE 				     *//* ------------------------------------------------------------------------- *//*	HTPEP_beforeFilter**	------------------**	Return YES or whatever callback returns*/PUBLIC int HTPEP_beforeFilter (HTRequest * request, void * param, int mode){    int ret = HT_OK;    char * url = HTAnchor_physical(HTRequest_anchor(request));    const char * realm = HTRequest_realm(request);    HTList * list = HTPEP_findList(realm, url);    if (list) {	HTPEPElement * pres;	HTTRACE(APP_TRACE, "PEP Engine.. Calling BEFORE protocols %p\n" _ list);	while ((pres = (HTPEPElement *) HTList_nextObject(list))) {	    HTPEPModule * module = HTPEP_findModule(pres->name);	    if (module) {		ret = (*module->before)(request, pres->context, mode);		if (ret != HT_OK) break;	    }	}    }    return HT_OK;}/*	HTPEP_afterFilter**	-----------------**	Return YES or whatever callback returns*/PUBLIC int HTPEP_afterFilter (HTRequest * request, HTResponse * response,			      void * param, int status){    int ret = HT_OK;    HTAssocList * protocols = HTResponse_protocol(response);    if (protocols) {	HTPEPElement * pres;	HTTRACE(APP_TRACE, "PEP Engine.. Calling AFTER protocols %p\n" _ protocols);	while ((pres = (HTPEPElement *) HTList_nextObject(protocols))) {	    HTPEPModule * module = HTPEP_findModule(pres->name);	    if (module) {		ret = (*module->after)(request, response, pres->context, status);		if (ret != HT_OK) break;	    }	}    }    return HT_OK;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区日韩二区| 欧美视频自拍偷拍| 久久电影网站中文字幕| 婷婷丁香激情综合| 日韩成人伦理电影在线观看| 亚洲综合久久久| 亚洲国产精品久久久久秋霞影院| 中文字幕一区二区视频| 国产精品无遮挡| 国产精品欧美一级免费| 日韩理论电影院| 亚洲国产精品一区二区久久| 亚洲 欧美综合在线网络| 天天色天天操综合| 国内成+人亚洲+欧美+综合在线| 精东粉嫩av免费一区二区三区| 国产剧情一区二区| 99视频精品全部免费在线| 91最新地址在线播放| 欧美日韩在线精品一区二区三区激情| 欧美日韩你懂的| 日韩精品在线一区二区| 国产精品美日韩| 亚洲午夜私人影院| 久久爱www久久做| 99国产精品久| 日韩一级二级三级精品视频| 久久久精品国产免大香伊 | 紧缚捆绑精品一区二区| 国产福利精品导航| 色综合色综合色综合| 91精品国产一区二区三区| 日本一区二区三区免费乱视频 | 在线精品视频免费播放| 欧美一级视频精品观看| 国产亚洲欧美色| 亚洲国产成人av网| 成人一二三区视频| 8x福利精品第一导航| 国产精品污污网站在线观看| 午夜a成v人精品| 成人av网站大全| 日韩欧美久久久| 亚洲一区二区精品视频| 国产99精品视频| 欧美一区二区视频观看视频 | 91蜜桃在线免费视频| 日韩美女在线视频| 一区二区在线观看不卡| 国产精品888| 欧美大片顶级少妇| 午夜一区二区三区在线观看| 暴力调教一区二区三区| 日韩免费高清电影| 日韩精品成人一区二区三区| 91伊人久久大香线蕉| 26uuu亚洲综合色欧美| 视频一区视频二区中文字幕| 97久久精品人人爽人人爽蜜臀| 精品国产三级a在线观看| 天堂久久一区二区三区| 在线观看一区日韩| 亚洲免费观看高清在线观看| 国产精品一区不卡| 久久欧美中文字幕| 国产一区二区精品久久91| 制服丝袜中文字幕亚洲| 亚洲va韩国va欧美va| 色婷婷激情综合| 亚洲少妇屁股交4| av在线不卡免费看| 中文字幕色av一区二区三区| 国产成人在线视频网址| 国产清纯白嫩初高生在线观看91 | 国产精品99久久久久| 久久免费美女视频| 久久精子c满五个校花| 欧美一区二区视频网站| 亚洲高清视频中文字幕| 欧美午夜一区二区三区| 夜夜嗨av一区二区三区四季av| 91视频国产资源| 亚洲综合在线视频| 欧美人xxxx| 麻豆国产91在线播放| 日韩精品一区二区三区四区| 久久99久久久欧美国产| 久久亚洲春色中文字幕久久久| 国产一区二区三区视频在线播放| 久久嫩草精品久久久久| 成人免费视频一区| 亚洲动漫第一页| 日韩精品中文字幕在线一区| 国产成人高清视频| 亚洲视频在线观看三级| 6080日韩午夜伦伦午夜伦| 国产一区中文字幕| 亚洲国产一区二区在线播放| 国产精品一区在线观看乱码| 欧美一区二区三区四区久久| 青青草精品视频| 中文字幕国产精品一区二区| 91啪在线观看| 日本不卡一二三| 国产欧美日韩在线视频| 一本一本久久a久久精品综合麻豆| 亚洲国产cao| 久久综合色婷婷| 色久综合一二码| 久久精品国产一区二区| 欧美激情中文字幕一区二区| 欧美色网站导航| 国产老肥熟一区二区三区| 亚洲在线免费播放| 久久久久久久综合色一本| 欧美亚洲一区二区在线| 国产精品一区在线观看乱码| 天天综合色天天| 亚洲欧美在线另类| 国产在线精品一区在线观看麻豆| 狠狠久久亚洲欧美| 亚洲素人一区二区| 日韩美女视频在线| 一本色道久久综合精品竹菊| 免费亚洲电影在线| 亚洲精品久久久蜜桃| 国产视频在线观看一区二区三区| 色婷婷综合久久| 成人国产亚洲欧美成人综合网 | 99久精品国产| 老司机精品视频一区二区三区| 中文字幕一区三区| 久久免费偷拍视频| 日韩一级二级三级精品视频| 欧美少妇一区二区| 欧洲一区在线电影| 日本中文在线一区| 国产农村妇女精品| 一道本成人在线| 91色视频在线| 不卡的av在线| 国产精品一区二区三区四区| 久久国产乱子精品免费女| 日韩av中文字幕一区二区三区| 亚洲激情六月丁香| 久久网站热最新地址| 精品免费视频.| 日韩午夜激情电影| 日韩一区二区电影| 欧美一区二区三区在线电影| 欧美日韩国产精选| 欧美巨大另类极品videosbest| 国产成人免费高清| 国产在线精品视频| 国产最新精品免费| 国产在线精品免费| 国产99久久久国产精品免费看| 丁香婷婷综合网| 不卡一二三区首页| 美女国产一区二区| 精品在线一区二区三区| 九九九久久久精品| 国产成人精品一区二| 波多野结衣亚洲一区| 色一区在线观看| 欧美亚洲综合网| 91在线丨porny丨国产| 色综合色综合色综合色综合色综合| 91片在线免费观看| 制服丝袜在线91| 久久久精品黄色| 亚洲视频综合在线| 综合激情网...| 国产精品五月天| 亚洲人一二三区| 日本va欧美va精品发布| 久久国产精品色婷婷| 国产91丝袜在线播放0| 色一情一乱一乱一91av| 91精品国产91综合久久蜜臀| 久久蜜桃av一区二区天堂| 亚洲日本在线观看| 日本一不卡视频| 国产成人av一区| 91国内精品野花午夜精品| 欧美一区二区三区性视频| 欧美精彩视频一区二区三区| 一区二区激情视频| 青青青爽久久午夜综合久久午夜| 国产成人综合亚洲91猫咪| 色94色欧美sute亚洲线路二| 日韩欧美中文字幕精品| 国产精品丝袜在线| 天堂一区二区在线| 91亚洲国产成人精品一区二三| 欧美日韩aaaaa| 久久久精品免费观看| 亚洲第一在线综合网站| aaa亚洲精品| 精品国产一区二区亚洲人成毛片|