亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
中文字幕在线观看一区二区| 国产老肥熟一区二区三区| 国产伦精品一区二区三区视频青涩 | 欧美三级电影网站| 久久青草欧美一区二区三区| 亚洲电影欧美电影有声小说| 丁香啪啪综合成人亚洲小说| 精品国产人成亚洲区| 亚洲国产中文字幕| 日本道色综合久久| 国产精品青草久久| 国内精品久久久久影院一蜜桃| 欧美视频一区二区三区四区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 精品在线亚洲视频| 91精品国产美女浴室洗澡无遮挡| 一区二区三区四区视频精品免费 | 在线免费av一区| 国产精品水嫩水嫩| 国产精品77777竹菊影视小说| 欧美一区日韩一区| 日韩va亚洲va欧美va久久| 欧美亚洲禁片免费| 亚洲成人三级小说| 欧美日韩精品专区| 偷窥少妇高潮呻吟av久久免费| 色婷婷狠狠综合| 一区二区三区蜜桃| 一本到一区二区三区| 日韩伦理免费电影| 色久综合一二码| 一区二区三区欧美日韩| 欧美在线不卡视频| 亚洲电影一区二区| 欧美一区二区大片| 极品瑜伽女神91| 亚洲国产高清不卡| 91麻豆免费看片| 亚洲蜜臀av乱码久久精品蜜桃| 色噜噜狠狠成人中文综合| 亚洲狠狠丁香婷婷综合久久久| 99国产精品视频免费观看| 一区二区三区四区在线播放| 欧美视频一区二区三区四区 | 亚洲另类春色校园小说| 在线免费观看成人短视频| 日韩精品一二区| 欧美va日韩va| 丰满少妇在线播放bd日韩电影| 国产精品免费av| 欧美偷拍一区二区| 人禽交欧美网站| 欧美高清在线视频| 欧美性色综合网| 久久精品噜噜噜成人av农村| 久久精品欧美一区二区三区不卡 | 亚洲综合在线视频| 51精品久久久久久久蜜臀| 国产中文字幕精品| 亚洲女同ⅹxx女同tv| 欧美一区二区三区男人的天堂| 国产传媒久久文化传媒| 亚洲精品网站在线观看| 精品久久五月天| 色8久久人人97超碰香蕉987| 蜜臀精品一区二区三区在线观看| 国产精品你懂的在线| 欧美精品乱人伦久久久久久| 成人三级在线视频| 日韩精品五月天| 国产精品丝袜久久久久久app| 欧美精品在线视频| 成人午夜私人影院| 99久久精品国产一区二区三区| 夜夜嗨av一区二区三区四季av | 欧美亚洲高清一区二区三区不卡| 久久99精品国产.久久久久久| 亚洲女厕所小便bbb| 久久免费视频色| 欧美日韩精品高清| 99精品视频一区二区三区| 韩国一区二区视频| 日本va欧美va精品| 伊人夜夜躁av伊人久久| 九九精品一区二区| 亚洲男同性恋视频| 欧美国产丝袜视频| 日韩女同互慰一区二区| 欧美综合久久久| www.色精品| 国产精品一区一区| 麻豆国产91在线播放| 亚洲成av人片在线观看| 亚洲欧美另类图片小说| 国产精品视频麻豆| 日本一区二区综合亚洲| 精品国产一区二区三区久久久蜜月 | 成人午夜电影小说| 精品亚洲欧美一区| 美女网站色91| 日韩不卡手机在线v区| 五月婷婷激情综合网| 亚洲一区二区三区自拍| 亚洲美女偷拍久久| 亚洲免费伊人电影| 亚洲欧美色一区| 亚洲欧美色图小说| 亚洲六月丁香色婷婷综合久久 | 色拍拍在线精品视频8848| 成人午夜私人影院| av一区二区三区四区| av福利精品导航| 97精品国产97久久久久久久久久久久| 国产成人亚洲综合a∨猫咪| 精品一区二区精品| 国产成人在线视频免费播放| 国产一区二区电影| 风间由美一区二区av101| 高清在线观看日韩| 99久久综合国产精品| 一本大道久久a久久精品综合| 色综合久久九月婷婷色综合| 一本到三区不卡视频| 欧美色图激情小说| 欧美丰满一区二区免费视频| 日韩久久久久久| 久久久久久久久久电影| 1000精品久久久久久久久| 亚洲午夜av在线| 蜜臀99久久精品久久久久久软件| 国产在线不卡一区| 99久久国产综合精品色伊| 欧美在线播放高清精品| 日韩欧美国产三级| 欧美国产精品中文字幕| 亚洲一区免费在线观看| 三级在线观看一区二区| 国产精品资源在线观看| 一本一道久久a久久精品| 欧美日韩一本到| 精品国产91洋老外米糕| 亚洲三级在线观看| 婷婷开心激情综合| 国产91精品久久久久久久网曝门| 一本久久精品一区二区| 日韩欧美亚洲国产精品字幕久久久| 久久久久久久久久久久久女国产乱 | 国产日韩精品一区二区三区在线| 亚洲精品网站在线观看| 美腿丝袜在线亚洲一区| 成人国产一区二区三区精品| 欧美精品久久99久久在免费线| 久久久久久久综合日本| 亚洲国产精品尤物yw在线观看| 国产精品一区二区91| 欧美系列在线观看| 亚洲国产精品黑人久久久| 性感美女极品91精品| 成人av免费观看| 日韩视频一区二区三区 | 国产精品视频免费看| 日本大胆欧美人术艺术动态| 成人动漫视频在线| 欧美一区二区女人| 亚洲欧美影音先锋| 激情深爱一区二区| 欧美日韩国产不卡| 亚洲视频香蕉人妖| 国产成人一区在线| 精品va天堂亚洲国产| 亚洲午夜在线电影| 色综合久久久久综合体桃花网| 国产午夜精品美女毛片视频| 日本不卡视频在线| 欧美网站大全在线观看| 亚洲欧美一区二区久久| www.66久久| 中文字幕av一区二区三区| 极品少妇xxxx偷拍精品少妇| 91.xcao| 一二三区精品福利视频| av色综合久久天堂av综合| 亚洲国产精品激情在线观看| 韩国欧美国产1区| 精品三级av在线| 奇米777欧美一区二区| 欧美日韩一级片网站| 亚洲成人7777| 欧美精品v日韩精品v韩国精品v| 亚洲综合在线视频| 在线精品视频免费观看| 艳妇臀荡乳欲伦亚洲一区| 日本精品视频一区二区| 亚洲精品高清视频在线观看| 99精品视频中文字幕| 亚洲日本免费电影| 色狠狠综合天天综合综合| 亚洲精品中文字幕乱码三区| 在线一区二区三区| 亚洲一区二区3|