File:
[Public] /
libwww /
Library /
src /
HTXParse.c
Revision
2.21:
download - view:
text,
annotated -
select for diffs
Mon Feb 22 22:10:12 1999 UTC (25 years, 3 months ago) by
frystyk
Branches:
MAIN
CVS tags:
repeat-requests,
candidate-5-4-1,
before_webdav,
Release-5-4-0,
Release-5-3-1,
Release-5-2-8,
Release-5-2-6,
HEAD,
Amaya_2_4,
Amaya-6-3,
Amaya-6-1,
Amaya-5-2,
Amaya-4-3-2,
Amaya-4-3-1,
Amaya-4-3,
Amaya-4-1-2,
Amaya-4-1-0,
Amaya-4-0-0,
Amaya-3-2-1,
Amaya-3-2,
Amaya
NEW TRACE MESSAGES - see http://lists.w3.org/Archives/Public/www-lib/1999JanMar/0267.html for details
/* 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;
}
Webmaster