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

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

?? htwsrc.c

?? www工具包. 這是W3C官方支持的www支撐庫. 其中提供通用目的的客戶端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
?? C
字號:
/*								       HTWSRC.c**	PARSE WAIS SOURCE FILE****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTWSRC.c,v 2.37 1999/02/22 22:10:12 frystyk Exp $****	This module parses a stream with WAIS source file**	format information on it and creates a structured stream.**	That structured stream is then converted into whatever.****	3 Jun 93	Bug fix: Won't crash if no description**	8 Jul 94  FM	Insulate free() from _free structure element.*//* Library include files */#include "wwwsys.h"#include "HTUtils.h"#include "HTString.h"#include "HTMLPDTD.h"#include "HTMLGen.h"#include "HTParse.h"#include "HTReqMan.h"#include "HTProxy.h"#include "HTWSRC.h"					 /* Implemented here */#define BIG 10000		/* Arbitrary limit to value length */#define PARAM_MAX BIG#define CACHE_PERIOD (7*86400)	/* Time to keep .src file in seconds */#define HEX_ESCAPE '%'struct _HTStructured {	const HTStructuredClass *	isa;	/* ... */};#define PUTC(c) (*me->target->isa->put_character)(me->target, c)#define PUTS(s) (*me->target->isa->put_string)(me->target, s)#define START(e) (*me->target->isa->start_element)(me->target, e, 0, 0)#define END(e) (*me->target->isa->end_element)(me->target, e)/*	Here are the parameters which can be specified in a  source file*/PRIVATE const char* par_name[] = {	"version", 	"ip-address",#define PAR_IP_NAME 2	"ip-name", #define PAR_TCP_PORT 3	"tcp-port", #define PAR_DATABASE_NAME 4	"database-name",#define PAR_COST 5	"cost", #define PAR_COST_UNIT 6	"cost-unit", #define PAR_FREE 7	"free",	#define PAR_MAINTAINER 8	"maintainer", 	#define PAR_DESCRIPTION 9	"description",	"keyword-list", 		"source",#define PAR_UNKNOWN 12	"unknown",	0,				/* Terminate list */#define PAR_COUNT 13} ;#if 0PRIVATE  const char * hex = "0123456789ABCDEF";#endifenum tokenstate { beginning, before_tag, colon, before_value,		value, bracketed_value, quoted_value, escape_in_quoted, done };/*		Stream Object**		------------****	The target is the structured stream down which the**	parsed results will go.****	all the static stuff below should go in here to make it reentrant*/struct _HTStream {	const HTStreamClass *	isa;	HTStructured *		target;	HTRequest *		request;	char *			par_value[PAR_COUNT];	enum tokenstate 	state;	char 			param[BIG+1];	int			param_number;	int			param_count;};#if 0/*	Decode one hex character*/PRIVATE char from_hex (char c){    return 		  (c>='0')&&(c<='9') ? c-'0'			: (c>='A')&&(c<='F') ? c-'A'+10			: (c>='a')&&(c<='f') ? c-'a'+10			:		       0;}#endif/*			State machine**			-------------**** On entry,**	me->state	is a valid state (see WSRC_init)**	c		is the next character** On exit,** 	returns	1	Done with file**		0	Continue. me->state is updated if necessary.**		-1	Syntax error error*//*		Treat One Character**		-------------------*/PRIVATE int WSRCParser_put_character (HTStream* me, char c){    switch (me->state) {    case beginning:        if (c=='(') me->state = before_tag;	break;	    case before_tag:        if (c==')') {	    me->state = done;	    return HT_OK;			/* Done with input file */	} else if (c==':') {	    me->param_count = 0;	    me->state = colon;	}				/* Ignore other text */	break;    case colon:        if (isspace((int) c)) {	    me->param[me->param_count++] = 0;	/* Terminate */	    for(me->param_number = 0; par_name[me->param_number]; me->param_number++) {		if (0==strcmp(par_name[me->param_number], me->param)) {		    break;		}	    }	    if (!par_name[me->param_number]) {	/* Unknown field */	        HTTRACE(PROT_TRACE, "HTWSRC: Unknown field `%s' in source file\n" _ 		    me->param);		me->param_number = PAR_UNKNOWN;		me->state = before_value;	/* Could be better ignore */		return HT_OK;	    }	    me->state = before_value;	} else {	    if (me->param_count < PARAM_MAX)  me->param[me->param_count++] = c;	}	break;	    case before_value:        if (c==')') {	    me->state = done;	    return HT_OK;			/* Done with input file */	}	if (isspace((int) c)) return HT_OK;		/* Skip white space */	me->param_count = 0;	if (c=='"') {	    me->state = quoted_value;	    break;	}	me->state = (c=='"') ? quoted_value : 		    (c=='(') ? bracketed_value : value;	me->param[me->param_count++] = c;	/* Don't miss first character */	break;    case value:        if (isspace((int) c)) {	    me->param[me->param_count] = 0;	    StrAllocCopy(me->par_value[me->param_number], me->param);	    me->state = before_tag;	} else {	    if (me->param_count < PARAM_MAX)  me->param[me->param_count++] = c;	}	break;    case bracketed_value:        if (c==')') {	    me->param[me->param_count] = 0;	    StrAllocCopy(me->par_value[me->param_number], me->param);	    me->state = before_tag;	    break;	}        if (me->param_count < PARAM_MAX)  me->param[me->param_count++] = c;	break;	    case quoted_value:        if (c=='"') {	    me->param[me->param_count] = 0;	    StrAllocCopy(me->par_value[me->param_number], me->param);	    me->state = before_tag;	    break;	}		if (c=='\\') {		/* Ignore escape but switch state */	    me->state = escape_in_quoted;	    break;	}	/* Fall through! */    case escape_in_quoted:        if (me->param_count < PARAM_MAX)  me->param[me->param_count++] = c;	break;	    case done:				/* Ignore anything after EOF */	return HT_OK;    } /* switch me->state */    return HT_OK;}/*			Open Cache file**			===============****   Bugs: Maybe for filesystem-challenged platforms (MSDOS for example) we**   should make a hash code for the filename.*/#ifdef CACHE_FILE_PREFIXPRIVATE BOOL write_cache (HTStream * me){    FILE * fp;    char cache_file_name[256];    char * www_database;    if (!me->par_value[PAR_DATABASE_NAME]    	|| !me->par_value[PAR_IP_NAME]	) return NO;        www_database = HTEscape(me->par_value[PAR_DATABASE_NAME], URL_XALPHAS);    sprintf(cache_file_name, "%sWSRC-%s:%s:%.100s.txt",    	CACHE_FILE_PREFIX,	me->par_value[PAR_IP_NAME],	me->par_value[PAR_TCP_PORT] ? me->par_value[PAR_TCP_PORT] : "210",	www_database);    HT_FREE(www_database);    fp = fopen(cache_file_name, "wb");    if (!fp) return NO;        if (me->par_value[PAR_DESCRIPTION])        fputs(me->par_value[PAR_DESCRIPTION], fp);    else         fputs("Description not available\n", fp);    fclose(fp);    return YES;}#endif/*			Output equivalent HTML**			----------------------***/void give_parameter (HTStream * me, int p){    PUTS(par_name[p]);    if (me->par_value[p]) {	PUTS(": ");	PUTS(me->par_value[p]);	PUTS("; ");    } else {        PUTS(" NOT GIVEN in source file; ");    }}/*			Generate Outout**			===============*/PRIVATE void WSRC_gen_html (HTStream * me, BOOL source_file){    if (me->par_value[PAR_DATABASE_NAME]) {	char * shortname = NULL;	int l;	StrAllocCopy(shortname, me->par_value[PAR_DATABASE_NAME]);	l = strlen(shortname);	if ( l > 4 && !strcasecomp(shortname + l -4, ".src")) {	    shortname[l-4] = 0;	/* Chop of .src -- boring! */	}		START(HTML_TITLE);	PUTS(shortname);	PUTS(source_file ? " WAIS source file" : " index");	END(HTML_TITLE);    	START(HTML_H1);	PUTS(shortname);	PUTS(source_file ? " description" : " index");	END(HTML_H1);	HT_FREE(shortname);				  /* memleak, henrik */    }        START(HTML_DL);		/* Definition list of details */        if (source_file) {	START(HTML_DT);	PUTS("Access link");	START(HTML_DD);	if (me->par_value[PAR_IP_NAME] &&	    me->par_value[PAR_DATABASE_NAME]) {	    char WSRC_address[256];	    char *addr = HTAnchor_address((HTAnchor*) me->request->anchor);	    char *gate = HTGateway_find(addr);	    char *www_database = HTEscape(me->par_value[PAR_DATABASE_NAME],					  URL_XALPHAS);	    if (!gate) {		sprintf(WSRC_address, "wais://%s%s%s/%s",			me->par_value[PAR_IP_NAME],			me->par_value[PAR_TCP_PORT] ? ":" : "",			me->par_value[PAR_TCP_PORT] ?			me->par_value[PAR_TCP_PORT] :"", www_database);		HTStartAnchor(me->target, NULL, WSRC_address);		PUTS("Direct access");		END(HTML_A);	    } else {		sprintf(WSRC_address, "%s%s%s%s/%s",			gate,			me->par_value[PAR_IP_NAME],			me->par_value[PAR_TCP_PORT] ? ":" : "",			me->par_value[PAR_TCP_PORT] ?			me->par_value[PAR_TCP_PORT] : "",			www_database);		HTStartAnchor(me->target, NULL, WSRC_address);		PUTS("Through a gateway");		END(HTML_A);	    }	    HT_FREE(gate);	    HT_FREE(addr);	    HT_FREE(www_database);	    	} else {	    give_parameter(me, PAR_IP_NAME);	    give_parameter(me, PAR_DATABASE_NAME);	}        } /* end if source_file */        if (me->par_value[PAR_MAINTAINER]) {	START(HTML_DT);	PUTS("Maintainer");	START(HTML_DD);	PUTS(me->par_value[PAR_MAINTAINER]);    }    if (me->par_value[PAR_IP_NAME]) {    	START(HTML_DT);    	PUTS("Host");    	START(HTML_DD);    	PUTS(me->par_value[PAR_IP_NAME]);    }        END(HTML_DL);    if (me->par_value[PAR_DESCRIPTION]) {	START(HTML_PRE);		/* Preformatted description */	PUTS(me->par_value[PAR_DESCRIPTION]);	END(HTML_PRE);    }        (*me->target->isa->_free)(me->target);        return;} /* generate html */PRIVATE int WSRCParser_put_string (HTStream * context, const char* s){    while (*s)        WSRCParser_put_character(context, *s++);    return HT_OK;}PRIVATE int WSRCParser_write (HTStream * 	context,				   const char* 	b,				   int		l){    while (l-- > 0)	WSRCParser_put_character(context, *b++);    return HT_OK;}PRIVATE int WSRCParser_flush (HTStream * me){    return HT_OK;}PRIVATE int WSRCParser_free (HTStream * me){    WSRC_gen_html(me, YES);#ifdef CACHE_FILE_PREFIX    write_cache(me);#endif    {	int p;	for(p=0; par_name[p]; p++) {	/* Clear out old values */	    if (me->par_value[p]) {		HT_FREE(me->par_value[p]);	    }	}    }    HT_FREE(me);    return HT_OK;}PRIVATE int WSRCParser_abort (HTStream * me, HTList * e){    WSRCParser_free(me);    return HT_ERROR;}/*		Stream subclass		-- method routines**		---------------*/HTStreamClass WSRCParserClass = {	"WSRCParser",	WSRCParser_flush,	WSRCParser_free,	WSRCParser_abort,	WSRCParser_put_character, 	WSRCParser_put_string,	WSRCParser_write};/*		Converter from WAIS Source to whatever**		--------------------------------------*/PUBLIC HTStream* HTWSRCConvert (HTRequest *	request,				void *		param,				HTFormat	input_format,				HTFormat	output_format,				HTStream *	output_stream){    HTStream * me;    if ((me = (HTStream  *) HT_CALLOC(1, sizeof(HTStream))) == NULL)        HT_OUTOFMEM("HTWSRCConvert");    me->isa = &WSRCParserClass;    me->target = HTMLGenerator(request, param, input_format, output_format,			       output_stream);    me->request = request;    me->state = beginning;    return me;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产三级| 欧美激情综合五月色丁香| 日韩美女视频在线| 国产精品女主播av| 久久精品国产一区二区三区免费看| 福利一区二区在线| 日韩三级精品电影久久久| 国产精品乱码一区二区三区软件 | 国产亚洲欧洲997久久综合| 亚洲自拍偷拍欧美| 9人人澡人人爽人人精品| 精品电影一区二区| 日韩国产高清在线| 91美女片黄在线观看91美女| 久久久久国产精品麻豆ai换脸| 日韩黄色免费网站| 欧洲亚洲精品在线| 国产偷国产偷精品高清尤物| 99精品欧美一区二区三区综合在线| 精品免费国产一区二区三区四区| 亚洲午夜激情av| 欧洲色大大久久| 亚洲另类在线一区| 91在线码无精品| 中文字幕一区二区日韩精品绯色| 成人免费观看视频| 中文字幕日本乱码精品影院| 国产成人精品免费视频网站| 久久久久久电影| 国模少妇一区二区三区| 久久嫩草精品久久久精品一| 麻豆极品一区二区三区| 精品国产一区二区三区av性色| 日本欧美在线观看| 欧美一区二区视频在线观看| 丝袜脚交一区二区| 欧美一级淫片007| 奇米一区二区三区| 日韩欧美国产精品一区| 久久国产夜色精品鲁鲁99| 精品日韩在线观看| 国产又粗又猛又爽又黄91精品| 精品福利一区二区三区 | 日精品一区二区| 欧美一区二区三区日韩| 老鸭窝一区二区久久精品| 精品国产一二三区| 国产99久久久国产精品潘金网站| 国产三级欧美三级日产三级99| 成人sese在线| 有码一区二区三区| 69av一区二区三区| 狠狠久久亚洲欧美| 国产人妖乱国产精品人妖| 97aⅴ精品视频一二三区| 亚洲免费av网站| 欧美久久久久免费| 紧缚奴在线一区二区三区| 亚洲国产精华液网站w| 一本色道亚洲精品aⅴ| 一区二区日韩电影| 538prom精品视频线放| 国产精品一二二区| 亚洲欧美日韩国产综合| 日韩视频永久免费| 99久久国产综合精品麻豆| 一区二区三区四区不卡视频| 日韩一区二区免费在线电影| 东方aⅴ免费观看久久av| 夜夜亚洲天天久久| 久久综合狠狠综合久久激情| 91浏览器入口在线观看| 美女网站一区二区| 日韩一区在线免费观看| 欧美一级黄色录像| 91在线播放网址| 国模套图日韩精品一区二区| 亚洲自拍偷拍综合| 欧美国产精品专区| 91精品国产综合久久久久久漫画| 国产91精品露脸国语对白| 亚洲国产成人高清精品| 国产日韩精品一区二区浪潮av| 精品婷婷伊人一区三区三| 国产精品一级二级三级| 色综合久久久网| 国产河南妇女毛片精品久久久| 亚洲国产你懂的| 国产精品第四页| 精品99久久久久久| 91精品午夜视频| 色婷婷综合久久久久中文一区二区| 久草中文综合在线| 日韩高清中文字幕一区| 亚洲精品国产视频| 欧美激情综合五月色丁香小说| 欧美不卡123| 欧美一区二区日韩| 91成人看片片| 99re免费视频精品全部| 国产99久久久国产精品潘金网站| 麻豆精品久久精品色综合| 日日噜噜夜夜狠狠视频欧美人| 一区二区国产视频| 中文字幕一区二区三区不卡 | 日韩久久免费av| 4438成人网| 欧美日韩国产美女| 一本到高清视频免费精品| av在线免费不卡| 成人av电影在线播放| 国产成人小视频| 国产一本一道久久香蕉| 国产精品一级在线| 国产高清精品网站| 国产成人自拍高清视频在线免费播放| 久久99国产精品久久99果冻传媒| 免费高清成人在线| 久草精品在线观看| 激情久久久久久久久久久久久久久久| 日韩福利视频网| 青娱乐精品视频在线| 青草av.久久免费一区| 日本亚洲电影天堂| 麻豆一区二区在线| 国产美女精品人人做人人爽| 国产夫妻精品视频| 波多野结衣视频一区| 日本精品一区二区三区高清| 欧美在线制服丝袜| 91精品国产综合久久久久久漫画| 日韩欧美综合在线| 国产日韩欧美一区二区三区综合| 国产精品伦理在线| 亚洲综合久久久久| 奇米色一区二区| 国产不卡免费视频| 色综合天天综合网国产成人综合天| 欧洲国内综合视频| 欧美在线观看禁18| 欧美一区二区三区视频在线| 国产日韩高清在线| 一区二区高清在线| 麻豆精品国产91久久久久久| 丁香一区二区三区| 欧美午夜理伦三级在线观看| 欧美大白屁股肥臀xxxxxx| 国产精品欧美精品| 天堂一区二区在线| 国产v综合v亚洲欧| 欧美综合视频在线观看| 亚洲精品在线一区二区| 最好看的中文字幕久久| 美女任你摸久久| av毛片久久久久**hd| 日韩欧美亚洲国产精品字幕久久久| 国产精品另类一区| 日本中文字幕一区| 91视频国产观看| 欧美tk丨vk视频| 伊人一区二区三区| 久久国产欧美日韩精品| 欧美亚洲综合一区| 国产女主播视频一区二区| 午夜成人免费视频| 成人高清视频免费观看| 欧美大白屁股肥臀xxxxxx| 一区二区三区在线视频免费观看| 精品一区免费av| 欧美日韩在线电影| 中文字幕在线不卡国产视频| 看片的网站亚洲| 欧美网站大全在线观看| 中文字幕欧美区| 黄色成人免费在线| 欧美另类z0zxhd电影| 亚洲图片欧美激情| 粉嫩av亚洲一区二区图片| 精品国产sm最大网站免费看| 日韩主播视频在线| 欧美在线一区二区三区| 亚洲女性喷水在线观看一区| 国内精品国产成人国产三级粉色| 欧美日韩一区中文字幕| 亚洲欧美二区三区| 99久久精品国产导航| 国产精品国产三级国产普通话99 | 国产91精品在线观看| 欧美大白屁股肥臀xxxxxx| 日韩电影免费一区| 欧美日韩一区二区在线观看视频 | 亚洲18色成人| 91国偷自产一区二区三区观看 | 91影视在线播放| 最新热久久免费视频| 国产mv日韩mv欧美| 国产精品美女久久久久久久久| 国产一区在线视频| 久久精品夜色噜噜亚洲aⅴ| 国产麻豆精品久久一二三|