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

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

?? htmime.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*								       HTMIME.c**	MIME MESSAGE PARSE****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTMIME.c,v 2.101 2000/12/18 17:00:56 kahan Exp $****	This is RFC 1341-specific code.**	The input stream pushed into this parser is assumed to be**	stripped on CRs, ie lines end with LF, not CR LF.**	(It is easy to change this except for the body part where**	conversion can be slow.)**** History:**	   Feb 92	Written Tim Berners-Lee, CERN**	 8 Jul 94  FM	Insulate free() from _free structure element.**	14 Mar 95  HFN	Now using response for storing data. No more `\n',**			static buffers etc.*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTReqMan.h"#include "HTNetMan.h"#include "HTHeader.h"#include "HTWWWStr.h"#ifndef NO_CACHE#include "HTTee.h"#include "HTConLen.h"#include "HTMerge.h"#include "WWWCache.h"#endif#include "HTMIME.h"					 /* Implemented here */typedef enum _HTMIMEMode {    HT_MIME_HEADER	= 0x1,    HT_MIME_FOOTER	= 0x2,    HT_MIME_PARTIAL	= 0x4,    HT_MIME_CONT	= 0x8,    HT_MIME_UPGRADE	= 0x10} HTMIMEMode;struct _HTStream {    const HTStreamClass *	isa;    HTRequest *			request;    HTResponse *		response;    HTNet *			net;    HTStream *			target;    HTConverter *		save_stream;    HTFormat			target_format;    HTChunk *			token;    HTChunk *			value;    int				hash;    HTEOLState			EOLstate;    HTMIMEMode			mode;    BOOL			transparent;    BOOL			haveToken;    BOOL			hasBody;};PRIVATE HTConverter * LocalSaveStream = NULL; /* Where to save unknown stuff *//* ------------------------------------------------------------------------- */PRIVATE int pumpData (HTStream * me){    HTRequest * request = me->request;    HTResponse * response = me->response;    HTFormat format = HTResponse_format(response);    HTList * te = HTResponse_transfer(response);    HTList * ce = HTResponse_encoding(response);    long length = HTResponse_length(response);    HTStream * BlackHole = HTBlackHole();    BOOL savestream = NO;    me->transparent = YES;		  /* Pump rest of data right through */    /*    **  Cache the metainformation in the anchor object by copying    **  it from the response object. This we do regardless if    **  we have a persistent cache or not as the memory cache will    **  use it as well. If we are updating a cache entry using    **  byte ranges then we already have the metainformation and    **  hence we can ignore the new one as it'd better be the same.    */    if (!(me->mode & HT_MIME_PARTIAL) &&	HTResponse_isCachable(me->response) != HT_NO_CACHE)	HTAnchor_update(HTRequest_anchor(request), me->response);    /*    **  If we asked only to read the header or footer or we used a HEAD    **  method then we stop here as we don't expect any body part.    */    if (me->mode & (HT_MIME_HEADER | HT_MIME_FOOTER) ||	HTRequest_method(request) == METHOD_HEAD) {        HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE);        if (cbf) (*cbf)(request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL);        return HT_LOADED;    }    /*    **  If we are paring a 1xx response then return HT_CONTINUE    */    if (me->mode & HT_MIME_CONT)	return HT_CONTINUE;    /*    **  If we get a 101 Protocol Switch then we are done here    **  but not done with the response (which we don't know    **  how to go about parsing    */    if (me->mode & HT_MIME_UPGRADE) {	me->hasBody = YES;	return HT_OK;    }    /*    **  If there is no content-length, no transfer encoding and no    **  content type then we assume that there is no body part in    **  the message and we can return HT_LOADED    */    {	HTHost * host = HTNet_host(me->net);	if (length<0 && te==NULL &&	    HTHost_isPersistent(host) && !HTHost_closeNotification(host)) {	    if (format != WWW_UNKNOWN) {		HTTRACE(STREAM_TRACE, "MIME Parser. BAD - there seems to be a body but no length. This must be an HTTP/1.0 server pretending that it is HTTP/1.1\n");		HTHost_setCloseNotification(host, YES);	    } else {                HTAlertCallback * cbf = HTAlert_find(HT_PROG_DONE);                if (cbf) (*cbf)(request, HT_PROG_DONE, HT_MSG_NULL, NULL, NULL, NULL);		HTTRACE(STREAM_TRACE, "MIME Parser. No body in this message\n");		return HT_LOADED;	    }	}    }    /*    **  Deal with the body    */    me->hasBody = YES;    /*    **  Handle any Content Type    */    if (!(me->mode & HT_MIME_PARTIAL) &&	(format != WWW_UNKNOWN || length > 0 || te)) {	HTStream * target;	HTTRACE(STREAM_TRACE, "Building.... C-T stack from %s to %s\n" _ 				  HTAtom_name(format) _ 				  HTAtom_name(me->target_format));	if ((target = HTStreamStack(format, me->target_format,				    me->target, request, YES))==BlackHole) {	    if (!savestream) {                if (me->target) (*me->target->isa->abort)(me->target, NULL);                me->target = me->save_stream(request, NULL,					     format, me->target_format, me->target);		savestream = YES;	    }	} else	    me->target = target;    }    /*    **  Handle any Content Encodings    */    HTTRACE(STREAM_TRACE, "Building.... Content-Decoding stack\n");    if (ce) {	HTStream * target = HTContentDecodingStack(ce, me->target, request, NULL);	if (target == BlackHole) {	    if (!savestream) {		if (me->target) (*me->target->isa->abort)(me->target, NULL);                me->target = me->save_stream(request, NULL,					     format, me->target_format, me->target);		savestream = YES;	    }	} else	    me->target = target;    }    /*    **  Can we cache the data object? If so then create a T stream and hook it     **  into the stream pipe. We do it before the transfer decoding so that we    **  don't have to deal with that when we retrieve the object from cache.    **  If we are appending to a cache entry then use a different stream than    **  if creating a new entry.    */#ifndef NO_CACHE    if (HTCacheMode_enabled()) {	if (me->mode & HT_MIME_PARTIAL) {	    HTStream * append = HTStreamStack(WWW_CACHE_APPEND,					      me->target_format,					      me->target, request, NO);	    if (append) me->target = HTTee(me->target, append, NULL);#if 0	    /* @@ JK: change */	    if (append) me->target = append;#endif	} else if (HTResponse_isCachable(me->response) == HT_CACHE_ALL) {	    HTStream * cache = HTStreamStack(WWW_CACHE, me->target_format,					     me->target, request, NO);	    if (cache) me->target = HTTee(me->target, cache, NULL);	}    }#endif        /*    **  Handle any Transfer Encodings    */    HTTRACE(STREAM_TRACE, "Building.... Transfer-Decoding stack\n");    if (te) {	HTStream * target = HTTransferDecodingStack(te, me->target, request, NULL);	if (target == BlackHole) {	    if (!savestream) {		if (me->target) (*me->target->isa->abort)(me->target, NULL);                me->target = me->save_stream(request, NULL,					     format, me->target_format, me->target);		savestream = YES;	    }	} else	    me->target = target;    }    /*    ** If we for some reason couldn't find a target stream    */    if (!me->target) me->target = HTBlackHole();    return HT_OK;}/* _dispatchParsers * call request's MIME header parser. Use global parser if no  * appropriate one is found for request.*/PRIVATE int _dispatchParsers (HTRequest * req, char * token, char * value){    int status;    BOOL found = NO;    BOOL local = NO;    HTMIMEParseSet * parseSet;    /* In case we get an empty header consisting of a CRLF, we fall thru */    HTTRACE(STREAM_TRACE, "MIME header. %s: %s\n" _ 			      token ? token : "<null>" _ 			      value ? value : "<null>");    if (!token) return HT_OK;			    /* Ignore noop token */    /*    ** Search the local set of MIME parsers    */    if ((parseSet = HTRequest_MIMEParseSet(req, &local)) != NULL) {        status = HTMIMEParseSet_dispatch(parseSet, req, 					 token, value, &found);	if (found) return status;    }    /*    ** Search the global set of MIME parsers    */    if (local==NO && (parseSet = HTHeader_MIMEParseSet()) != NULL) {	status = HTMIMEParseSet_dispatch(parseSet, req, 					 token, value, &found);	if (found) return status;    }    return HT_OK;}/* _stream2dispatchParsers - extracts the arguments from a * MIME stream before calling the generic _dispatchParser * function. */PRIVATE int _stream2dispatchParsers (HTStream * me){    char * token = HTChunk_data(me->token);    char * value = HTChunk_data(me->value);    /* In case we get an empty header consisting of a CRLF, we fall thru */    HTTRACE(STREAM_TRACE, "MIME header. %s: %s\n" _ 			      token ? token : "<null>" _ 			      value ? value : "<null>");    if (!token) return HT_OK;			    /* Ignore noop token */    /*    ** Remember the original header    */    HTResponse_addHeader(me->response, token, value);    /* call the parsers to set the headers */    return (_dispatchParsers (me->request, token, value));}/***	Header is terminated by CRCR, LFLF, CRLFLF, CRLFCRLF**	Folding is either of CF LWS, LF LWS, CRLF LWS*/PRIVATE int HTMIME_put_block (HTStream * me, const char * b, int l){    const char * start = b;    const char * end = start;    const char * value = HTChunk_size(me->value) > 0 ? b : NULL;    int length = l;    int status;    while (!me->transparent) {	if (me->EOLstate == EOL_FCR) {	    if (*b == CR)				    /* End of header */	        me->EOLstate = EOL_END;	    else if (*b == LF)			   	     /* CRLF */		me->EOLstate = EOL_FLF;	    else if (isspace((int) *b))			   /* Folding: CR SP */	        me->EOLstate = EOL_FOLD;	    else						 /* New line */	        me->EOLstate = EOL_LINE;	} else if (me->EOLstate == EOL_FLF) {	    if (*b == CR)				/* LF CR or CR LF CR */		me->EOLstate = EOL_SCR;	    else if (*b == LF)				    /* End of header */	        me->EOLstate = EOL_END;	    else if (isspace((int) *b))	       /* Folding: LF SP or CR LF SP */		me->EOLstate = EOL_FOLD;	    else						/* New line */		me->EOLstate = EOL_LINE;	} else if (me->EOLstate == EOL_SCR) {	    if (*b==CR || *b==LF)			    /* End of header */	        me->EOLstate = EOL_END;	    else if (isspace((int) *b))	 /* Folding: LF CR SP or CR LF CR SP */		me->EOLstate = EOL_FOLD;	    else						/* New line */		me->EOLstate = EOL_LINE;	} else if (*b == CR)	    me->EOLstate = EOL_FCR;	else if (*b == LF)	    me->EOLstate = EOL_FLF;			       /* Line found */	else {	    if (!me->haveToken) {	        if (*b == ':' || isspace((int) *b)) {		    HTChunk_putb(me->token, start, end-start);		    HTChunk_putc(me->token, '\0');		    me->haveToken = YES;		} else {		    unsigned char ch = *(unsigned char *) b;		    ch = TOLOWER(ch);		    me->hash = (me->hash * 3 + ch) % MIME_HASH_SIZE;		}	    } else if (value == NULL && *b != ':' && !isspace((int) *b))	        value = b;	    end++;	}	switch (me->EOLstate) {	    case EOL_LINE:	    case EOL_END:	    {		int ret = HT_ERROR;		HTChunk_putb(me->value, value, end-value);		HTChunk_putc(me->value, '\0');		ret =  _stream2dispatchParsers(me);		HTNet_addBytesRead(me->net, b-start);		start=b, end=b;		if (me->EOLstate == EOL_END) {		/* EOL_END */		    if (ret == HT_OK) {			b++, l--;			ret = pumpData(me);			HTNet_addBytesRead(me->net, 1);			if (me->mode & (HT_MIME_FOOTER | HT_MIME_CONT)) {			    HTHost_setConsumed(HTNet_host(me->net), length - l);			    return ret;                        } else {                            HTNet_setHeaderBytesRead(me->net, HTNet_bytesRead(me->net));                        }		    }	        } else {				/* EOL_LINE */		    HTChunk_truncate(me->token,0);		    HTChunk_truncate(me->value,0);		    me->haveToken = NO;		    me->hash = 0;		    value = NULL;		}		me->EOLstate = EOL_BEGIN;		if (ret != HT_OK && ret != HT_LOADED) return ret;		break;	    }	    case EOL_FOLD:		me->EOLstate = EOL_BEGIN;	        if (!me->haveToken) {		    HTChunk_putb(me->token, start, end-start);		    HTChunk_putc(me->token, '\0');		    me->haveToken = YES;	        } else if (value) {		    HTChunk_putb(me->value, value, end-value);		    HTChunk_putc(me->value, ' ');		}		start=b, end=b;		break;	    default: 	        b++, l--;	        if (!l) {		    BOOL stop = NO;		    if (!me->haveToken) {			/* If empty header then prepare to stop */			if (end-start)			    HTChunk_putb(me->token, start, end-start);			else			    stop = YES;		    } else if (value)		        HTChunk_putb(me->value, value, end-value);		    HTHost_setConsumed(HTNet_host(me->net), length - l);		    return stop ? pumpData(me) : HT_OK;		}	}    }    if (length != l) HTHost_setConsumed(HTNet_host(me->net), length - l);    /* 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人艳星乳罩| 国产精品久久久久一区| 国产欧美视频一区二区三区| 亚洲丝袜自拍清纯另类| 青娱乐精品在线视频| 99精品欧美一区二区三区小说| 欧美片网站yy| 国产精品毛片a∨一区二区三区| 这里是久久伊人| 亚洲人成小说网站色在线 | 亚洲一卡二卡三卡四卡| 精品无人区卡一卡二卡三乱码免费卡 | 国产欧美日产一区| 爽好久久久欧美精品| 91蝌蚪国产九色| 国产免费观看久久| 美女尤物国产一区| 欧美高清一级片在线| 亚洲在线视频网站| 色综合中文字幕国产| 久久久久国产精品厨房| 美女爽到高潮91| 日韩一卡二卡三卡四卡| 午夜av区久久| 欧美精品v国产精品v日韩精品| 日韩一级大片在线| 日日欢夜夜爽一区| 在线视频你懂得一区| 亚洲精品亚洲人成人网| 一本色道久久综合亚洲91| 亚洲三级电影网站| 99精品视频一区二区三区| 中文av一区二区| 91麻豆精品国产| 日韩高清欧美激情| 欧美一三区三区四区免费在线看 | 欧美日本精品一区二区三区| 欧美高清在线一区| 国产aⅴ精品一区二区三区色成熟| av毛片久久久久**hd| 国产精品久久久久久福利一牛影视 | 99久久久无码国产精品| 国产精品美女久久久久av爽李琼 | 久久综合九色综合欧美就去吻| 国产视频一区二区三区在线观看| 国产精品福利电影一区二区三区四区 | 91原创在线视频| 亚洲男女毛片无遮挡| 欧美天天综合网| 亚洲线精品一区二区三区八戒| 国产在线麻豆精品观看| 日本一区二区免费在线| 91免费精品国自产拍在线不卡| 91精品国产入口| 国产在线视频精品一区| 国产日产亚洲精品系列| 97久久超碰国产精品| 亚洲成人综合在线| 国产偷国产偷亚洲高清人白洁| 日韩av高清在线观看| 久久免费视频色| 成人av集中营| 午夜精品久久久久久久| 久久久久久久久久久久久夜| 99国产精品一区| 青青草视频一区| 亚洲手机成人高清视频| 日韩欧美高清dvd碟片| 国产精品一区免费在线观看| 亚洲精品国产品国语在线app| 国产精品99久久不卡二区| 亚洲欧美一区二区三区极速播放| 精品一区二区三区欧美| 国产精品免费视频观看| 欧美一区二区在线看| 风流少妇一区二区| 美女视频第一区二区三区免费观看网站| 99精品1区2区| 国产一区二区成人久久免费影院| 欧美精品少妇一区二区三区| 国产91丝袜在线播放0| 亚洲国产aⅴ成人精品无吗| 精品国产免费视频| 欧美三级一区二区| 高清免费成人av| 老司机精品视频线观看86| 一区二区三区欧美视频| 中文字幕va一区二区三区| 欧美一级欧美一级在线播放| 色综合久久综合网97色综合 | 日本女优在线视频一区二区| 国产精品对白交换视频 | 亚洲欧美中日韩| 久久久精品黄色| 欧美日韩国产综合视频在线观看 | 91精品国产一区二区| 在线欧美日韩国产| 成人午夜电影久久影院| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲尤物视频在线| 1024国产精品| 国产精品久久久久久久久免费丝袜| 北条麻妃国产九九精品视频| 日本免费在线视频不卡一不卡二| 欧美日韩国产免费| 91视频com| 色噜噜狠狠色综合中国 | 欧美—级在线免费片| 91麻豆精品国产91久久久资源速度| 日韩高清一区二区| 无吗不卡中文字幕| 日韩成人午夜电影| 亚洲第一激情av| 亚洲一区欧美一区| 亚洲成人av在线电影| 亚洲午夜免费视频| 亚洲va欧美va人人爽午夜| 亚洲成年人影院| 日韩高清一区二区| 韩国女主播成人在线| 国产高清一区日本| 成人av中文字幕| 91香蕉视频在线| 欧美性生活影院| 欧美精选一区二区| 精品粉嫩超白一线天av| 国产日韩综合av| 1024成人网色www| 亚洲成人一区二区在线观看| 日日夜夜免费精品| 国内精品伊人久久久久av影院| 最好看的中文字幕久久| 一区二区三区在线视频播放| 亚洲伦在线观看| 天天综合色天天综合色h| 丝袜国产日韩另类美女| 国产在线精品一区二区夜色| 国产成人h网站| 在线观看不卡一区| 91精品国产综合久久精品麻豆| 99久久99久久免费精品蜜臀| 日本乱人伦aⅴ精品| 制服丝袜激情欧洲亚洲| 久久一夜天堂av一区二区三区| 91精品91久久久中77777| 欧美日韩国产美| 日本一区二区三区久久久久久久久不 | 欧美日韩久久久一区| 777精品伊人久久久久大香线蕉| 99在线视频精品| 欧洲人成人精品| 精品sm在线观看| 一区二区三区 在线观看视频| 国产午夜精品一区二区三区四区| 欧美日韩成人综合天天影院 | 国产成人午夜精品5599| av在线播放一区二区三区| 欧美日韩三级在线| 国产欧美一区二区精品性色超碰| 日韩一区二区精品葵司在线| 国产精品色哟哟网站| 日韩专区中文字幕一区二区| 国产成人综合视频| 欧美精品久久99久久在免费线| 欧美性受极品xxxx喷水| 久久蜜桃av一区二区天堂| 亚洲成av人片在线观看| 成人av网址在线| 久久精品一区蜜桃臀影院| 亚洲一区日韩精品中文字幕| 成人性生交大片免费看中文| 91精品蜜臀在线一区尤物| 亚洲男女一区二区三区| 国产成人在线电影| 欧美大片一区二区| 天天色天天操综合| 欧洲亚洲精品在线| 亚洲视频香蕉人妖| 国产精品一区二区在线观看不卡| 高清国产午夜精品久久久久久| 国产成人在线看| 久久久久久久久伊人| 日本一不卡视频| 欧美亚洲国产一区二区三区 | 国产精品女同互慰在线看| 美女在线视频一区| 在线观看精品一区| 亚洲色图视频网站| 99久久国产综合色|国产精品| 一本久久精品一区二区| 中文字幕一区二区三区视频| 国产成人免费9x9x人网站视频| 国产不卡视频在线播放| 欧美精品一区二区在线观看| 免费观看在线色综合| 欧美一级夜夜爽| 免费日韩伦理电影| 日韩三级精品电影久久久| 人人超碰91尤物精品国产| 69av一区二区三区|