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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? htgopher.c

?? www工具包. 這是W3C官方支持的www支撐庫(kù). 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		    cont = me->CSO ? GopherCSOLine(me, me->buffer) :			GopherMenuLine(me, me->buffer);		    if (cont == NO) return HT_LOADED;		} else		    me->junk = NO;			   /* back to normal */	    }	    me->buflen = 0;	    me->state = EOL_BEGIN;	} else if (*b == CR) {	    me->state = EOL_FCR;	} else if (*b == LF && me->buflen) {	    if (!me->junk) {		BOOL cont;		*(me->buffer+me->buflen) = '\0';		cont = me->CSO ? GopherCSOLine(me, me->buffer) :		    GopherMenuLine(me, me->buffer);		if (cont == NO) return HT_LOADED;	    } else		me->junk = NO;				   /* back to normal */	    me->buflen = 0;	    me->state = EOL_BEGIN;	} else {	    *(me->buffer+me->buflen++) = *b;	    if (me->buflen >= MAX_GOPHER_LINE) {		HTTRACE(PROT_TRACE, "Gopher...... Line too long - ignored\n");		me->buflen = 0;		me->junk = YES;	    }	}	b++;    }    return HT_OK;}PRIVATE int GopherMenu_put_string (HTStream * me, const char* s){    return GopherMenu_put_block(me, s, (int) strlen(s));}PRIVATE int GopherMenu_put_character (HTStream * me, char c){    return GopherMenu_put_block(me, &c, 1);}PRIVATE int GopherMenu_flush (HTStream * me){        return (*me->target->isa->flush)(me->target);}PRIVATE int GopherMenu_free (HTStream * me){    int status = HT_OK;    GopherBottom(me);    if ((status = (*me->target->isa->_free)(me->target)) == HT_WOULD_BLOCK)	return HT_WOULD_BLOCK;    HT_FREE(me);    return HT_OK;}PRIVATE int GopherMenu_abort (HTStream * me, HTList * e){    (*me->target->isa->abort)(me->target, e);    HT_FREE(me);    HTTRACE(PROT_TRACE, "Gopher...... ABORTING...\n");    return HT_ERROR;}/*	Goper Menu Stream**	-----------------*/PRIVATE const HTStreamClass GopherMenuClass ={		    "GopherMenu",    GopherMenu_flush,    GopherMenu_free,    GopherMenu_abort,    GopherMenu_put_character,    GopherMenu_put_string,    GopherMenu_put_block};/***  Stream for creating a HTML object out of a Gopher Menu object*/PRIVATE HTStream * GopherMenu_new (HTRequest * request, char *url, BOOL CSO){    HTStream * me;    if ((me = (HTStream  *) HT_CALLOC(1, sizeof(HTStream))) == NULL)        HT_OUTOFMEM("GopherMenu_new");    me->isa = &GopherMenuClass;    me->target = HTMLGenerator(request, NULL, WWW_HTML,			       HTRequest_outputFormat(request),			       HTRequest_outputStream(request));    HTAnchor_setFormat(HTRequest_anchor(request), WWW_HTML);    me->request = request;        me->state = EOL_BEGIN;    me->url = url;    me->CSO = CSO;    GopherTitle(me);    return me;}/* ------------------------------------------------------------------------- *//*				GOPHER STATE MACHINE			     *//* ------------------------------------------------------------------------- *//*	GopherCleanup**	-------------**      This function closes the connection and frees memory.**      Returns YES if OK, else NO*/PRIVATE BOOL GopherCleanup (HTRequest * request, int status){    HTNet * net = HTRequest_net(request);    gopher_info * gopher = (gopher_info *) HTNet_context(net);    HTStream * input = HTRequest_inputStream(request);    /* Free stream with data TO network */    if (input) {	if (status == HT_INTERRUPTED)	    (*input->isa->abort)(input, NULL);	else	    (*input->isa->_free)(input);    }    /* Remove the request object and our own context structure for gopher */    HTNet_delete(net, status);    if (gopher) {	HT_FREE(gopher->cmd);	HT_FREE(gopher);    }    return YES;}/*	Display a Gopher Index document**	-------------------------------**	We create a small HTML object as we have no network activity*/PRIVATE void display_index (HTRequest * request){    HTParentAnchor * anchor = HTRequest_anchor(request);    HTStructured *target = HTMLGenerator(request, NULL, WWW_HTML,					 HTRequest_outputFormat(request),					 HTRequest_outputStream(request));    /* Update anchor information */    HTAnchor_setFormat(anchor, WWW_HTML);    HTAnchor_setTitle(anchor, "Searchable Gopher Index");    /* @@@ We don't set Content-Length */    START(HTML_HTML);    START(HTML_HEAD);    START(HTML_TITLE);    PUTS("Searchable Gopher Index");    END(HTML_TITLE);    END(HTML_HEAD);    START(HTML_BODY);    START(HTML_H1);    PUTS("Searchable Gopher Index");    END(HTML_H1);    START(HTML_ISINDEX);    END(HTML_BODY);    END(HTML_HTML);    (*target->isa->_free)(target);}/*      Display a CSO index document**      -------------------------------**	We create a small HTML object as we have no network activity*/PRIVATE void display_cso (HTRequest * request){    HTParentAnchor * anchor = HTRequest_anchor(request);    HTStructured *target = HTMLGenerator(request, NULL, WWW_HTML,					 HTRequest_outputFormat(request),					 HTRequest_outputStream(request));    /* Update anchor information */    HTAnchor_setFormat(anchor, WWW_HTML);    HTAnchor_setTitle(anchor, "Searchable SCO Index");    /* @@@ We don't set Content-Length */    START(HTML_HTML);    START(HTML_HEAD);    START(HTML_TITLE);    PUTS("Searchable Index of a CSO Name Server");    END(HTML_TITLE);    END(HTML_HEAD);    START(HTML_BODY);    START(HTML_H1);    PUTS("Searchable Index of a CSO Name Server");    END(HTML_H1);    PUTS("A CSO Name Server usually provides directory information about people.");    START(HTML_ISINDEX);    END(HTML_BODY);    END(HTML_HTML);    (*target->isa->_free)(target);}/*	HTLoadGopher**	------------**	Given a hypertext address, this routine loads a gopher document**** On entry,**      request		This is the request structure** On Exit**	returns		HT_ERROR	Error has occured in call back**			HT_OK		Call back was OK*/PRIVATE int GopherEvent (SOCKET soc, void * pVoid, HTEventType type);PUBLIC int HTLoadGopher (SOCKET soc, HTRequest * request){    gopher_info * gopher;    HTNet * net = HTRequest_net(request);    HTParentAnchor * anchor = HTRequest_anchor(request);    char * url = HTAnchor_physical(anchor);        /*    ** Initiate a new gopher structure and bind to request structure    ** This is actually state GOPHER_BEGIN, but it can't be in the state    ** machine as we need the structure first.    */    HTTRACE(PROT_TRACE, "Gopher...... Looking for `%s\'\n" _ url);    if ((gopher = (gopher_info *) HT_CALLOC(1, sizeof(gopher_info))) == NULL)	HT_OUTOFMEM("HTLoadGopher");    gopher->type = GT_MENU;    gopher->state = GOPHER_BEGIN;    gopher->net = net;    HTNet_setContext(net, gopher);    HTNet_setEventCallback(net, GopherEvent);    HTNet_setEventParam(net, gopher);  /* callbacks get http* */    return GopherEvent(soc, gopher, HTEvent_BEGIN);		/* get it started - ops is ignored */}PRIVATE int GopherEvent (SOCKET soc, void * pVoid, HTEventType type){    gopher_info * gopher = (gopher_info *)pVoid;    int status = HT_ERROR;    HTNet * net = gopher->net;    HTRequest * request = HTNet_request(net);    HTParentAnchor * anchor = HTRequest_anchor(request);    HTHost * host = HTNet_host(net);    char * url = HTAnchor_physical(anchor);        if (type == HTEvent_CLOSE) {			      /* Interrupted */	GopherCleanup(request, HT_INTERRUPTED);	return HT_OK;    } else	gopher = (gopher_info *) HTNet_context(net);	/* Get existing copy */    /* Now jump into the machine. We know the state from the previous run */    while (1) {	switch (gopher->state) {	  case GOPHER_BEGIN:	     /* Get entity type, and selector string */	    {		char *path = HTParse(url, "", PARSE_PATH);		char *selector = path;		char *query = NULL;		char *separator = NULL;		if (*selector) gopher->type = (HTGopherType) *selector++;		if (gopher->type == GT_INDEX) {		    HTAnchor_setIndex(anchor);			 /* Is index */		    query = strchr(selector, '?');		    /* Display local cover page only if no search requested */		    if (!query || !*(query+1)) {       /* No search required */			display_index(request);			gopher->state = GOPHER_GOT_DATA;			HT_FREE(path);			break;		    } else {			*query++ = 0; 				 /* Skip '?' */			separator = "\t";		    }		} else if (gopher->type == GT_CSO) {		    HTAnchor_setIndex(anchor);		/* Search is allowed */		    query = strchr(selector, '?'); /* Look for search string */		    		    /* Display local cover page only if no search requested */		    if (!query || !*(query+1)) {       /* No search required */			display_cso(request);			gopher->state = GOPHER_GOT_DATA;			HT_FREE(path);			break;		    } else {			*query++ = 0; 				 /* Skip '?' */			*selector = 0;			separator = "query ";		    }		}		/* Now generate the final command */		{		    char crlf[3];		    StrAllocCopy(gopher->cmd, selector);		    if (query) {			char *p;			for (p=query; *p; p++)   /* Remove plus signs 921006 */			    if (*p == '+') *p = ' ';			StrAllocCat(gopher->cmd, separator);			StrAllocCat(gopher->cmd, query);		    }		    HTUnEscape(gopher->cmd);		    HTCleanTelnetString(gopher->cmd);   /* Prevent sec holes */		    *crlf = CR;			       /* Telnet termination */		    *(crlf+1) = LF;		    *(crlf+2) = '\0';		    StrAllocCat(gopher->cmd, crlf);		}		HT_FREE(path);		gopher->state = GOPHER_NEED_CONNECTION;	    }	    break;	  case GOPHER_NEED_CONNECTION:	    status = HTHost_connect(host, net, url);	    host = HTNet_host(net);	    if (status == HT_OK) {		/*		** Check the protocol class to see if we have connected to a		** the right class of server, in this case HTTP.		*/		{		    HTHost * host = HTNet_host(net);		    char * s_class = HTHost_class(host);		    if (s_class && strcasecomp(s_class, "gopher")) {			HTRequest_addError(request, ERR_FATAL, NO, HTERR_CLASS,					   NULL, 0, "HTLoadGopher");			gopher->state = GOPHER_ERROR;			break;		    }		    HTHost_setClass(host, "gopher");		}		/* 		** Create the stream pipe FROM the channel to the application.		** The target for the input stream pipe is set up using the		** stream stack.		*/		{		    if (gopher->type == GT_MENU || gopher->type == GT_INDEX)			net->readStream = GopherMenu_new(request, url, NO);		    else if (gopher->type == GT_CSO)			net->readStream = GopherMenu_new(request, url, YES);		    else			net->readStream = HTStreamStack(WWW_UNKNOWN,					       HTRequest_outputFormat(request),					       HTRequest_outputStream(request),					       request, NO);		    HTRequest_setOutputConnected(request, YES);		}		/*		** Create the stream pipe TO the channel from the application		** and hook it up to the request object		*/		{		    HTOutputStream * output = HTNet_getOutput(net, NULL, 0);		    HTRequest_setInputStream(request, (HTStream *) output);		}		gopher->state = GOPHER_NEED_REQUEST;	    } else if (status == HT_WOULD_BLOCK)		return HT_OK;	    else		gopher->state = GOPHER_ERROR;	    break;	  case GOPHER_NEED_REQUEST:	    HTTRACE(PROT_TRACE, "Gopher Tx... `%s\'" _ gopher->cmd);	    {			HTStream * input = HTRequest_inputStream(request);		status = (*input->isa->put_block)		    (input, gopher->cmd, strlen(gopher->cmd));		if (status == HT_WOULD_BLOCK)		    return HT_OK;		else if (status == HT_ERROR)		    gopher->state = GOPHER_ERROR;		else		    gopher->state = GOPHER_NEED_RESPONSE;	    }	    break;	  case GOPHER_NEED_RESPONSE:	    status = HTHost_read(net->host, net);	    if (status == HT_WOULD_BLOCK)		return HT_OK;	    else if (status == HT_LOADED || status == HT_CLOSED)		gopher->state = GOPHER_GOT_DATA;	    else		gopher->state = GOPHER_ERROR;	    break;	  case GOPHER_GOT_DATA:	    GopherCleanup(request, HT_LOADED);	    return HT_OK;	    break;	  case GOPHER_NO_DATA:	    GopherCleanup(request, HT_NO_DATA);	    return HT_OK;	    break;	  case GOPHER_ERROR:	    GopherCleanup(request, HT_ERROR);	    return HT_OK;	    break;	}    }  /* while(1) */}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品亚洲精品国产欧美kt∨| 青娱乐精品在线视频| 亚洲日本免费电影| 亚洲动漫第一页| 久久精品国产99国产精品| 国产精品综合一区二区三区| av一区二区不卡| 欧美日韩国产天堂| 久久综合色之久久综合| 国产精品免费久久| 亚洲第一成年网| 国产精品亚洲第一| 在线观看日韩av先锋影音电影院| 日韩亚洲欧美一区| √…a在线天堂一区| 全部av―极品视觉盛宴亚洲| 国产精品一二三区在线| 欧美日韩国产免费一区二区| 久久久亚洲国产美女国产盗摄| 亚洲美女屁股眼交3| 国模无码大尺度一区二区三区| 91女神在线视频| 日韩精品一区二区在线| 亚洲免费在线视频| 精品在线一区二区| 欧美亚洲国产bt| 国产欧美日韩在线| 日韩成人av影视| 97aⅴ精品视频一二三区| 日韩欧美一级特黄在线播放| 亚洲三级小视频| 精品一区二区三区在线观看国产| 欧美性色黄大片| 国产精品卡一卡二卡三| 久久精品二区亚洲w码| 91电影在线观看| 国产欧美一区二区精品性色| 亚洲18影院在线观看| av不卡一区二区三区| 久久久亚洲精品石原莉奈| 日日嗨av一区二区三区四区| 色婷婷综合在线| 国产精品色在线观看| 久久电影网站中文字幕| 欧美三日本三级三级在线播放| 中文字幕巨乱亚洲| 国产麻豆视频一区二区| 欧美电影免费观看高清完整版| 亚洲蜜桃精久久久久久久| 成人在线视频一区二区| 精品久久一二三区| 日韩精品久久理论片| 欧美系列在线观看| 亚洲欧美精品午睡沙发| 不卡视频在线观看| 国产色产综合色产在线视频| 久久av中文字幕片| 欧美一区二区在线看| 亚洲国产毛片aaaaa无费看| 91亚洲资源网| 中文字幕不卡在线播放| 老汉av免费一区二区三区| 日本二三区不卡| 国产精品午夜电影| 国产99精品在线观看| 精品国产乱码久久久久久牛牛| 日韩黄色小视频| 91精品国产91久久久久久最新毛片| 亚洲一二三四在线观看| 色视频欧美一区二区三区| 自拍偷拍亚洲欧美日韩| 97久久超碰国产精品电影| 中文字幕免费不卡在线| 不卡一区二区三区四区| 日韩一区中文字幕| 91亚洲精品乱码久久久久久蜜桃| 1000精品久久久久久久久| 91网站黄www| 亚洲男同1069视频| 欧美性大战久久久久久久| 亚洲成人免费av| 欧美精品一卡两卡| 日本成人中文字幕在线视频| 制服丝袜亚洲播放| 另类综合日韩欧美亚洲| 欧美精品一区男女天堂| 精品一区二区三区欧美| 久久久99久久| 99久久伊人网影院| 亚洲国产人成综合网站| 国产免费观看久久| 成人开心网精品视频| 国产精品全国免费观看高清 | 91麻豆123| 亚洲一区二区三区在线| 欧美三级在线播放| 日本免费在线视频不卡一不卡二| 日韩美女天天操| 成人免费视频播放| 夜色激情一区二区| 日韩一本二本av| 国产成人av一区二区三区在线观看| 国产精品美女久久久久久久久久久| 色婷婷国产精品综合在线观看| 日本麻豆一区二区三区视频| 欧美精品一区二区三区蜜臀| 成人激情视频网站| 亚洲一区二区视频在线| 欧美精品一区二区三区久久久| 成人白浆超碰人人人人| 亚洲午夜一区二区| 久久久噜噜噜久噜久久综合| 色综合久久66| 久久精品国产在热久久| 欧美国产日韩a欧美在线观看| 日本伦理一区二区| 精品剧情v国产在线观看在线| 欧美日韩在线播放三区四区| 午夜成人免费视频| 欧美精品一区二区不卡| 91丝袜高跟美女视频| 另类小说色综合网站| 国产精品色哟哟网站| 91精品国产综合久久久久久久| 高清国产一区二区三区| 亚洲午夜电影在线| 欧美国产禁国产网站cc| 欧美日韩1区2区| 成人激情免费网站| 美女网站在线免费欧美精品| 国产精品黄色在线观看| 欧美一级专区免费大片| 99精品久久久久久| 九九久久精品视频 | 一本一道综合狠狠老| 久草这里只有精品视频| 一区二区三区在线观看欧美| 久久久综合视频| 欧美另类一区二区三区| 9人人澡人人爽人人精品| 麻豆精品一区二区| 亚洲综合色婷婷| 国产精品麻豆久久久| 精品少妇一区二区三区视频免付费| 日本精品一区二区三区高清 | 精品电影一区二区三区| 久久精品久久综合| av在线播放一区二区三区| 青娱乐精品在线视频| 亚洲欧美一区二区三区孕妇| 日韩精品在线看片z| 欧美人xxxx| 一本色道亚洲精品aⅴ| 国产一区二区调教| 日韩av电影天堂| 亚洲线精品一区二区三区八戒| 欧美国产一区视频在线观看| 日韩一区二区三区视频在线观看 | 亚洲欧美综合色| 国产午夜精品在线观看| 日韩欧美一级片| 91精品国产色综合久久ai换脸| 欧美亚洲综合在线| 色94色欧美sute亚洲线路一ni| 成人午夜在线免费| 国产一区二区在线观看视频| 老司机精品视频一区二区三区| 日本欧美肥老太交大片| 日韩高清在线电影| 午夜免费欧美电影| 亚洲狠狠爱一区二区三区| 亚洲精品五月天| 亚洲欧美日韩综合aⅴ视频| 国产精品每日更新在线播放网址| 国产午夜亚洲精品理论片色戒| 久久久亚洲精品一区二区三区| 久久一区二区三区四区| 亚洲精品在线观看网站| 精品国产91洋老外米糕| 免费在线看成人av| 国产精品亚洲专一区二区三区 | 欧美色老头old∨ideo| 色综合久久久网| 色婷婷一区二区| 色婷婷亚洲精品| 欧美性色黄大片| 欧美日韩电影一区| 51久久夜色精品国产麻豆| 欧美日韩久久一区二区| 欧美老女人在线| 日韩三级在线观看| 久久综合九色综合欧美98| 久久久亚洲精品石原莉奈| 国产三级一区二区| 国产精品久久三区| 一区二区在线电影| 五月天一区二区| 美国欧美日韩国产在线播放| 激情综合色综合久久综合| 粉嫩欧美一区二区三区高清影视|