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

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

?? htnet.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 3 頁
字號:
	MaxActive = newmax;	return YES;    }    return NO;}PUBLIC void HTNet_increaseSocket (void){    Active++;    HTTRACE(CORE_TRACE, "Net Manager. Increasing active sockets to %d, %d persistent sockets\n" _ 		Active _ Persistent);}PUBLIC void HTNet_decreaseSocket (void){    if (--Active < 0) Active = 0;    HTTRACE(CORE_TRACE, "Net Manager. Decreasing active sockets to %d, %d persistent sockets\n" _ 		Active _ Persistent);}PUBLIC int HTNet_availableSockets (void){    int available = MaxActive - Active;    return available > 0 ? available : 0;}PUBLIC void HTNet_increasePersistentSocket (void){    Persistent++;    HTTRACE(CORE_TRACE, "Net Manager. %d active sockets, increasing persistent sockets to %d\n" _ 		Active _ Persistent);}PUBLIC void HTNet_decreasePersistentSocket (void){    if (--Persistent < 0) Persistent = 0;    HTTRACE(CORE_TRACE, "Net Manager. %d active sockets, decreasing persistent sockets to %d\n" _ 		Active _ Persistent);}PUBLIC int HTNet_availablePersistentSockets (void){    int available = MaxActive - 2 - Persistent;    return available > 0 ? available : 0;}/***	Returns whether there are any Net objects pending or active*/PUBLIC BOOL HTNet_isIdle (void){    return (HTNetCount > 0);}PUBLIC BOOL HTNet_isEmpty (void){    return (HTNetCount <= 0);}PUBLIC int HTNet_count (void){    return HTNetCount;}/* ------------------------------------------------------------------------- *//*			  Creation and deletion methods  		     *//* ------------------------------------------------------------------------- */PRIVATE int AfterFilterEvent (HTTimer * timer, void * param, HTEventType type){    HTFilterEvent * fe = (HTFilterEvent *) param;    if (fe) {	HTRequest * request = fe->request;	int status = fe->status;	if (timer != fe->timer)	    HTDEBUGBREAK("Net timer. %p not in sync\n" _ timer);	HTTRACE(CORE_TRACE, "HTNet....... Continuing calling AFTER filters %p with timer %p\n" _ 		    fe _ timer);	/* Delete the event context */	HT_FREE(fe);	/* Now call the remaining AFTER filters */	return HTNet_executeAfterAll(request, status);    }    return HT_ERROR;}PRIVATE BOOL createAfterFilterEvent (HTRequest * request, int status){    HTFilterEvent * me = NULL;    if ((me = (HTFilterEvent *) HT_CALLOC(1, sizeof(HTFilterEvent))) == NULL)        HT_OUTOFMEM("createAfterFilterEvent");    me->request = request;    me->status = status;    me->timer = HTTimer_new(NULL, AfterFilterEvent, me, 1, YES, NO);    return YES;}PRIVATE HTNet * create_object (void){    static int net_hash = 0;    HTNet * me = NULL;    /* Create new object */    if ((me = (HTNet *) HT_CALLOC(1, sizeof(HTNet))) == NULL)        HT_OUTOFMEM("HTNet_new");    me->hash = net_hash++ % HT_XL_HASH_SIZE;    /* Insert into hash table */    if (!NetTable) {	if ((NetTable = (HTList **) HT_CALLOC(HT_XL_HASH_SIZE, sizeof(HTList *))) == NULL)	    HT_OUTOFMEM("create_object");    }    if (!NetTable[me->hash]) NetTable[me->hash] = HTList_new();    HTList_addObject(NetTable[me->hash], (void *) me);    HTNetCount++;    HTTRACE(CORE_TRACE, "Net Object.. %p created with hash %d\n" _ me _ me->hash);    return me;}/*	HTNet_duplicate**	---------------**	Creates a new HTNet object as a duplicate of the same request.**	Returns YES if OK, else NO**	BUG: We do not check if we have a socket free!*/PUBLIC HTNet * HTNet_dup (HTNet * src){    if (src) {        HTNet * me;	int hash;	if ((me = create_object()) == NULL) return NULL;	hash = me->hash;	HTTRACE(CORE_TRACE, "Net Object.. Duplicated %p\n" _ src);        memcpy((void *) me, src, sizeof(HTNet));	me->hash = hash;			/* Carry over hash entry */	return me;    }    return NULL;}PUBLIC BOOL HTNet_execute (HTNet * net, HTEventType type){    if (net && net->event.cbf && net->request) {	HTTRACE(CORE_TRACE, "Net Object.. %p calling %p with event type %d and context %p\n" _ 		    net _ net->event.cbf _ type _ net->event.param);	(*(net->event.cbf))(HTNet_socket(net), net->event.param, type);	return YES;    }    return NO;}/***	Start a Net obejct by calling the protocol module.*/PUBLIC BOOL HTNet_start (HTNet * net){    if (net && net->event.cbf && net->request) {	HTTRACE(CORE_TRACE, "Net Object.. Launching %p\n" _ net);	(*(net->event.cbf))(HTNet_socket(net), net->event.param, HTEvent_BEGIN);	return YES;    }    return NO;}/*	HTNet_new**	---------**	This function creates a new HTNet object and assigns the socket number**	to it. This is intended to be used when you are going to listen on a **	socket using the HTDoListen() function in HTTCP.c. The function do NOT**	call any of the before or after filter functions.**	Returns new object or NULL on error*/PUBLIC HTNet * HTNet_new (HTHost * host){    if (host) {	HTNet * me;	HTTRACE(CORE_TRACE, "Net Object.. Creating listen object for host %p\n" _ host);	me = create_object();	me->host = host;	return me;    }    return NULL;}/*      HTNet_newServer**      ---------------**      Create a new HTNet object as a new request to be handled. If we have**      more than MaxActive connections already then return NO.**      Returns YES if OK, else NO*/PUBLIC BOOL HTNet_newServer (HTRequest * request){    HTParentAnchor * anchor = HTRequest_anchor(request);    HTNet * me = NULL;    HTProtocol * protocol;    HTTransport * tp = NULL;    	/* added JTD:5/28/96 */    char * physical = NULL;    int status;    HTProtCallback * cbf;    if (!request) return NO;    /*    ** First we do all the "BEFORE" callbacks in order to see if we are to    ** continue with this request or not. If we receive a callback status    ** that is NOT HT_OK then jump directly to the after callbacks and return    */    if ((status = HTNet_executeBeforeAll(request)) != HT_OK) { 	/*	**  If in non-blocking mode then return here and call AFTER	**  filters from a timer event handler. As Olga Antropova	**  points out, otherwise, the stack can grow if new requests	**  are started directly from the after filters 	*/	if (HTEvent_isCallbacksRegistered() && !HTRequest_preemptive(request))	    createAfterFilterEvent(request, status);	else	    HTNet_executeAfterAll(request, status);	return YES;    }    /*    ** If no translation was provided by the filters then use the anchor    ** address directly    */    if (!(physical = HTAnchor_physical(anchor))) {	char * addr = HTAnchor_address((HTAnchor *) anchor);	HTTRACE(CORE_TRACE, "Net Object.. Using default address\n");	HTAnchor_setPhysical(anchor, addr);	physical = HTAnchor_physical(anchor);	HT_FREE(addr);    }    /* Find a protocol object for this access scheme */    {	char * access = HTParse(physical, "", PARSE_ACCESS);      	if ((protocol = HTProtocol_find(request, access)) == NULL) {	    HTTRACE(CORE_TRACE, "Net Object.. NO PROTOCOL Object found for URI scheme `%s\'\n" _ access);	    HT_FREE(access);	    return NO;	}	if (!(cbf = HTProtocol_server(protocol))) {	    HTTRACE(CORE_TRACE, "Net Object.. NO SERVER HANDLER for URI scheme `%s\'\n" _ access);	    HT_FREE(access);	    HT_FREE(me);	    return NO;	}	HT_FREE(access);    }    /* Find a transport object for this protocol */    if ((tp = HTTransport_find(request, HTProtocol_transport(protocol))) == NULL) {        HTTRACE(CORE_TRACE, "Net Object.. NO TRANSPORT found for protocol `%s\'\n" _ HTProtocol_name(protocol));        return NO;    }    /* Create new net object and bind to request object */    if ((me = create_object()) == NULL) return NO;    me->preemptive = (HTProtocol_preemptive(protocol) || HTRequest_preemptive(request));    HTNet_setEventPriority(me, HTRequest_priority(request));    me->protocol = protocol;    me->transport = tp; 		/* added - JTD:5/28/96 */    me->request = request;    HTRequest_setNet(request, me);    /* Start the server request */    HTTRACE(CORE_TRACE, "Net Object.. starting SERVER request %p and net object %p\n" _ request _ me);    (*(cbf))(INVSOC, request);    return YES;}/*	HTNet_newClient**	---------------**	Create a new HTNet object as a new request to be handled. If we have**	more than MaxActive connections already then put this into the**	pending queue, else start the request by calling the call back**	function registered with this access method. **	Returns YES if OK, else NO*/PUBLIC BOOL HTNet_newClient (HTRequest * request){    HTParentAnchor * anchor = HTRequest_anchor(request);    HTNet * me = NULL;    HTProtocol * protocol = NULL;    HTTransport * tp = NULL;    char * physical = NULL;    int status;    HTProtCallback * cbf;    if (!request) return NO;    /*    ** First we do all the "BEFORE" callbacks in order to see if we are to    ** continue with this request or not. If we receive a callback status    ** that is NOT HT_OK then jump directly to the after callbacks and return    */    if ((status = HTNet_executeBeforeAll(request)) != HT_OK) { 	/*	**  If in non-blocking mode then return here and call AFTER	**  filters from a timer event handler. As Olga Antropova	**  points out, otherwise, the stack can grow if new requests	**  are started directly from the after filters 	*/	if (HTEvent_isCallbacksRegistered() && !HTRequest_preemptive(request))	    createAfterFilterEvent(request, status);	else	    HTNet_executeAfterAll(request, status);	return YES;    }    /*    ** If no translation was provided by the filters then use the anchor    ** address directly    */    if (!(physical = HTAnchor_physical(anchor))) {	char * addr = HTAnchor_address((HTAnchor *) anchor);	HTTRACE(CORE_TRACE, "Net Object.. Using default address\n");	HTAnchor_setPhysical(anchor, addr);	physical = HTAnchor_physical(anchor);	HT_FREE(addr);    }    /* Find a protocol object for this access scheme */    {	char * proxy = HTRequest_proxy(request);	char * access = HTParse(proxy ? proxy : physical, "", PARSE_ACCESS);      	if ((protocol = HTProtocol_find(request, access)) == NULL) {	    HTTRACE(CORE_TRACE, "Net Object.. NO PROTOCOL Object found for URI scheme `%s\'\n" _ access);	    HT_FREE(access);	    return NO;	}	if (!(cbf = HTProtocol_client(protocol))) {	    HTTRACE(CORE_TRACE, "Net Object.. NO CLIENT HANDLER for URI scheme `%s\'\n" _ access);	    HT_FREE(access);	    HT_FREE(me);	    return NO;	}	HT_FREE(access);    }    /* Find a transport object for this protocol */    tp = HTTransport_find(request, HTProtocol_transport(protocol));    if (tp == NULL) {	HTTRACE(CORE_TRACE, "Net Object.. NO TRANSPORT found for protocol `%s\'\n" _ HTProtocol_name(protocol));	return NO;    }    /* Create new net object and bind it to the request object */    if ((me = create_object()) == NULL) return NO;    me->preemptive = (HTProtocol_preemptive(protocol) || HTRequest_preemptive(request));#if 0    me->priority = HTRequest_priority(request);#endif    HTNet_setEventPriority(me, HTRequest_priority(request));    me->protocol = protocol;    me->transport = tp;    me->request = request;    HTRequest_setNet(request, me);    /* Increase the number of retrys for this download */    HTRequest_addRetry(request);    /*    ** Check if we can start the request, else put it into pending queue    ** If so then call the call back function associated with the anchor.    ** We use the INVSOC as we don't have a valid socket yet!    */    HTTRACE(CORE_TRACE, "Net Object.. starting request %p (retry=%d) with net object %p\n" _ 	        request _ HTRequest_retrys(request) _ me);    (*(cbf))(INVSOC, request);    return YES;}/***      Check whether we have any pending HTNet objects and if so**	then start the next one.**	Return YES if OK, else NO*/PRIVATE BOOL check_pending (HTNet * net){    HTTRACE(CORE_TRACE, "Net Object.. Check for pending Net objects\n");    if (net) {	/*	**  As we may have a socket available we check for whether	**  we can start any pending requests. We do this by asking for	**  pending Host objects. If none then use the current object	*/        HTHost_launchPending(net->host);        return YES;    }    return NO;}PRIVATE BOOL free_net (HTNet * net){    HTTRACE(CORE_TRACE, "Net Object.. Freeing object %p\n" _ net);    if (net) {        if (net == HTRequest_net(net->request)) HTRequest_setNet(net->request, NULL);        HT_FREE(net);	return YES;    }    return NO;}/***  Unregister the net object from the global list**  and see if we can start a new pending request.*/PRIVATE BOOL unregister_net (HTNet * net){    if (net && NetTable) {	HTList * list = NetTable[net->hash];	if (list) {	    HTList_removeObject(list, (void *) net);	    check_pending(net);	    HTNetCount--;	    return YES;	}    }    return NO;}/***	Clears the contents of the Net object so that we can use it again.*/PUBLIC BOOL HTNet_clear (HTNet * net){    if (net) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久国产一区二区三区四区小说 | 欧美日韩综合不卡| 91精品国产综合久久福利软件| 337p日本欧洲亚洲大胆色噜噜| 亚洲伦在线观看| 国产在线视频一区二区| 欧美伊人久久大香线蕉综合69| 久久久久久久久久久久久久久99| 一区二区三区免费网站| 国产成人精品影视| 日韩欧美区一区二| 日本欧美肥老太交大片| 色先锋久久av资源部| 国产女人18毛片水真多成人如厕 | 欧美日韩一区高清| 成人免费在线视频观看| 国产精品自在欧美一区| 欧美一级夜夜爽| 无吗不卡中文字幕| 色婷婷精品久久二区二区蜜臀av| 国产亚洲欧美一区在线观看| 久久av中文字幕片| 日韩视频免费观看高清完整版| 亚洲国产精品久久久久秋霞影院| 91麻豆国产福利精品| 国产精品久久99| 成人高清视频在线观看| 国产日韩av一区二区| 国产精品一区2区| 久久久久久免费毛片精品| 开心九九激情九九欧美日韩精美视频电影 | 日韩欧美国产wwwww| 亚洲一区二区三区四区中文字幕| 色婷婷综合久久久| 亚洲精品乱码久久久久久久久| 99久久久免费精品国产一区二区 | 久久久久久日产精品| 国产乱子伦视频一区二区三区 | 日本视频一区二区| 欧美电影在哪看比较好| 日本va欧美va精品发布| 欧美一级精品大片| 国产在线一区二区| 国产精品国产三级国产普通话蜜臀| 成人av网址在线观看| 亚洲欧美区自拍先锋| 在线亚洲人成电影网站色www| 一区二区三区中文字幕电影| 欧美日韩中文另类| 午夜精品免费在线| 欧美videossexotv100| 久久成人免费日本黄色| 中文字幕乱码亚洲精品一区| 色妹子一区二区| 日韩av在线发布| 久久一区二区视频| 91在线观看高清| 日韩精品一级中文字幕精品视频免费观看 | 欧美一区二区福利在线| 韩国av一区二区三区在线观看| 久久人人爽爽爽人久久久| av在线一区二区三区| 午夜国产精品影院在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 99这里只有精品| 日韩精品欧美精品| 中文成人综合网| 欧美日本不卡视频| 高清国产午夜精品久久久久久| 亚洲精品视频在线| 欧美成人video| 97aⅴ精品视频一二三区| 蜜臀av国产精品久久久久| 中文字幕 久热精品 视频在线| 欧美日韩一级视频| 成人永久aaa| 日本一不卡视频| 日韩美女精品在线| 欧美va在线播放| 欧美性受xxxx| 福利一区二区在线观看| 青青草原综合久久大伊人精品| 中文字幕综合网| 精品国产乱码久久久久久免费| 一本到不卡免费一区二区| 国内成+人亚洲+欧美+综合在线| 亚洲日穴在线视频| 久久精品网站免费观看| 日韩午夜激情视频| 欧美性猛交xxxx黑人交| 懂色av中文一区二区三区| 麻豆91在线看| 亚洲午夜激情av| 亚洲天堂福利av| 久久久国产一区二区三区四区小说| 欧美放荡的少妇| 91黄色在线观看| 99久久综合99久久综合网站| 久久99国产精品免费网站| 亚洲一区二区三区精品在线| 中文字幕制服丝袜成人av| 久久久久久久久岛国免费| 日韩三级免费观看| 欧美日韩国产免费| 色婷婷国产精品| 色综合久久久久综合体| 国产福利一区二区三区视频 | 国产69精品久久久久777| 国产在线视频一区二区| 国产一区福利在线| 精品一区二区三区蜜桃| 久久福利资源站| 精品亚洲国产成人av制服丝袜| 日本午夜一本久久久综合| 青青青爽久久午夜综合久久午夜| 首页欧美精品中文字幕| 日日夜夜精品视频免费| 丝袜亚洲另类丝袜在线| 男男视频亚洲欧美| 久久99精品国产麻豆婷婷| 国产精品一区二区在线观看不卡 | 在线播放日韩导航| 欧美日韩不卡在线| 欧美一级日韩一级| 欧美成人女星排行榜| 久久久99精品免费观看| 国产精品毛片久久久久久久| **性色生活片久久毛片| 亚洲一区中文日韩| 婷婷中文字幕综合| 麻豆精品视频在线观看| 国产一区二区三区不卡在线观看| 韩国三级在线一区| 99riav久久精品riav| 在线视频国内自拍亚洲视频| 911精品国产一区二区在线| 精品乱人伦小说| 国产亚洲欧洲一区高清在线观看| 欧美激情自拍偷拍| 亚洲一区自拍偷拍| 免费成人在线观看| 国模娜娜一区二区三区| 北条麻妃一区二区三区| 欧美日韩午夜在线视频| 日韩欧美成人激情| 国产精品电影一区二区| 亚洲一区二区三区中文字幕| 久久草av在线| 97久久精品人人做人人爽| 欧美一区欧美二区| 国产精品久久一级| 午夜激情久久久| 成人av在线资源网站| 欧美日韩精品综合在线| wwwwww.欧美系列| 亚洲日本电影在线| 久久国产乱子精品免费女| 成人av午夜电影| 日韩女优视频免费观看| 国产精品免费视频观看| 琪琪久久久久日韩精品| eeuss鲁片一区二区三区在线观看| 欧美日韩中文国产| 国产精品久久久久久久久晋中| 日韩精品成人一区二区三区| 99久久国产免费看| 久久午夜羞羞影院免费观看| 亚洲愉拍自拍另类高清精品| 国产精选一区二区三区| 欧美日本乱大交xxxxx| 亚洲女人的天堂| 国产精品一区二区在线观看网站| 欧美精品九九99久久| 综合久久久久综合| 韩国三级电影一区二区| 欧美一区二区三区男人的天堂| 亚洲欧美视频在线观看视频| 国产精品中文字幕欧美| 日韩久久久久久| 五月天一区二区三区| 在线亚洲人成电影网站色www| 中日韩免费视频中文字幕| 国产一区二区三区黄视频| 精品少妇一区二区三区日产乱码| 亚洲成人免费av| 欧美日韩在线亚洲一区蜜芽| 亚洲摸摸操操av| 成人激情动漫在线观看| 国产日韩欧美在线一区| 国产在线不卡一区| 欧美一级电影网站| 污片在线观看一区二区| 91在线观看地址| 国产高清亚洲一区| 亚洲bt欧美bt精品777| 国产乱色国产精品免费视频| 久久精品视频一区二区三区| 日本不卡视频在线观看| 精品国产乱码久久久久久浪潮| 轻轻草成人在线|