⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htxparse.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/*								   HTXParse.c**	EXTPARSE CLASS****	(c) COPYRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.**	@(#) $Id: HTXParse.c,v 2.21 1999/02/22 22:10:12 frystyk Exp $****  AUTHORS:**	HWL 23/8/94****  HISTORY:**      HWL 5/12/95: Added NUL-terminatio, changed name from Ext to X*//* Library include files */#include "wwwsys.h"#include "WWWUtil.h"#include "WWWCore.h"#include "HTXParse.h"                 /* defines HTStreamClass */#include "HTEPtoCl.h"         /* defines dummy routine for talking to client */struct _HTStream {	const HTStreamClass *	isa;	HTXParseStruct *      eps;};PRIVATE int HTXParse_put_character (HTStream * me, char c){    while ((me->eps->used + 1) > (me->eps->length + 1)) {	me->eps->length += INPUT_BUFFER_SIZE;    }    if ((me->eps->buffer = (char  *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL)        HT_OUTOFMEM("me->eps->buffer ");    *(me->eps->buffer + me->eps->used) = c;    me->eps->used++;    me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */    return HT_OK;}PRIVATE int HTXParse_put_string (HTStream * me, const char * s){    int l = strlen(s);    HTTRACE(STREAM_TRACE, "HTXParse_put_string, %s\n" _ s);    while ((me->eps->used + l) > (me->eps->length + 1)) {	me->eps->length += INPUT_BUFFER_SIZE;    }    if ((me->eps->buffer = (char  *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL)        HT_OUTOFMEM("me->eps->buffer ");    memcpy( (me->eps->buffer + me->eps->used), s, l);     me->eps->used += l;    me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */    return HT_OK;}PRIVATE int HTXParse_write (HTStream * me, const char * s, int l){    while ((me->eps->used + l) > (me->eps->length + 1)) {	me->eps->length += INPUT_BUFFER_SIZE;    }    if ((me->eps->buffer = (char  *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL)        HT_OUTOFMEM("me->eps->buffer ");    memcpy( (me->eps->buffer + me->eps->used), s, l);     me->eps->used += l;    me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */    (*(me->eps->call_client))(me->eps);       /* client can give status info */    HTTRACE(STREAM_TRACE, "HTXParse_write, l=%d, used = %d\n" _ l _ me->eps->used);    return HT_OK;}PRIVATE int HTXParse_flush (HTStream * me){    HTTRACE(STREAM_TRACE, "HTXParse_flush\n");    return HT_OK;}PRIVATE int HTXParse_free (HTStream * me){    HTTRACE(STREAM_TRACE, "HTXParse_free\n");    me->eps->finished = YES;    (*(me->eps->call_client))(me->eps);           /* client will free buffer */    HT_FREE(me->eps);    HT_FREE(me);    return HT_OK;}PRIVATE int HTXParse_abort (HTStream * me, HTList * e){    HTTRACE(STREAM_TRACE, "HTXParse_abort\n");    HTXParse_free(me);				  /* Henrik Nov 2 94 */    return HT_ERROR;}/*	XParse stream**	-----------------*/PRIVATE const HTStreamClass HTXParseClass ={			"XParse",	HTXParse_flush,	HTXParse_free,	HTXParse_abort,	HTXParse_put_character,	HTXParse_put_string,	HTXParse_write}; PUBLIC HTStream* HTXParse (HTRequest *	request,			     void *		param,			     HTFormat		input_format,			     HTFormat		output_format,			     HTStream *		output_stream){    HTStream* me;  #ifdef HTDEBUG    if (STREAM_TRACE) {	HTTRACE(STREAM_TRACE, "HTXConvert..");	if (input_format && input_format->name)            HTTRACE(STREAM_TRACE, ".. input format is %s" _ input_format->name);	if (output_format && output_format->name)            HTTRACE(STREAM_TRACE, ".. output format is %s" _ output_format->name);	HTTRACE(STREAM_TRACE, "\n");    }#endif /* HTDEBUG */    if ((me = (HTStream *) HT_CALLOC(1, sizeof(*me))) == NULL)        HT_OUTOFMEM("HTXConvert");    me->isa = &HTXParseClass;    if ((me->eps = (HTXParseStruct  *) HT_CALLOC(1, sizeof(HTXParseStruct))) == NULL)        HT_OUTOFMEM("HTXConvert");    if (input_format)        me->eps->content_type = input_format->name;    me->eps->call_client = HTCallClient;    if ((me->eps->buffer = (char  *) HT_CALLOC(INPUT_BUFFER_SIZE,1)) == NULL)        HT_OUTOFMEM("HTXParse");    me->eps->used = 0;    me->eps->finished = NO;    me->eps->length = INPUT_BUFFER_SIZE;    me->eps->request = request;    return me;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -