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

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

?? htnet.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*								     HTNet.c**	HTNet Class****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTNet.c,v 2.106 2000/07/04 15:26:25 kahan Exp $****	This is the implementation of the internal library multithreading**	functions. This includes an interrupt handler and a event loop.**	** History:**  	12 June 94	Written by Henrik Frystyk, frystyk@w3.org**      31 May  95      Charlie Brooks cbrooks@osf.org***//* Implemention dependent include files */#include "wwwsys.h"/* Library include files */#include "WWWUtil.h"#include "HTProt.h"#include "HTError.h"#include "HTAlert.h"#include "HTParse.h"#include "HTTrans.h"#include "HTHost.h"#include "HTReq.h"#include "HTEvent.h"#include "HTStream.h"#include "HTHstMan.h"#include "HTIOStream.h"#include "HTNetMan.h"					 /* Implemented here */#ifndef HT_MAX_SOCKETS#define HT_MAX_SOCKETS	25#endiftypedef struct _BeforeFilter {    HTNetBefore *	before;				  /* Filter function */    char *		tmplate;     /* URL template for when to call filter */    int			order;			 /* Relative execution order */    void *		param;				    /* Local context */} BeforeFilter;typedef struct _AfterFilter {    HTNetAfter *	after;				  /* Filter function */    char *		tmplate;     /* URL template for when to call filter */    int			order;			 /* Relative execution order */    void *		param;				    /* Local context */    int			status;	   /* Status of load for when to call filter */} AfterFilter;struct _HTStream {    const HTStreamClass *	isa;    /* ... */};struct _HTInputStream {    const HTInputStreamClass *	isa;    /* ... */};typedef struct _HTFilterEvent {    HTRequest *		request;    int			status;    HTTimer *		timer;} HTFilterEvent;PRIVATE HTList * HTBefore = NULL;	    /* List of global BEFORE filters */PRIVATE HTList * HTAfter = NULL;	     /* List of global AFTER filters */PRIVATE int MaxActive = HT_MAX_SOCKETS;  	      /* Max active requests */PRIVATE int Active = 0;				      /* Counts open sockets */PRIVATE int Persistent = 0;		        /* Counts persistent sockets */PRIVATE HTList ** NetTable = NULL;		      /* List of net objects */PRIVATE int HTNetCount = 0;		       /* Counting elements in table *//* ------------------------------------------------------------------------- *//*		   GENERIC BEFORE and AFTER filter Management		     *//* ------------------------------------------------------------------------- */PRIVATE int HTBeforeOrder (const void * a, const void * b){    return ((BeforeFilter *) b)->order - ((BeforeFilter *) a)->order;}PRIVATE int HTAfterOrder (const void * a, const void * b){    return ((AfterFilter *) b)->order - ((AfterFilter *) a)->order;}PRIVATE int check_order (HTFilterOrder order){    return (order<HT_FILTER_FIRST) ? HT_FILTER_FIRST :	(order>HT_FILTER_LAST) ? HT_FILTER_LAST : order;}/***	Register a BEFORE filter in the list provided by the caller.**	Several filters can be registered in which case they are called**	with the filter ordering in mind.*/PUBLIC BOOL HTNetCall_addBefore (HTList * list, HTNetBefore * before,				 const char * tmplate, void * param, 				 HTFilterOrder order){    if (list && before) {	BeforeFilter * me;	if ((me = (BeforeFilter *) HT_CALLOC(1, sizeof(BeforeFilter)))==NULL)	    HT_OUTOFMEM("HTNetCall_addBefore");	me->before = before;	if (tmplate) StrAllocCopy(me->tmplate, tmplate);	me->order = check_order(order);	me->param = param;	HTTRACE(CORE_TRACE, "Net Before.. Add %p with order %d tmplate `%s\' context %p\n" _ 		    before _ me->order _ tmplate ? tmplate : "<null>" _ param);	return (HTList_addObject(list, me) &&		HTList_insertionSort(list, HTBeforeOrder));    }    return NO;}/***	Unregister all instances of a BEFORE filter from a list.*/PUBLIC BOOL HTNetCall_deleteBefore (HTList * list, HTNetBefore * before){    HTTRACE(CORE_TRACE, "Net Before.. Delete %p\n" _ before);    if (list && before) {	HTList * cur = list;	BeforeFilter * pres;	while ((pres = (BeforeFilter *) HTList_nextObject(cur))) {	    if (pres->before == before) {		HTList_removeObject(list, (void *) pres);		HT_FREE(pres->tmplate);		HT_FREE(pres);		cur = list;	    }	}    }    return NO;}/***	Deletes all BEFORE filters in list*/PUBLIC BOOL HTNetCall_deleteBeforeAll (HTList * list){    HTTRACE(CORE_TRACE, "Net Before. Delete All filters\n");    if (list) {	HTList * cur = list;	BeforeFilter * pres;	while ((pres = (BeforeFilter *) HTList_nextObject(cur))) {	    HT_FREE(pres->tmplate);	    HT_FREE(pres);	}	HTList_delete(list);	return YES;    }    return NO;}/***	Call all the BEFORE filters in the order specified at registration**	time. We also check for any template and whether it matches or not. **	If a filter returns other than HT_OK then stop and return immediately.**	Otherwise return what the last filter returns.*/PUBLIC int HTNetCall_executeBefore (HTList * list, HTRequest * request){    HTParentAnchor * anchor = HTRequest_anchor(request);    char * url = HTAnchor_physical(anchor);    char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor);    int ret = HT_OK;    int mode = 0;        if (list && request && addr) {	BeforeFilter * pres;		while ((pres = (BeforeFilter *) HTList_nextObject(list))) {	    if (!pres->tmplate ||		(pres->tmplate && HTStrMatch(pres->tmplate, addr))) {		HTTRACE(CORE_TRACE, "Net Before.. calling %p (request %p, context %p)\n" _ 					pres->before _ 					request _ pres->param);		ret = (*pres->before)(request, pres->param, mode);		if (ret != HT_OK) break;		/*		**  Update the address to match against if the filter changed		**  the physical address.		*/		if ((url = HTAnchor_physical(anchor))) addr = url;	    }	}    }    if (!url) HT_FREE(addr);    return ret;}/***	Register an AFTER filter in the list provided by the caller.**	Several filters can be registered in which case they are called**	with the filter ordering in mind.*/PUBLIC BOOL HTNetCall_addAfter (HTList * list, HTNetAfter * after,				const char * tmplate, void * param,				int status, HTFilterOrder order){    if (list && after) {	AfterFilter * me;	if ((me = (AfterFilter *) HT_CALLOC(1, sizeof(AfterFilter)))==NULL)	    HT_OUTOFMEM("HTNetCall_addAfter");	me->after = after;	if (tmplate) StrAllocCopy(me->tmplate, tmplate);	me->order = check_order(order);	me->param = param;	me->status = status;	HTTRACE(CORE_TRACE, "Net After... Add %p with order %d tmplate `%s\' code %d context %p\n" _ 		    after _ me->order _ tmplate ? tmplate : "<null>" _ status _ param);	return (HTList_addObject(list, me) &&		HTList_insertionSort(list, HTAfterOrder));    }    return NO;}/***	Unregister all instances of an AFTER filter from a list.*/PUBLIC BOOL HTNetCall_deleteAfter (HTList * list, HTNetAfter * after){    HTTRACE(CORE_TRACE, "Net After... Delete %p\n" _ after);    if (list && after) {	HTList * cur = list;	AfterFilter * pres;	while ((pres = (AfterFilter *) HTList_nextObject(cur))) {	    if (pres->after == after) {		HTList_removeObject(list, (void *) pres);		HT_FREE(pres->tmplate);		HT_FREE(pres);		cur = list;	    }	}    }    return NO;}/***	Unregister all filters registered for a given status.*/PUBLIC BOOL HTNetCall_deleteAfterStatus (HTList * list, int status){    HTTRACE(CORE_TRACE, "Net After... Delete all with status %d\n" _ status);    if (list) {	HTList * cur = list;	AfterFilter * pres;	while ((pres = (AfterFilter *) HTList_nextObject(cur))) {	    if (pres->status == status) {		HTList_removeObject(list, (void *) pres);		HT_FREE(pres->tmplate);		HT_FREE(pres);		cur = list;	    }	}	return YES;    }    return NO;}/***	Deletes all AFTER filters in list*/PUBLIC BOOL HTNetCall_deleteAfterAll (HTList * list){    HTTRACE(CORE_TRACE, "Net After. Delete All filters\n");    if (list) {	HTList * cur = list;	AfterFilter * pres;	while ((pres = (AfterFilter *) HTList_nextObject(cur))) {	    HT_FREE(pres->tmplate);	    HT_FREE(pres);	}	HTList_delete(list);	return YES;    }    return NO;}/***	Call all the AFTER filters in the order specified at registration**	time and if it has the right status code and it's not HT_IGNORE.**	We also check for any template and whether it matches or not.**	If a filter returns other than HT_OK then stop and return immediately.**	Otherwise return what the last filter returns.*/PUBLIC int HTNetCall_executeAfter (HTList * list, HTRequest * request,				   int status){    int ret = HT_OK;    if (status != HT_IGNORE) {	HTParentAnchor * anchor = HTRequest_anchor(request);	char * url = HTAnchor_physical(anchor);	char * addr = url ? url : HTAnchor_address((HTAnchor *) anchor);	HTResponse * response = HTRequest_response(request);	if (list && request && addr) {	    AfterFilter * pres;	    while ((pres = (AfterFilter *) HTList_nextObject(list))) {		if ((pres->status == status || pres->status == HT_ALL) &&		    (!pres->tmplate ||		     (pres->tmplate && HTStrMatch(pres->tmplate, addr)))) {		    HTTRACE(CORE_TRACE, "Net After... calling %p (request %p, response %p, status %d, context %p)\n" _ 				pres->after _ request _ response _ 				status _ pres->param);		    ret = (*pres->after)(request, response, pres->param, status);		    if (ret != HT_OK) break;		    /*		    **  Update the address to match against if the filter changed		    **  the physical address.		    */		    if ((url = HTAnchor_physical(anchor))) addr = url;		}	    }	}	if (!url) HT_FREE(addr);    }    return ret;}/* ------------------------------------------------------------------------- *//*		   GLOBAL BEFORE and AFTER filter Management		     *//* ------------------------------------------------------------------------- *//***	Global set of callback functions BEFORE the request is issued**	list can be NULL*/PUBLIC BOOL HTNet_setBefore (HTList *list){    HTBefore = list;    return YES;}PUBLIC HTList * HTNet_before (void){    return HTBefore;}PUBLIC BOOL HTNet_addBefore (HTNetBefore * before, const char * tmplate,			     void * param, HTFilterOrder order){    if (!HTBefore) HTBefore = HTList_new();    return HTNetCall_addBefore(HTBefore, before, tmplate, param, order);}PUBLIC BOOL HTNet_deleteBefore (HTNetBefore * cbf){    return HTNetCall_deleteBefore(HTBefore, cbf);}/***  Call both the local and the global BEFORE filters (if any)*/PUBLIC int HTNet_executeBeforeAll (HTRequest * request){    int ret;    BOOL override = NO;    HTList * befores;    if ((befores = HTRequest_before(request, &override))) {	if ((ret = HTNetCall_executeBefore(befores, request)) != HT_OK)	    return ret;    }    return override ? HT_OK : HTNetCall_executeBefore(HTBefore, request);}/***	Global set of callback functions AFTER the request is issued**	list can be NULL*/PUBLIC BOOL HTNet_setAfter (HTList *list){    HTAfter = list;    return YES;}PUBLIC HTList * HTNet_after (void){    return HTAfter;}PUBLIC BOOL HTNet_addAfter (HTNetAfter * after, const char * tmplate,			    void * param, int status, HTFilterOrder order){    if (!HTAfter) HTAfter = HTList_new();    return HTNetCall_addAfter(HTAfter, after, tmplate, param, status, order);}PUBLIC BOOL HTNet_deleteAfter (HTNetAfter * cbf){    return HTNetCall_deleteAfter(HTAfter, cbf);}PUBLIC BOOL HTNet_deleteAfterStatus (int status){    return HTNetCall_deleteAfterStatus(HTAfter, status);}/***  Call both the local and the global AFTER filters (if any)*/PUBLIC int HTNet_executeAfterAll (HTRequest * request, int status){    int ret;    BOOL override = NO;    HTList * afters;    if ((afters = HTRequest_after(request, &override))) {	if ((ret = HTNetCall_executeAfter(afters, request, status)) != HT_OK)	    return ret;    }    return override ? HT_OK : HTNetCall_executeAfter(HTAfter, request, status);}/* ------------------------------------------------------------------------- *//*			      Socket Management				     *//* ------------------------------------------------------------------------- */PUBLIC int HTNet_maxSocket (void){    return MaxActive;}PUBLIC BOOL HTNet_setMaxSocket (int newmax){    if (newmax > 0) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区色| 亚洲成人在线观看视频| 在线亚洲免费视频| 国内精品久久久久影院色| 亚洲激情综合网| 久久久久久久久久久电影| 欧美挠脚心视频网站| 99久久国产综合精品色伊| 日韩1区2区3区| 亚洲综合免费观看高清完整版| 欧美精品一区二区高清在线观看| 欧美性大战xxxxx久久久| 国产成人精品一区二| 蜜臀av亚洲一区中文字幕| 一区二区三区日本| 亚洲欧洲av另类| 国产日韩v精品一区二区| 日韩亚洲国产中文字幕欧美| 欧美日韩综合不卡| 色综合久久综合网| av亚洲产国偷v产偷v自拍| 精品一区二区三区日韩| 日本不卡视频一二三区| 亚洲丰满少妇videoshd| 亚洲一区二区av在线| 亚洲免费观看高清| 自拍偷拍欧美激情| 国产精品久久毛片av大全日韩| 久久精品一区四区| 26uuu成人网一区二区三区| 日韩欧美综合在线| 欧美一级电影网站| 日韩免费在线观看| 欧美大白屁股肥臀xxxxxx| 欧美二区在线观看| 欧美一区二区三区成人| 7777女厕盗摄久久久| 日韩一区二区麻豆国产| 欧美一区二区三区播放老司机| 在线观看91av| 欧美成人一级视频| 国产亚洲一区二区三区在线观看| 精品久久久久久最新网址| 欧美成人性战久久| 国产婷婷色一区二区三区| 国产欧美日本一区二区三区| 中文字幕欧美日韩一区| 亚洲三级在线观看| 亚欧色一区w666天堂| 视频一区二区不卡| 麻豆极品一区二区三区| 国产美女一区二区三区| www.欧美.com| 欧美亚洲愉拍一区二区| 欧美电影影音先锋| 久久综合色婷婷| 中文字幕在线不卡视频| 亚洲激情图片小说视频| 午夜精品国产更新| 精品一区二区在线播放| 成人免费高清视频| 91福利资源站| 精品国产亚洲在线| 国产精品国产三级国产aⅴ入口| 亚洲人亚洲人成电影网站色| 亚洲444eee在线观看| 奇米在线7777在线精品| 国产成人aaaa| 91成人在线精品| 日韩视频一区在线观看| 欧美国产精品一区二区| 亚洲国产欧美日韩另类综合 | 在线亚洲高清视频| 91精品国模一区二区三区| 久久人人爽爽爽人久久久| 国产精品久久久久三级| 午夜视频在线观看一区二区三区| 久久aⅴ国产欧美74aaa| 99精品视频一区二区三区| 欧美日韩免费一区二区三区| 精品国产乱码久久久久久蜜臀| 国产精品久久久久久久久久免费看| 亚洲青青青在线视频| 美日韩一级片在线观看| 成人av综合在线| 91.麻豆视频| 国产精品女主播av| 日本中文字幕一区二区视频| 成人av午夜影院| 欧美一区二区在线不卡| 自拍偷拍亚洲激情| 国产精品一品视频| 欧美肥胖老妇做爰| 中文字幕日韩欧美一区二区三区| 日本中文在线一区| 91蜜桃在线免费视频| 久久影院视频免费| 亚洲动漫第一页| 91丨porny丨国产| 久久人人爽人人爽| 免费黄网站欧美| 欧美性猛交xxxx黑人交 | 爽好久久久欧美精品| 99久精品国产| 久久网这里都是精品| 日韩二区在线观看| 欧美三级电影在线看| 国产精品视频在线看| 极品少妇一区二区| 欧美一级一区二区| 亚洲国产精品一区二区久久| av网站一区二区三区| 国产亚洲女人久久久久毛片| 日本不卡视频在线| 欧美一区二区三区在线电影| 亚洲图片一区二区| 色老综合老女人久久久| 中文字幕 久热精品 视频在线| 久久超碰97中文字幕| 91精品国产综合久久香蕉的特点 | 国产激情一区二区三区| 日韩欧美在线123| 天天av天天翘天天综合网色鬼国产| 色综合欧美在线视频区| 日韩一区日韩二区| 成人免费的视频| 中文字幕制服丝袜成人av| 豆国产96在线|亚洲| 久久精品欧美日韩精品| 免费成人在线视频观看| 欧美一区二区三区婷婷月色| 天堂久久久久va久久久久| 在线免费观看日本一区| 一区二区三区在线免费视频| 97久久精品人人做人人爽50路| 国产精品理论在线观看| 成人免费高清在线观看| 亚洲私人黄色宅男| 色拍拍在线精品视频8848| 亚洲男人的天堂在线aⅴ视频| av电影一区二区| 亚洲人成小说网站色在线| 91国模大尺度私拍在线视频| 性久久久久久久久久久久| 7777精品伊人久久久大香线蕉 | 国产精品中文字幕日韩精品| 久久老女人爱爱| 成人免费观看视频| 亚洲天堂精品在线观看| 欧美日韩一级黄| 蜜臀久久99精品久久久画质超高清| 欧美一区二区在线视频| 精品中文av资源站在线观看| 2019国产精品| 99久久精品情趣| 亚洲综合999| 日韩精品一区在线| 国产91丝袜在线18| 亚洲精品乱码久久久久久黑人 | 日韩视频免费观看高清完整版 | 亚洲va中文字幕| 欧美大片国产精品| 国产成人99久久亚洲综合精品| 亚洲色欲色欲www| 精品视频在线视频| 精品亚洲成a人| 专区另类欧美日韩| 日韩欧美一二三| av一区二区三区黑人| 天堂一区二区在线| 欧美国产精品劲爆| 欧美日韩成人综合天天影院| 国产综合久久久久久久久久久久| 国产精品理论片在线观看| 欧美电影在线免费观看| 国产91高潮流白浆在线麻豆| 亚洲综合男人的天堂| 久久日韩精品一区二区五区| 色综合久久99| 狠狠色丁香久久婷婷综合_中| 自拍偷自拍亚洲精品播放| 制服.丝袜.亚洲.另类.中文| 岛国一区二区在线观看| 天天色 色综合| 中文乱码免费一区二区| 91麻豆精品国产综合久久久久久 | 免费视频一区二区| 国产精品久久久久一区二区三区| 欧美日韩精品一区二区在线播放| 国产精品自产自拍| 天天做天天摸天天爽国产一区| 日本一区二区三区久久久久久久久不| 欧美日韩一区二区三区在线 | 蜜桃一区二区三区四区| 亚洲色图第一区| 国产无一区二区| 日韩欧美成人一区二区| 欧美专区日韩专区| www.成人在线| 国产福利91精品一区二区三区|