亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩成人综合| 欧美性猛交xxxx黑人交| 国产偷国产偷亚洲高清人白洁| 26uuu另类欧美亚洲曰本| 精品一区二区三区视频| 一区二区三区欧美久久| 亚洲免费在线电影| 中文字幕中文字幕在线一区| 青青草国产精品亚洲专区无| 亚洲成人免费视频| 欧美精品一区二区在线观看| 欧美日韩另类一区| 久久综合久久综合亚洲| 亚洲综合色网站| 国产精品一区二区91| 色香蕉成人二区免费| 久久精品二区亚洲w码| 精品午夜久久福利影院| 亚洲高清中文字幕| 亚洲精品久久7777| 91麻豆精品国产91久久久资源速度| 中文字幕一区二区不卡| 激情五月婷婷综合| 久久这里只有精品6| 久久久久久久久久久久久女国产乱| 欧美日韩在线一区二区| 欧美日韩亚洲国产综合| 在线观看不卡视频| 成人毛片视频在线观看| 在线播放中文字幕一区| 欧美少妇bbb| 国产精品素人一区二区| 麻豆精品视频在线观看视频| 91同城在线观看| 久久久精品黄色| 蜜臀av亚洲一区中文字幕| 色婷婷av一区二区三区大白胸| 国产亚洲1区2区3区| 麻豆精品在线观看| 欧美精品亚洲二区| 亚洲成人av电影在线| 91免费观看在线| 中文字幕在线观看一区二区| 国产老妇另类xxxxx| 国产日韩欧美电影| 日本韩国欧美在线| 美女脱光内衣内裤视频久久影院| 欧美视频在线一区| 亚洲在线中文字幕| 亚洲福利国产精品| 国产成人一区在线| 国产精品自拍网站| 在线一区二区视频| 中文字幕av一区二区三区| 午夜av电影一区| 色就色 综合激情| 中文字幕日本乱码精品影院| 欧美在线三级电影| 精品国产91乱码一区二区三区| 久久天天做天天爱综合色| 偷拍一区二区三区四区| 国产在线麻豆精品观看| 国产精品天干天干在观线| 国产精品久久久久久久久图文区| 在线观看av一区| 精品黑人一区二区三区久久| 欧美大片一区二区| 日韩你懂的电影在线观看| 亚洲欧美激情插 | 白白色亚洲国产精品| 6080日韩午夜伦伦午夜伦| 亚洲成人久久影院| 91国内精品野花午夜精品| 亚洲一二三四在线| 欧美精选一区二区| 人妖欧美一区二区| 日韩欧美一区电影| 国产精选一区二区三区| 久久久久久**毛片大全| 成人精品免费网站| 国产精品高潮呻吟| 欧美日韩一区精品| 九九国产精品视频| 日韩成人av影视| 精品久久五月天| 亚洲精品菠萝久久久久久久| 一区二区三区在线看| 国产精品国产三级国产普通话蜜臀 | 精品国产一区二区三区av性色| 亚洲超丰满肉感bbw| 日韩不卡一区二区| 久久99国产精品尤物| 色吊一区二区三区| 中文字幕中文字幕一区二区| 99久久综合99久久综合网站| 亚洲综合丝袜美腿| 欧美日韩在线播| 久久99最新地址| 亚洲美女少妇撒尿| 久久综合精品国产一区二区三区| 成人av网站在线观看| 日本免费新一区视频| 亚洲老司机在线| 久久蜜桃av一区精品变态类天堂| 91在线无精精品入口| 久久成人麻豆午夜电影| 亚洲一区欧美一区| 亚洲一区二区在线免费看| 精品国产免费人成在线观看| 在线观看一区二区精品视频| 久久精品国产一区二区三区免费看 | 91精品国产全国免费观看 | 欧美午夜精品久久久久久超碰| 国产一区二区三区| 极品少妇一区二区三区精品视频| 亚洲va韩国va欧美va| 一区二区三区资源| 有码一区二区三区| 亚洲高清在线精品| 无吗不卡中文字幕| 麻豆国产一区二区| 亚洲一区二区偷拍精品| 中文字幕欧美三区| 亚洲免费资源在线播放| 亚洲精品综合在线| 天堂成人国产精品一区| 国产在线观看免费一区| 国产成人亚洲综合a∨婷婷| www.亚洲在线| 在线观看日韩精品| 精品久久人人做人人爽| 国产精品伦一区| 欧美日韩国产高清一区二区| caoporm超碰国产精品| 亚洲一区二区综合| 色婷婷av一区二区三区之一色屋| 91精彩视频在线观看| 欧美老女人在线| 国产精品进线69影院| 亚洲自拍偷拍网站| 成人久久18免费网站麻豆| 欧美三级日本三级少妇99| 久久久久久免费毛片精品| 一区二区三区日韩欧美精品| 国产精品一区在线观看乱码 | 欧美精品一区二区三区一线天视频 | 精品国产乱码久久久久久牛牛| 国产欧美日韩综合精品一区二区 | 日韩午夜av一区| 精品国产凹凸成av人网站| 日本大香伊一区二区三区| 久久丝袜美腿综合| 国产麻豆视频精品| 欧美乱妇一区二区三区不卡视频| 成人免费一区二区三区视频 | 国产精品99久久久久久宅男| 欧美日韩中文字幕一区| 亚洲一区二区影院| 一本到高清视频免费精品| 国产精品网站在线观看| 成人精品gif动图一区| 国产精品久久久久久久裸模| 国产一区二区在线免费观看| 26uuu精品一区二区在线观看| 激情国产一区二区| 久久亚洲综合色| 99精品视频在线观看| 亚洲自拍偷拍欧美| 精品国产一区二区三区四区四| 国产一区二区伦理| 国产精品国产成人国产三级| 在线国产电影不卡| 免费在线观看视频一区| 久久网站热最新地址| 99视频精品免费视频| 亚洲国产一区二区在线播放| 日韩欧美一区二区久久婷婷| 东方欧美亚洲色图在线| 日韩午夜激情av| 一本大道综合伊人精品热热| 亚洲网友自拍偷拍| 国产无遮挡一区二区三区毛片日本| 国产成人自拍高清视频在线免费播放| 中文字幕va一区二区三区| 91精品国产色综合久久| 91在线丨porny丨国产| 国产一区二区三区高清播放| 亚洲资源中文字幕| 专区另类欧美日韩| 久久久国产午夜精品| 日韩免费一区二区三区在线播放| av在线不卡免费看| 国产suv一区二区三区88区| 久久久久久免费| 亚洲人成网站在线| 国产性天天综合网| 国产亚洲美州欧州综合国 | www.在线欧美| 色综合欧美在线视频区| av中文字幕在线不卡|