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

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

?? hthost.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*								       HTHost.c**	REMOTE HOST INFORMATION****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTHost.c,v 2.72 2000/07/28 13:56:08 kahan Exp $****	This object manages the information that we know about a remote host.**	This can for example be what type of host it is, and what version**	it is using. We also keep track of persistent connections****	April 96  HFN	Written*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "HTParse.h"#include "HTAlert.h"#include "HTError.h"#include "HTNetMan.h"#include "HTTrans.h"#include "HTTPUtil.h"#include "HTTCP.h"#include "HTHost.h"					 /* Implemented here */#include "HTHstMan.h"#define HOST_OBJECT_TTL	    43200L	     /* Default host timeout is 12 h */#define TCP_IDLE_PASSIVE      120L /* Passive TTL in s on an idle connection */#define TCP_IDLE_ACTIVE     60000L /* Active TTL in ms on an idle connection */#define MAX_PIPES		50   /* maximum number of pipelined requests */#define MAX_HOST_RECOVER	1	      /* Max number of auto recovery */#define DEFAULT_DELAY		30	  /* Default write flush delay in ms */struct _HTInputStream {    const HTInputStreamClass *	isa;};PRIVATE int HostEvent(SOCKET soc, void * pVoid, HTEventType type);/* Type definitions and global variables etc. local to this module */PRIVATE time_t	HostTimeout = HOST_OBJECT_TTL;	 /* Timeout for host objects */PRIVATE time_t	HTPassiveTimeout = TCP_IDLE_PASSIVE; /* Passive timeout in s */PRIVATE ms_t	HTActiveTimeout = TCP_IDLE_ACTIVE;   /* Active timeout in ms */PRIVATE HTList	** HostTable = NULL;PRIVATE HTList * PendHost = NULL;	    /* List of pending host elements *//* JK: New functions for interruption the automatic pending request    activation */PRIVATE HTHost_ActivateRequestCallback * ActivateReqCBF = NULL;PRIVATE int HTHost_ActivateRequest (HTNet *net);PRIVATE BOOL DoPendingReqLaunch = YES; /* controls automatic activation                                              of pending requests */PRIVATE int EventTimeout = -1;		        /* Global Host event timeout */PRIVATE ms_t WriteDelay = DEFAULT_DELAY;		      /* Delay in ms */PRIVATE int MaxPipelinedRequests = MAX_PIPES;/* ------------------------------------------------------------------------- */PRIVATE void free_object (HTHost * me){    if (me) {	int i;	HT_FREE(me->hostname);	HT_FREE(me->type);	HT_FREE(me->server);	HT_FREE(me->user_agent);	HT_FREE(me->range_units);	/* Delete the channel (if any) */	if (me->channel) {	    HTChannel_delete(me->channel, HT_OK);	    me->channel = NULL;	}	/* Unregister the events */	for (i = 0; i < HTEvent_TYPES; i++)	    HTEvent_delete(me->events[i]);	/* Delete the timer (if any) */	if (me->timer) HTTimer_delete(me->timer);	/* Delete the queues */	HTList_delete(me->pipeline);	HTList_delete(me->pending);	HT_FREE(me);    }}PRIVATE BOOL delete_object (HTList * list, HTHost * me){    HTTRACE(CORE_TRACE, "Host info... object %p from list %p\n" _ me _ list);    HTList_removeObject(list, (void *) me);    free_object(me);    return YES;}PRIVATE BOOL isLastInPipe (HTHost * host, HTNet * net){    return HTList_lastObject(host->pipeline) == net;}PRIVATE BOOL killPipeline (HTHost * host, HTEventType type){    if (host) {	int piped = HTList_count(host->pipeline);	int pending = HTList_count(host->pending);	int cnt;	HTTRACE(CORE_TRACE, "Host kill... Pipeline due to %s event\n" _ HTEvent_type2str(type));	/* Terminate all net objects in pending queue */	for (cnt=0; cnt<pending; cnt++) {	    HTNet * net = HTList_removeLastObject(host->pending);	    if (net) {		HTTRACE(CORE_TRACE, "Host kill... Terminating net object %p from pending queue\n" _ net);		net->registeredFor = 0;		(*net->event.cbf)(HTChannel_socket(host->channel), net->event.param, type);		if (host->lock == net) host->lock = NULL;	    }	}	/* Terminate all net objects in pipeline */	if (piped >= 1) {	    	    /*	    **  Terminte all net objects in the pipeline	    */	    for (cnt=0; cnt<piped; cnt++) {		HTNet * net = HTList_firstObject(host->pipeline);		if (net) {		    HTTRACE(CORE_TRACE, "Host kill... Terminating net object %p from pipe line\n" _ net);		    net->registeredFor = 0;		    (*net->event.cbf)(HTChannel_socket(host->channel), net->event.param, type);		}	    }	}	return YES;    }    return NO;}/***  Silently close an idle persistent connection after **  HTActiveTimeout secs*/PRIVATE int IdleTimeoutEvent (HTTimer * timer, void * param, HTEventType type){    HTHost * host = (HTHost *) param;    SOCKET sockfd = HTChannel_socket(host->channel);    HTTimer_delete(timer);    host->timer = NULL;    return HostEvent (sockfd, host, HTEvent_CLOSE);}/***	HostEvent - host event manager - recieves events from the event **	manager and dispatches them to the client net objects by calling the **	net object's cbf.***/PRIVATE int HostEvent (SOCKET soc, void * pVoid, HTEventType type){    HTHost * host = (HTHost *)pVoid;    if (type == HTEvent_READ || type == HTEvent_CLOSE || type == HTEvent_ACCEPT) {	HTNet * targetNet;	/* call the first net object */	do {	    int ret;            /* netscape and apache servers can do a lazy close well after usage             * of previous socket has been dispensed by the library,             * the section below makes sure the event does not get miss attributed             */	    if (HTChannel_socket(host->channel) != soc && type != HTEvent_ACCEPT && !host->listening) {		HTTRACE(CORE_TRACE, "Host Event.. wild socket %d type = %s real socket is %d\n" _ soc _ 			type == HTEvent_CLOSE ? "Event_Close" : "Event_Read" _ 			HTChannel_socket(host->channel));		return HT_OK;	    }	    targetNet = (HTNet *)HTList_firstObject(host->pipeline);	    if (targetNet) {		HTTRACE(CORE_TRACE, "Host Event.. READ passed to `%s\'\n" _ 			    HTAnchor_physical(HTRequest_anchor(HTNet_request(targetNet))));		if ((ret = (*targetNet->event.cbf)(HTChannel_socket(host->channel), 						  targetNet->event.param, type)) != HT_OK)		    return ret;	    }	    if (targetNet == NULL && host->remainingRead > 0) {		HTTRACE(CORE_TRACE, "HostEvent... Error: %d bytes left to read and nowhere to put them\n" _ 			    host->remainingRead);		host->remainingRead = 0;		/*		**	Fall through to close the channel		*/	    }	/* call pipelined net object to eat all the data in the channel */	} while (host->remainingRead > 0);	/* last target net should have set remainingRead to 0 */	if (targetNet)	    return HT_OK;	/* If there was notargetNet, it should be a close */	HTTRACE(CORE_TRACE, "Host Event.. host %p `%s\' closed connection.\n" _ 		    host _ host->hostname);	/* Is there garbage in the channel? Let's check: */	{	    char buf[256];	    int ret;	    memset(buf, '\0', sizeof(buf));	    if (HTChannel_socket(host->channel) != INVSOC) {	      while ((ret = NETREAD(HTChannel_socket(host->channel), buf, sizeof(buf)-1)) > 0) {		HTTRACE(CORE_TRACE, "Host Event.. Host %p `%s\' had %d extraneous bytes: `%s\'\n" _ 			host _ host->hostname _ ret _ buf);		memset(buf, '\0', sizeof(buf));			      }	    	    }	}	HTHost_clearChannel(host, HT_OK);	return HT_OK; 	     /* extra garbage does not constitute an application error */	    } else if (type == HTEvent_WRITE || type == HTEvent_CONNECT) {	HTNet * targetNet = (HTNet *)HTList_lastObject(host->pipeline);	if (targetNet) {	    HTTRACE(CORE_TRACE, "Host Event.. WRITE passed to `%s\'\n" _ 			HTAnchor_physical(HTRequest_anchor(HTNet_request(targetNet))));	    return (*targetNet->event.cbf)(HTChannel_socket(host->channel), targetNet->event.param, type);	}	HTTRACE(CORE_TRACE, "Host Event Host %p (`%s\') dispatched with event %s but doesn't have a target - %d requests made, %d requests in pipe, %d pending\n" _ 		    host _ 		    host ? host->hostname : "<null>" _ 		    HTEvent_type2str(type) _ 		    host ? host->reqsMade : -1 _ 		    HTList_count(host->pipeline) _ 		    HTList_count(host->pending));#if 0	HTDEBUGBREAK("Host Event.. Host %p (`%s\') dispatched with event %d\n" _ 		     host _ host ? host->hostname : "<null>" _ type);	return HT_ERROR;#else	return HT_OK;#endif    } else if (type == HTEvent_TIMEOUT) {	killPipeline(host, HTEvent_TIMEOUT);    } else {	HTTRACE(CORE_TRACE, "Don't know how to handle OOB data from `%s\'?\n" _		host->hostname);    }    return HT_OK;}/***	Search the host info cache for a host object or create a new one**	and add it. Examples of host names are****		www.w3.org**		www.foo.com:8000**		18.52.0.18****	Returns Host object or NULL if error. You may get back an already**	existing host object - you're not guaranteed a new one each time.*/PUBLIC HTHost * HTHost_new (char * host, u_short u_port){    HTList * list = NULL;			    /* Current list in cache */    HTHost * pres = NULL;    int hash = 0;    if (!host) {	HTTRACE(CORE_TRACE, "Host info... Bad argument\n");	return NULL;    }        /* Find a hash for this host */    {	char *ptr;	for (ptr=host; *ptr; ptr++)	    hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HOST_HASH_SIZE);	if (!HostTable) {	    if ((HostTable = (HTList **) HT_CALLOC(HOST_HASH_SIZE,						   sizeof(HTList *))) == NULL)	        HT_OUTOFMEM("HTHost_find");	}	if (!HostTable[hash]) HostTable[hash] = HTList_new();	list = HostTable[hash];    }    /* Search the cache */    {	HTList * cur = list;	while ((pres = (HTHost *) HTList_nextObject(cur))) {	    if (!strcmp(pres->hostname, host) && u_port == pres->u_port) {		if (HTHost_isIdle(pres) && time(NULL)>pres->ntime+HostTimeout){		    HTTRACE(CORE_TRACE, "Host info... Collecting host info %p\n" _ pres);		    delete_object(list, pres);		    pres = NULL;		}		break;	    }	}    }    /* If not found then create new Host object, else use existing one */    if (pres) {	if (pres->channel) {            /*            **  If we have a TTL for this TCP connection then            **  check that we haven't passed it.            */            if (pres->expires > 0) {                time_t t = time(NULL);                if (HTHost_isIdle(pres) && pres->expires < t) {                    HTTRACE(CORE_TRACE, "Host info... Persistent channel %p gotten cold\n" _                         pres->channel);		    HTHost_clearChannel(pres, HT_OK);                } else {                    pres->expires = t + HTPassiveTimeout;                    HTTRACE(CORE_TRACE, "Host info... REUSING CHANNEL %p\n" _ pres->channel);                }            }	} else {	    HTTRACE(CORE_TRACE, "Host info... Found Host %p with no active channel\n" _ pres);	}    } else {	if ((pres = (HTHost *) HT_CALLOC(1, sizeof(HTHost))) == NULL)	    HT_OUTOFMEM("HTHost_add");	pres->hash = hash;	StrAllocCopy(pres->hostname, host);	pres->u_port = u_port;	pres->ntime = time(NULL);	pres->mode = HT_TP_SINGLE;	pres->delay = WriteDelay;	pres->inFlush = NO;	{	    int i;	    for (i = 0; i < HTEvent_TYPES; i++)		pres->events[i]= HTEvent_new(HostEvent, pres, HT_PRIORITY_MAX, EventTimeout);	}	HTTRACE(CORE_TRACE, "Host info... added `%s\' with host %p to list %p\n" _ 		    host _ pres _ list);	HTList_addObject(list, (void *) pres);    }    return pres;}PUBLIC HTHost * HTHost_newWParse (HTRequest * request, char * url, u_short u_port){    char * port;    char * fullhost = NULL;    char * parsedHost = NULL;    SockA * sin;    HTHost * me;    char * proxy = HTRequest_proxy(request);    fullhost = HTParse(proxy ? proxy : url, "", PARSE_HOST);    /* If there's an @ then use the stuff after it as a hostname */    if (fullhost) {	char * at_sign;	if ((at_sign = strchr(fullhost, '@')) != NULL)	    parsedHost = at_sign+1;	else	    parsedHost = fullhost;    }    if (!parsedHost || !*parsedHost) {	HTRequest_addError(request, ERR_FATAL, NO, HTERR_NO_HOST,			   NULL, 0, "HTHost_newWParse");	HT_FREE(fullhost);	return NULL;    }    /* See if the default port should be overridden */    if ((port = strchr(parsedHost, ':')) != NULL) {	*port++ = '\0';	if (*port && isdigit((int) *port)) u_port = (u_short) atol(port);    }    HTTRACE(PROT_TRACE, "HTHost parse Looking up `%s\' on port %u\n" _ parsedHost _ u_port);    /* Find information about this host */    if ((me = HTHost_new(parsedHost, u_port)) == NULL) {	HTTRACE(PROT_TRACE, "HTHost parse Can't get host info\n");	me->tcpstate = TCP_ERROR;	return NULL;    }    sin = &me->sock_addr;    memset((void *) sin, '\0', sizeof(SockA));#ifdef DECNET    sin->sdn_family = AF_DECnet;    net->sock_addr.sdn_objnum = port ? (unsigned char)(strtol(port, (char **) 0, 10)) : DNP_OBJ;#else  /* Internet */    sin->sin_family = AF_INET;    sin->sin_port = htons(u_port);#endif    HT_FREE(fullhost);	/* parsedHost points into fullhost */    return me;}/***	Search the host info cache for a host object. Examples of host names:****		www.w3.org**		www.foo.com:8000**		18.52.0.18****	Returns Host object or NULL if not found.*/PUBLIC HTHost * HTHost_find (char * host){    HTList * list = NULL;			    /* Current list in cache */    HTHost * pres = NULL;    HTTRACE(CORE_TRACE, "Host info... Looking for `%s\'\n" _ host ? host : "<null>");    /* Find a hash for this host */    if (host && HostTable) {	int hash = 0;	char *ptr;	for (ptr=host; *ptr; ptr++)	    hash = (int) ((hash * 3 + (*(unsigned char *) ptr)) % HOST_HASH_SIZE);	if (!HostTable[hash]) return NULL;	list = HostTable[hash];	/* Search the cache */	{	    HTList * cur = list;	    while ((pres = (HTHost *) HTList_nextObject(cur))) {		if (!strcmp(pres->hostname, host)) {		    if (time(NULL) > pres->ntime + HostTimeout) {			HTTRACE(CORE_TRACE, "Host info... Collecting host %p\n" _ pres);			delete_object(list, pres);			pres = NULL;  		    } else {			HTTRACE(CORE_TRACE, "Host info... Found `%s\'\n" _ host);		    }		    return pres;		}	    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人白浆超碰人人人人| 久久久久久久一区| 久久久久国产精品人| 亚洲午夜视频在线| 大陆成人av片| 精品国产一区二区三区四区四 | 成人av免费在线观看| 欧美日韩高清一区二区| 国产精品国产三级国产普通话三级| 视频一区在线播放| 91福利在线免费观看| 中文字幕不卡三区| 国产一区二三区| 日韩午夜电影在线观看| 亚洲成人777| 91福利社在线观看| 综合中文字幕亚洲| 成人国产亚洲欧美成人综合网 | 欧美色爱综合网| 亚洲婷婷综合久久一本伊一区 | 青青草97国产精品免费观看无弹窗版| 91女厕偷拍女厕偷拍高清| 欧美激情一区二区三区不卡| 国产在线视频一区二区| 欧美大尺度电影在线| 丝袜美腿亚洲色图| 欧美一区二区三区视频| 亚洲va欧美va人人爽| 欧美日精品一区视频| 日韩美女精品在线| 97se亚洲国产综合自在线不卡| 国产欧美一区二区在线观看| 国产精品一区在线观看你懂的| 精品久久久久久久久久久院品网 | 日韩美女视频一区二区在线观看| 日韩高清不卡一区二区| 欧美日韩极品在线观看一区| 亚洲成人免费视频| 欧美一区二区三区不卡| 免播放器亚洲一区| 久久久91精品国产一区二区精品| 国产一区二区美女诱惑| 国产欧美精品日韩区二区麻豆天美| 国产成人在线视频网站| 日本一区二区综合亚洲| kk眼镜猥琐国模调教系列一区二区| 亚洲婷婷综合久久一本伊一区 | a亚洲天堂av| 一区二区三区四区中文字幕| 欧美日韩五月天| 麻豆91精品视频| 中文字幕欧美区| 欧美最猛性xxxxx直播| 日韩精品91亚洲二区在线观看 | 亚洲精品日日夜夜| 欧美日韩成人在线一区| 极品美女销魂一区二区三区免费| 国产日韩一级二级三级| 色偷偷成人一区二区三区91| 日本伊人午夜精品| 国产精品无人区| 欧美日韩不卡视频| 国产一区在线观看麻豆| 亚洲四区在线观看| 6080亚洲精品一区二区| 国产精品一卡二| 亚洲综合丝袜美腿| 久久免费的精品国产v∧| 91成人免费在线视频| 麻豆精品在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 欧美视频你懂的| 国产福利91精品一区二区三区| 亚洲图片有声小说| 国产精品青草久久| 日韩一区二区视频| 色综合中文字幕国产 | 久久久久久影视| 欧美天堂一区二区三区| 国产精品1区2区3区在线观看| 亚洲午夜免费电影| 中文字幕不卡三区| 欧美成人三级在线| 欧美天堂亚洲电影院在线播放| 国产成a人无v码亚洲福利| 五月天精品一区二区三区| 国产精品久久久久桃色tv| 日韩一级成人av| 欧美系列日韩一区| 99久久精品免费看国产| 全部av―极品视觉盛宴亚洲| 一区二区三区日本| 国产精品欧美一级免费| 26uuuu精品一区二区| 91精品国产一区二区三区| 91免费视频观看| 岛国精品在线播放| 国产91丝袜在线播放0| 九色综合国产一区二区三区| 亚洲成人777| 午夜精品一区二区三区电影天堂| 国产精品大尺度| 中文字幕 久热精品 视频在线| 日韩精品中文字幕在线一区| 欧美精品在线观看播放| 欧美日韩一卡二卡| 91九色最新地址| 色94色欧美sute亚洲13| 99久久99久久精品国产片果冻 | 欧美精品三级日韩久久| 欧美视频在线一区| 欧美色图第一页| 欧美日韩中文字幕一区二区| 色婷婷综合久久| 色天天综合色天天久久| 91免费看`日韩一区二区| 97se亚洲国产综合自在线观| 91啪亚洲精品| 欧美午夜精品免费| 91麻豆精品91久久久久同性| 欧美一区二区三区在线看| 日韩一区二区在线免费观看| 欧美成人aa大片| 亚洲影院久久精品| 亚洲国产色一区| 天天操天天色综合| 捆绑变态av一区二区三区| 久久激情五月激情| 国产成人综合网站| 99热在这里有精品免费| 色天天综合色天天久久| 91麻豆国产福利精品| 91网站最新网址| 欧美日韩精品一区二区| 日韩色在线观看| 国产女同互慰高潮91漫画| 亚洲精品乱码久久久久久日本蜜臀| 亚洲激情图片一区| 视频一区二区不卡| 国产精品自产自拍| 一本久久综合亚洲鲁鲁五月天| 欧美日韩成人在线| 久久久久9999亚洲精品| 一个色在线综合| 国产伦精品一区二区三区在线观看 | 韩国毛片一区二区三区| 成人18视频日本| 91麻豆精品国产综合久久久久久 | 欧美一区二区精美| 国产欧美精品区一区二区三区| 一区二区三区鲁丝不卡| 蜜桃一区二区三区在线| 99久久精品99国产精品| 日韩视频一区二区三区| 亚洲欧美日韩国产手机在线| 青青草国产成人av片免费 | 成人综合在线观看| 欧美日韩一区二区三区视频| 久久色中文字幕| 亚洲一二三四久久| 国产ts人妖一区二区| 欧美日韩二区三区| 国产精品国产三级国产普通话蜜臀| 免费成人美女在线观看| 色噜噜狠狠色综合中国| 久久久亚洲欧洲日产国码αv| 亚洲一区在线看| av亚洲产国偷v产偷v自拍| 欧美一区二区三区色| 亚洲一区欧美一区| 成人免费高清视频| 精品久久久久久久久久久久久久久久久| 综合激情网...| 成人精品国产一区二区4080| 欧美久久久久久蜜桃| 一区二区在线看| 99国产精品久久久久久久久久久| 日韩三级在线观看| 亚洲成年人网站在线观看| 色婷婷精品大在线视频| 日本一区二区成人在线| 国模一区二区三区白浆| 欧美喷潮久久久xxxxx| 亚洲男帅同性gay1069| www.欧美亚洲| 最近日韩中文字幕| 成人动漫一区二区在线| 日本一区二区三级电影在线观看 | 久久精品国产77777蜜臀| 欧美日韩国产美女| 亚洲国产精品一区二区www| 91年精品国产| 一区二区三区欧美在线观看| 91污片在线观看| 综合av第一页| 在线免费视频一区二区| 亚洲一级不卡视频| 欧美老肥妇做.爰bbww| 青青草国产精品亚洲专区无| 欧美一级片免费看|