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

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

?? 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) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久亚洲综合网| 成人深夜在线观看| 1000部国产精品成人观看| 久久影视一区二区| 精品国产凹凸成av人导航| 5566中文字幕一区二区电影| 欧美日韩黄色一区二区| 欧美视频在线观看一区二区| 色悠悠久久综合| 欧美片网站yy| 亚洲精品一线二线三线| 欧美成人一区二区三区片免费| 欧美mv日韩mv| 亚洲国产精品成人综合色在线婷婷 | 依依成人精品视频| 亚洲小说春色综合另类电影| 亚洲h在线观看| 看电影不卡的网站| 成人黄色国产精品网站大全在线免费观看 | 亚洲欧美激情小说另类| 亚洲激情图片一区| 蜜桃久久久久久久| 国产不卡高清在线观看视频| 成人va在线观看| 欧美人妖巨大在线| www激情久久| 一区二区三区免费网站| 日韩电影在线一区| 成人开心网精品视频| 一本一道久久a久久精品综合蜜臀| 欧美日韩亚洲丝袜制服| 久久亚洲一区二区三区明星换脸| ...av二区三区久久精品| 午夜成人在线视频| thepron国产精品| 日韩区在线观看| 一区二区三区免费看视频| 经典三级在线一区| 欧美日韩中文另类| 国产精品视频看| 九九精品一区二区| 欧美日韩五月天| 国产精品国产三级国产专播品爱网| 亚洲一区二区五区| 97久久超碰国产精品电影| 欧美日韩三级在线| 亚洲欧美日韩小说| 成人sese在线| 久久久av毛片精品| 蜜臀a∨国产成人精品| 99re6这里只有精品视频在线观看| 精品美女一区二区| 日韩电影在线免费观看| 色综合中文字幕| 欧美激情中文不卡| 国产乱子伦视频一区二区三区| 欧美色图一区二区三区| 国产精品丝袜91| 国产精品1024| 欧美精品一区二区三区视频 | 久久精品av麻豆的观看方式| 色综合欧美在线视频区| 欧美高清一级片在线观看| 久久aⅴ国产欧美74aaa| 91精品国产乱| 日韩不卡在线观看日韩不卡视频| 色欧美片视频在线观看| 国产精品全国免费观看高清| 久久se精品一区精品二区| 欧美一区二区三区爱爱| 视频在线观看一区二区三区| 色天使久久综合网天天| 亚洲免费观看高清完整版在线| aaa亚洲精品一二三区| 欧美国产日本视频| 9l国产精品久久久久麻豆| 国产欧美一区二区精品久导航| 国产乱码精品一区二区三区忘忧草| 日韩欧美一级精品久久| 久久99国产精品免费网站| 日韩欧美在线影院| 国产在线精品一区二区三区不卡| 欧美成人国产一区二区| 国产一区二区免费看| 国产农村妇女毛片精品久久麻豆| 成人av在线网| 一区二区三区高清| 91精品国产入口在线| 青青青伊人色综合久久| 26uuu亚洲| 99re在线视频这里只有精品| 国产精品日产欧美久久久久| 99视频有精品| 日韩中文字幕1| 亚洲精品一线二线三线无人区| 国产精品一区二区在线播放| 欧美国产欧美亚州国产日韩mv天天看完整 | 毛片一区二区三区| 国产人妖乱国产精品人妖| 99久久精品99国产精品| 亚洲 欧美综合在线网络| 日韩网站在线看片你懂的| 高清在线成人网| 亚洲国产精品视频| 久久精品一级爱片| 欧美丝袜丝交足nylons图片| 精品一区二区三区在线播放视频| 国产精品毛片大码女人| 欧美日韩一区三区四区| 国产一区二区电影| 性感美女极品91精品| 精品国产91亚洲一区二区三区婷婷 | 琪琪久久久久日韩精品| 久久久精品人体av艺术| 日本乱码高清不卡字幕| 精品亚洲国内自在自线福利| 亚洲同性同志一二三专区| 91精品国产综合久久久久久| 国产成人自拍网| 日韩精品亚洲专区| 综合色天天鬼久久鬼色| 51精品久久久久久久蜜臀| 国产成a人亚洲精品| 爽好久久久欧美精品| 国产精品国产三级国产aⅴ入口 | 国产美女久久久久| 首页国产欧美久久| 一二三四区精品视频| 精品欧美一区二区三区精品久久| 在线一区二区三区四区五区| 久久99热国产| 奇米777欧美一区二区| 亚洲精品视频免费观看| 国产日本欧美一区二区| 精品久久国产字幕高潮| 欧美日本不卡视频| 欧美撒尿777hd撒尿| 91在线视频观看| eeuss鲁一区二区三区| 国产剧情一区二区| 久久99精品国产.久久久久久| 亚洲一区二区三区四区五区中文| 亚洲人成网站精品片在线观看 | 日韩理论在线观看| 国产精品久久久久久久久晋中| 精品国产网站在线观看| 欧美日韩国产三级| 欧美麻豆精品久久久久久| 色综合天天综合网天天狠天天| 丰满少妇久久久久久久| 国产一区二区视频在线播放| 美女视频黄免费的久久| 免费成人美女在线观看| 免费精品99久久国产综合精品| 五月激情综合婷婷| 亚州成人在线电影| 蜜桃视频第一区免费观看| 蜜臀久久久久久久| 国产制服丝袜一区| 高清在线不卡av| 91视频com| 欧美日韩一区二区电影| 欧美午夜精品电影| 91精品国产91久久综合桃花| 欧美日本在线一区| 亚洲精品一线二线三线无人区| 欧美精品一区二区三区久久久 | 丝袜脚交一区二区| 久久99九九99精品| 成人视屏免费看| 欧洲精品一区二区三区在线观看| 欧美中文字幕亚洲一区二区va在线 | 一卡二卡欧美日韩| 三级久久三级久久久| 久久99精品久久久久| 国产aⅴ综合色| 欧美在线不卡视频| 日韩午夜在线影院| 国产精品免费久久| 亚洲综合999| 国产乱码精品一区二区三| 成人av综合在线| 7777精品久久久大香线蕉| 精品久久久久99| 一个色妞综合视频在线观看| 日韩精品一级中文字幕精品视频免费观看 | 91精品国产麻豆国产自产在线| 久久品道一品道久久精品| 中文字幕一区二区日韩精品绯色| 亚洲一区二区三区激情| 久久精品理论片| 91在线视频网址| 精品剧情v国产在线观看在线| 国产精品女同一区二区三区| 午夜视频在线观看一区二区| 激情久久久久久久久久久久久久久久| 91网站在线播放| 国产午夜精品一区二区三区四区| 亚洲一区二区三区在线| 国产成人啪免费观看软件|