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

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

?? htnews.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*			NEWS ACCESS				HTNews.c**			===========**** History:**	26 Sep 90	Written TBL**	29 Nov 91	Downgraded to C, for portable implementation.**	16 Feb 94  AL	Added Lou Montulli's Lynx & LIST NEWSGROUPS diffs.**	 2 May 94  AL	Added HTUnEscape() to HTLoadNews(), and**			fixed a possible security hole when the URL contains**			a newline, that could cause multiple commands to be**			sent to an NNTP server.**	 8 Jul 94  FM	Insulate free() from _free structure element.**	30 Aug 95  FTLO Added POST functionality and updated state machine**	30 Aug 95  HFN	Cleaned up a whole lot and made a state machine*//* Library Include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "WWWStream.h"#include "WWWTrans.h"#include "HTReqMan.h"				/* @@@ */#include "HTNewsRq.h"#include "HTNewsLs.h"#include "HTNews.h"					       /* Implements *//* Macros and other defines */#ifndef NEWS_LIST_FILE#define NEWS_LIST_FILE		".www_news"	   /* Name of news list file */#endif#define MAX_NEWS_ARTICLES	0 	/* No default max number of articles */#define PUTBLOCK(b, l)	(*me->target->isa->put_block)	     (me->target, b, l)#define ABORT_TARGET    (*me->target->isa->abort)            (me->target, e)/* Local context structure used in the HTNet object */typedef enum _HTNewsState {    NEWS_ERROR		= -3,    NEWS_SUCCESS	= -2,    NEWS_NO_DATA	= -1,    NEWS_BEGIN		= 0,    NEWS_SEEK_CACHE,    NEWS_NEED_CONNECTION,    NEWS_NEED_GREETING,    NEWS_NEED_SWITCH,    NEWS_NEED_ARTICLE,#if HT_LISTGROUP    NEWS_NEED_LGRP,#endif    NEWS_NEED_LIST,    NEWS_NEED_GROUP,    NEWS_NEED_XOVER,    NEWS_NEED_HEAD,    NEWS_NEED_POST,    NEWS_NEED_BODY} HTNewsState;typedef struct _news_info {    HTChunk *		cmd;    int			repcode;    char *		reply;    HTNewsState         state;                    /* State of the connection */    HTFormat		format;    char *		name;		     /* Name of article or newsgroup */    BOOL		sent;			    /* Read or write command */    int                 first;            /* First article in the group list */    int                 last;              /* Last article in the group list */    int			total;		     /* Estimated number of articles */    int                 current;                 /* To count # of HEADS sent */    HTNet *		net;} news_info;/* This version of a stream is used for NEWS LIST conversion to HTML */struct _HTStream {    const HTStreamClass *	isa;    HTStream *			target;    HTRequest *			request;    news_info *			news;    HTEOLState			EOLstate;    BOOL			semi_trans;    BOOL			junk;    char 			buffer[MAX_NEWS_LINE+1];    int				buflen;    HTHost *			host;};struct _HTInputStream {    const HTInputStreamClass *	isa;};PRIVATE int MaxArt = MAX_NEWS_ARTICLES;/* ------------------------------------------------------------------------- *//*			       NEWS INPUT STREAM			     *//* ------------------------------------------------------------------------- *//*	ScanResponse**	------------**	Analyzes the response from the NNTP server.**	We only expect one line response codes.**	Returns HT_LOADED if OK, HT_ERROR if error*/PRIVATE int ScanResponse (HTStream * me){    news_info *news = me->news;    *(me->buffer+me->buflen) = '\0';    if (isdigit((int) *(me->buffer))) sscanf(me->buffer, "%d", &news->repcode);    me->buflen = 0;    news->reply = me->buffer+4;    HTTRACE(PROT_TRACE, "News Rx..... `%s\'\n" _ news->reply);    /* If 2xx code and we expect data then go into semi-transparent mode */    if (me->news->format && news->repcode/100 == 2) {	HTRequest *req = me->request;	me->target = HTStreamStack(me->news->format, req->output_format,				   req->output_stream, req, NO);	me->semi_trans = YES;	if (!me->target) return HT_ERROR;    } else if (news->repcode/100 == 4) {	HTRequest_addError(me->request, ERR_FATAL, NO, HTERR_NOT_FOUND,			   news->reply, strlen(news->reply), "ScanResponse");    }    return HT_LOADED;}/***	Searches for NNTP header line until buffer fills up or a CRLF or LF**	is found*/PRIVATE int HTNewsStatus_put_block (HTStream * me, const char * b, int l){    int status;    HTHost_setConsumed(me->host, l);    while (!me->semi_trans && l-- > 0) {	if (me->EOLstate == EOL_FCR) {	    if (*b == LF) {		if (me->junk) me->junk = NO;		me->EOLstate = EOL_BEGIN;		if ((status = ScanResponse(me)) != HT_LOADED) return status;	    }	} else if (*b == CR) {	    me->EOLstate = EOL_FCR;	} else if (*b == LF) {	    if (me->junk) me->junk = NO;	    me->EOLstate = EOL_BEGIN;	    if ((status = ScanResponse(me)) != HT_LOADED) return status;	} else {	    *(me->buffer+me->buflen++) = *b;	    if (me->buflen >= MAX_NEWS_LINE) {		HTTRACE(PROT_TRACE, "News Status. Line too long - chopped\n");		me->junk = YES;		if ((status = ScanResponse(me)) != HT_LOADED) return status;	    }	}	b++;    }	    /*    ** Now see if we have parts of the body to put down the stream pipe.    ** At this point we are looking for CRLF.CRLF. We are guaranteed a stream    */    if (l > 0) {	int rest = l;	const char *ptr = b;	while (rest-- > 0) {	    if (*ptr == CR) {		me->EOLstate = me->EOLstate==EOL_DOT ? EOL_SCR : EOL_FCR;	    } else if (*ptr == '.') {		me->EOLstate = me->EOLstate==EOL_FLF ? EOL_DOT : EOL_BEGIN;	    } else if (*ptr == LF) {		me->EOLstate = me->EOLstate>EOL_DOT ? EOL_SLF : EOL_FLF;	    } else		me->EOLstate = EOL_BEGIN;	    ptr++;	}	if (me->EOLstate == EOL_SLF) {	    int status = PUTBLOCK(b, l-5);	    return status != HT_OK ? status : HT_LOADED;	} else {	    int status = PUTBLOCK(b, l);	    return status;	}    }    return HT_LOADED;}PRIVATE int HTNewsStatus_put_character (HTStream * me, char ch){    return HTNewsStatus_put_block(me, &ch, 1);}PRIVATE int HTNewsStatus_put_string (HTStream * me, const char * str){    return HTNewsStatus_put_block(me, str, (int) strlen(str));}PRIVATE int HTNewsStatus_flush (HTStream * me){    return me->target ? (*me->target->isa->flush)(me->target) : HT_OK;}PRIVATE int HTNewsStatus_free (HTStream * me){    int status = HT_OK;    if (me->target) {	if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK)	    return HT_WOULD_BLOCK;    }    HT_FREE(me);    return status;}PRIVATE int HTNewsStatus_abort (HTStream * me, HTList * e){    if (me->target)        ABORT_TARGET;    HT_FREE(me);    HTTRACE(PROT_TRACE, "NewsStatus.. ABORTING...\n");    return HT_ERROR;}PRIVATE const HTStreamClass HTNewsStatusClass ={		    "NewsStatus",    HTNewsStatus_flush,    HTNewsStatus_free,    HTNewsStatus_abort,    HTNewsStatus_put_character,    HTNewsStatus_put_string,    HTNewsStatus_put_block};PRIVATE HTStream * HTNewsStatus_new (HTRequest * request, news_info * news,				     HTHost * host){    HTStream *me;    if ((me = (HTStream  *) HT_CALLOC(1, sizeof(HTStream))) == NULL)        HT_OUTOFMEM("HTNewsStatus_new");    me->isa = &HTNewsStatusClass;    me->request = request;    me->news = news;    me->EOLstate = EOL_BEGIN;    me->host = host;    return me;}/* ------------------------------------------------------------------------- *//*				PROTOCOL FUNCTIONS			     *//* ------------------------------------------------------------------------- *//***	Set the max number of articles at the same time.**	Default is MAX_NEWS_ARTICLES*/PUBLIC BOOL HTNews_setMaxArticles (int new_max){     if (new_max >= 0) {	MaxArt = new_max;	return YES;    }    return NO;}/***	Get current max number of articles at the same time.*/PUBLIC int HTNews_maxArticles (void){     return MaxArt;}/*	HTNewsCleanup**	-------------**      This function closes the connection and frees memory.**      Returns YES on OK, else NO*/PRIVATE int HTNewsCleanup (HTRequest * req, int status){    HTNet * net = HTRequest_net(req);    news_info *news = (news_info *) HTNet_context(net);    HTStream * input = HTRequest_inputStream(req);    /* Free stream with data TO network */    if (!HTRequest_isDestination(req))	HTRequest_removeDestination(req);    else if (input) {	if (status == HT_INTERRUPTED)	    (*input->isa->abort)(input, NULL);	else	    (*input->isa->_free)(input);	HTRequest_setInputStream(req, NULL);    }    /* Remove the request object and our own context structure for nntp */    HTNet_delete(net, status);    if (news) {	HT_FREE(news->name);	HTChunk_delete(news->cmd);	HT_FREE(news);    }    return YES;}PRIVATE int SendCommand (HTRequest *request, news_info *news,			 char *token, char *pars){    HTStream * input = HTRequest_inputStream(request);    int len = strlen(token) + (pars ? strlen(pars)+1:0) + 2;    HTChunk_setSize(news->cmd, len);    if (pars && *pars)	sprintf(HTChunk_data(news->cmd), "%s %s%c%c", token, pars, CR, LF);    else	sprintf(HTChunk_data(news->cmd), "%s%c%c", token, CR, LF);    HTTRACE(PROT_TRACE, "News Tx..... %s" _ HTChunk_data(news->cmd));    return (*input->isa->put_block)(input, HTChunk_data(news->cmd), len);}/*		Load data object from NNTP Server		     HTLoadNews**		=================================****	Given a hypertext addres, this routine loads a document**** On Entry,**	request		The request structure****	returns		HT_ERROR	Error has occured or interrupted**			HT_WOULD_BLOCK  if operation would have blocked**			HT_LOADED	if 200 OK**			HT_NO_DATA	if No Response**			HT_RETRY	if Service Unavail.*/PRIVATE int NewsEvent (SOCKET soc, void * pVoid, HTEventType type);PUBLIC int HTLoadNews (SOCKET soc, HTRequest * request){    news_info *news;    HTParentAnchor *anchor = HTRequest_anchor(request);    HTNet * net = HTRequest_net(request);    char * url = HTAnchor_physical(anchor);    HTTRACE(PROT_TRACE, "NNTP........ Looking for `%s\'\n" _ url);    if ((news = (news_info *) HT_CALLOC(1, sizeof(news_info))) == NULL)	HT_OUTOFMEM("HTLoadNews");    news->cmd = HTChunk_new(128);    news->state = NEWS_BEGIN;    news->net = net;    HTNet_setContext(net, news);    HTNet_setEventCallback(net, NewsEvent);    HTNet_setEventParam(net, news);  /* callbacks get http* */    return NewsEvent(soc, news, HTEvent_BEGIN);		/* get it started - ops is ignored */}PRIVATE int NewsEvent (SOCKET soc, void * pVoid, HTEventType type){    news_info *news = (news_info *)pVoid;    int status = HT_ERROR;    HTNet * net = news->net;    HTRequest * request = HTNet_request(net);    HTParentAnchor * anchor = HTRequest_anchor(request);    char * url = HTAnchor_physical(anchor);    HTHost * host = HTNet_host(net);        /*    ** Initiate a new nntp structure and bind to request structure    ** This is actually state NNTP_BEGIN, but it can't be in the state    ** machine as we need the structure first.    */    if (type == HTEvent_CLOSE) {			      /* Interrupted */	HTRequest_addError(request, ERR_FATAL, NO, HTERR_INTERRUPTED,			   NULL, 0, "HTLoadHTTP");	HTNewsCleanup(request, HT_INTERRUPTED);	return HT_OK;    } else	news = (news_info *) HTNet_context(net);		/* Get existing copy */    /* Now jump into the machine. We know the state from the previous run */    while (1) {        switch (news->state) {          case NEWS_BEGIN:	    news->state = (!strchr(url, '@') && strchr(url, '*')) ?		NEWS_SEEK_CACHE : NEWS_NEED_CONNECTION;	    break;	case NEWS_SEEK_CACHE:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品国产精品毛片| 亚洲日本va午夜在线电影| 五月婷婷综合在线| 777奇米四色成人影色区| 蜜桃av噜噜一区| 2欧美一区二区三区在线观看视频| 国产一区二区三区免费| 亚洲免费av高清| 精品盗摄一区二区三区| 丁香亚洲综合激情啪啪综合| 亚洲欧美视频一区| 欧美mv日韩mv| 欧美性猛交xxxx黑人交| 激情综合色综合久久综合| 中文字幕在线免费不卡| 欧美日韩精品三区| 亚洲一级二级在线| 日韩欧美一二三区| 大胆亚洲人体视频| 天堂va蜜桃一区二区三区| 久久一区二区三区国产精品| 国产精品91一区二区| 亚洲综合清纯丝袜自拍| 日韩一区在线免费观看| 久久精品欧美一区二区三区不卡| 欧美一区二区观看视频| 欧美乱妇15p| 欧美在线免费播放| 欧美中文字幕亚洲一区二区va在线 | a美女胸又www黄视频久久| 视频一区中文字幕| 中文字幕在线一区免费| 久久久久久久久久久99999| 91视视频在线观看入口直接观看www| 亚洲免费观看高清完整版在线| 2017欧美狠狠色| 6080国产精品一区二区| 色国产精品一区在线观看| 国产二区国产一区在线观看| 狠狠色丁香婷综合久久| 国产一区二区久久| 国产91富婆露脸刺激对白| 成人亚洲一区二区一| 欧美性大战久久久久久久| 欧美老年两性高潮| 久久综合国产精品| 国产精品麻豆99久久久久久| 亚洲一区二区美女| 国产精品自拍三区| 777色狠狠一区二区三区| 日韩三级精品电影久久久| 久久先锋影音av鲁色资源| 中文字幕第一页久久| 亚洲男同1069视频| 喷水一区二区三区| 91在线免费视频观看| 日韩欧美国产一区在线观看| 亚洲日本丝袜连裤袜办公室| 激情欧美一区二区| 91在线国产福利| 精品理论电影在线观看| 亚洲一区二区偷拍精品| 成人午夜视频在线| 久久久精品国产99久久精品芒果 | 亚洲精品一区二区三区影院 | av在线免费不卡| 91蝌蚪porny九色| 日韩欧美国产精品| 亚洲欧美日韩一区二区三区在线观看| 亚洲午夜精品在线| 久久精工是国产品牌吗| 91色.com| 国产精品国产自产拍在线| 久久成人精品无人区| 欧美午夜精品久久久久久孕妇 | 欧美日韩一区在线观看| 亚洲一卡二卡三卡四卡| 欧美日韩电影在线播放| 日韩精品电影一区亚洲| 欧美精品一二三| 日韩av一二三| 久久久精品tv| av爱爱亚洲一区| 国产精品久久久久一区| 成人午夜视频在线观看| 国产欧美日本一区二区三区| 国产综合久久久久久鬼色 | 91丝袜高跟美女视频| 最好看的中文字幕久久| 欧美午夜精品久久久久久孕妇| 日韩成人一级片| 欧美一二三区在线观看| 久草热8精品视频在线观看| 日韩欧美精品三级| 狠狠网亚洲精品| 久久久亚洲精品石原莉奈| 日本欧洲一区二区| 精品国产成人系列| 播五月开心婷婷综合| 亚洲va欧美va人人爽午夜| 亚洲国产精品成人综合| 欧美一区二区三区公司| 色天使久久综合网天天| 国产福利视频一区二区三区| 日韩制服丝袜av| 国产精品久久久久三级| 91麻豆精品国产91久久久更新时间 | 青草国产精品久久久久久| 一卡二卡三卡日韩欧美| 中文字幕一区二区三区在线观看| 欧美精选在线播放| 91一区二区在线| 国内精品视频一区二区三区八戒| 亚洲裸体xxx| 欧美国产禁国产网站cc| 精品久久久久久久久久久久久久久| 欧美亚洲尤物久久| 99视频一区二区| 91在线视频观看| 色婷婷av一区二区三区软件| 97精品视频在线观看自产线路二| 久久99精品国产.久久久久久| 日韩电影免费一区| 日韩极品在线观看| 麻豆成人久久精品二区三区小说| 日韩国产在线观看一区| 奇米精品一区二区三区四区| 理论片日本一区| 岛国精品在线播放| 波多野结衣中文一区| 色天天综合色天天久久| 欧美一级黄色片| 7777精品伊人久久久大香线蕉完整版| 色综合久久综合中文综合网| 欧美日韩午夜在线视频| 日韩精品一区二区三区在线播放| 26uuu另类欧美亚洲曰本| 国产精品久久久久久久蜜臀 | 欧美色图在线观看| 91精品国产91热久久久做人人| 亚洲精品一线二线三线无人区| 国产精品无圣光一区二区| 亚瑟在线精品视频| 狠狠色丁香久久婷婷综| 欧美日本视频在线| 国产精品超碰97尤物18| 经典三级视频一区| 欧美三级电影在线看| 亚洲国产精品黑人久久久| 婷婷综合另类小说色区| 在线欧美小视频| 国产欧美视频一区二区| 丝袜美腿高跟呻吟高潮一区| 99久久久精品| 欧美不卡在线视频| 亚洲激情男女视频| 波多野结衣91| 欧美激情在线观看视频免费| 日韩和欧美一区二区三区| 久久色.com| 99re在线视频这里只有精品| 亚洲理论在线观看| 在线视频欧美区| 日韩和欧美的一区| 精品999久久久| 成人99免费视频| 亚洲国产视频一区| 欧美一级久久久久久久大片| 麻豆精品久久久| 亚洲欧洲日韩综合一区二区| a级精品国产片在线观看| 一区二区三区中文字幕| 久久综合久久综合久久| 99麻豆久久久国产精品免费优播| 亚洲国产视频在线| 久久你懂得1024| 欧美性videosxxxxx| 国产麻豆成人精品| 亚洲精品高清在线观看| 91.成人天堂一区| 麻豆久久久久久| 日本一区二区免费在线| 国产成人8x视频一区二区| 亚洲精品视频自拍| 精品国产乱码久久久久久图片| www.久久久久久久久| 亚洲mv大片欧洲mv大片精品| 2020国产精品| 在线观看欧美黄色| 国产成人自拍在线| 日本免费新一区视频| 中文字幕亚洲不卡| 欧美tickling挠脚心丨vk| 欧美日韩一区二区不卡| 国产成人av一区二区三区在线观看| 日韩一级大片在线| 欧美天天综合网| 色又黄又爽网站www久久| 激情国产一区二区| 蜜臀国产一区二区三区在线播放|