亚洲欧美第一页_禁久久精品乱码_粉嫩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**| 欧美亚洲精品一区| 亚洲18女电影在线观看| 91超碰这里只有精品国产| 日本不卡在线视频| 精品国产91洋老外米糕| 成人小视频免费观看| 亚洲人成网站在线| 欧美日韩五月天| 捆绑紧缚一区二区三区视频| 久久久av毛片精品| 91丨九色丨蝌蚪丨老版| 亚洲午夜日本在线观看| 精品国产青草久久久久福利| 国产不卡视频在线播放| 亚洲视频一二三区| 在线播放91灌醉迷j高跟美女 | 美国精品在线观看| 国产亚洲一区二区三区在线观看| www.欧美色图| 首页综合国产亚洲丝袜| 精品久久久久久久人人人人传媒 | 综合av第一页| 91精品福利在线一区二区三区| 经典一区二区三区| 亚洲最新视频在线播放| 日韩欧美一级在线播放| 91视频国产观看| 美女精品一区二区| 18欧美亚洲精品| 欧美一区二区三区在线观看视频| 国产黄人亚洲片| 亚洲第一久久影院| 国产精品人人做人人爽人人添| 欧美视频一区二区三区四区| 精品一区二区三区免费观看| 亚洲美女电影在线| 久久精品欧美日韩| 欧美一级高清片| 99re成人精品视频| 国产一区视频在线看| 亚洲午夜免费电影| 日韩毛片一二三区| 久久日韩粉嫩一区二区三区| 欧美乱妇15p| 99久久精品国产导航| 国模冰冰炮一区二区| 三级久久三级久久久| 亚洲三级在线免费观看| 久久综合精品国产一区二区三区| 欧美日韩一区 二区 三区 久久精品| 国产精品羞羞答答xxdd| 美女网站色91| 日本欧美大码aⅴ在线播放| 亚洲欧美国产三级| 国产精品久久久久久久久免费丝袜| 欧美一级欧美三级在线观看| 欧美在线一二三| 91蜜桃视频在线| 成人av网站大全| 国产高清精品在线| 久久激情五月激情| 日本欧美在线看| 五月天欧美精品| 亚洲国产日产av| 一区二区免费在线播放| 亚洲欧美另类在线| 亚洲天堂2016| 亚洲三级免费电影| ㊣最新国产の精品bt伙计久久| 久久精品欧美一区二区三区麻豆| 精品日韩欧美在线| 精品日韩欧美一区二区| 26uuu精品一区二区| 欧美变态凌虐bdsm| wwww国产精品欧美| 国产午夜亚洲精品不卡| 国产亚洲成年网址在线观看| 2024国产精品视频| 国产肉丝袜一区二区| 国产色婷婷亚洲99精品小说| 欧美国产日本视频| 一区视频在线播放| 亚洲免费观看高清完整版在线观看熊 | 亚洲超碰精品一区二区| 日韩中文字幕亚洲一区二区va在线| 亚洲v中文字幕| 日韩在线卡一卡二| 久久国产精品色| 激情五月婷婷综合| 岛国av在线一区| 色婷婷综合久久久久中文| 欧美视频一区二区| 欧美一级在线免费| 2023国产精华国产精品| 国产精品理论在线观看| 亚洲精品成人精品456| 偷拍亚洲欧洲综合| 精品亚洲欧美一区| 成人精品gif动图一区| 9色porny自拍视频一区二区| 欧美亚洲尤物久久| 日韩一级黄色片| 国产欧美日韩综合精品一区二区| 中文字幕一区二区三区精华液 | 中文字幕在线观看不卡| 亚洲一区二区三区视频在线| 石原莉奈一区二区三区在线观看| 精品一区二区久久| 99久久夜色精品国产网站| 欧美精选一区二区| 中文字幕欧美日本乱码一线二线 | 亚洲欧洲一区二区在线播放| 亚洲一区二区三区影院| 国产精品亚洲第一| 欧美日韩精品一区二区在线播放| 欧美精品一区二| 樱花影视一区二区| 国产麻豆9l精品三级站| 在线观看av不卡| 久久久国产一区二区三区四区小说| 一区二区高清视频在线观看| 久久精品国产亚洲高清剧情介绍| 成人av片在线观看| 欧美一卡在线观看| 亚洲色图制服诱惑| 狠狠色丁香婷综合久久| 在线中文字幕一区| 久久久噜噜噜久噜久久综合| 午夜久久福利影院| 91首页免费视频| 久久精品男人的天堂| 青草国产精品久久久久久| 91麻豆福利精品推荐| 久久免费看少妇高潮| 亚洲va韩国va欧美va| 欧美天堂一区二区三区| 国产视频一区二区三区在线观看| 日韩av成人高清| 在线免费观看日本一区| 中文成人av在线| 国内精品国产三级国产a久久| 日本高清成人免费播放| 欧美激情艳妇裸体舞| 久久精品久久综合| 91麻豆精品国产91久久久更新时间 | 欧美主播一区二区三区美女| 国产精品无遮挡| 国产精品一二三区| 日韩免费观看2025年上映的电影| 一区二区三区免费| 91免费版在线看| 国产精品第一页第二页第三页| 国产在线播精品第三| 日韩亚洲电影在线| 水蜜桃久久夜色精品一区的特点| 欧美色图天堂网| 亚洲综合色丁香婷婷六月图片| 99精品久久免费看蜜臀剧情介绍| 亚洲国产激情av| 高清在线不卡av| 国产日韩欧美亚洲| 国产成人精品亚洲777人妖| 久久综合色鬼综合色| 精品系列免费在线观看| 久久久久久久久久久99999| 国内一区二区在线| 久久久久久久久久久黄色| 国产精品一区二区无线| 国产婷婷色一区二区三区在线| 精品一区二区三区久久| 久久久精品人体av艺术| 国产老女人精品毛片久久| 久久久国产综合精品女国产盗摄| 国产成人免费视频| 国产精品久久久久久久久久久免费看 | 国产精品国产a| 91免费看`日韩一区二区| 亚洲精品乱码久久久久| 欧美三级日韩三级| 日本v片在线高清不卡在线观看| 88在线观看91蜜桃国自产| 美女视频网站久久| 中文字幕欧美国产| 色婷婷亚洲精品| 日韩电影在线一区二区| 欧美精品一区视频| 成人激情小说乱人伦| 一区二区三区波多野结衣在线观看| 欧美日韩国产中文| 精品亚洲免费视频| 日韩美女视频19| 欧美一区二区三区性视频| 激情另类小说区图片区视频区| 国产欧美日产一区| 欧美综合在线视频| 精品在线免费视频|