Annotation of libwww/Library/src/HTXParse.c, revision 2.1
2.1 ! frystyk 1: /* HTXParse.c
! 2: ** EXTPARSE CLASS
! 3: **
! 4: ** (c) COPYRIGHT CERN 1994.
! 5: ** Please first read the full copyright statement in the file COPYRIGH.
! 6: **
! 7: ** AUTHORS:
! 8: ** HWL 23/8/94
! 9: */
! 10:
! 11: /* Library include files */
! 12: #include "tcp.h"
! 13: #include "HTUtils.h"
! 14: #include "HTFormat.h" /* defines INPUT_BUFFER_SIZE */
! 15: #include "HTXParse.h" /* defines HTStreamClass */
! 16: #include "HTEPtoCl.h" /* defines dummy routine for talking to client */
! 17:
! 18: #if 0
! 19: /*extern void (*HTCallClient)(HTExtParseStruct *eps);*/
! 20: #endif
! 21:
! 22: extern CallClient HTCallClient;
! 23:
! 24: struct _HTStream {
! 25: CONST HTStreamClass * isa;
! 26: HTExtParseStruct * eps;
! 27: };
! 28:
! 29: PRIVATE void HTExtParse_put_character ARGS2(HTStream *, me, char, c)
! 30: {
! 31: while ((me->eps->used + 1) > me->eps->length) {
! 32: me->eps->length += INPUT_BUFFER_SIZE;
! 33: }
! 34: me->eps->buffer = (char *) realloc(me->eps->buffer, me->eps->length);
! 35: *(me->eps->buffer + me->eps->used) = c;
! 36: me->eps->used++;
! 37: }
! 38:
! 39: PRIVATE void HTExtParse_put_string ARGS2(HTStream *, me, CONST char*, s)
! 40: {
! 41: int l = strlen(s);
! 42:
! 43: if (TRACE) fprintf(TDEST, "HTExtParse_put_string, %s\n",s);
! 44:
! 45: while ((me->eps->used + l) > me->eps->length) {
! 46: me->eps->length += INPUT_BUFFER_SIZE;
! 47: }
! 48: me->eps->buffer = (char *) realloc(me->eps->buffer, me->eps->length);
! 49: memcpy( (me->eps->buffer + me->eps->used), s, l);
! 50: me->eps->used += l;
! 51: }
! 52:
! 53: PRIVATE void HTExtParse_write ARGS3(HTStream *, me, CONST char*, s, int, l)
! 54: {
! 55: while ((me->eps->used + l) > me->eps->length) {
! 56: me->eps->length += INPUT_BUFFER_SIZE;
! 57: }
! 58: me->eps->buffer = (char *) realloc(me->eps->buffer, me->eps->length);
! 59: memcpy( (me->eps->buffer + me->eps->used), s, l);
! 60: me->eps->used += l;
! 61: (*me->eps->call_client)(me->eps); /* so that client can give status info */
! 62:
! 63: if (TRACE)
! 64: fprintf(TDEST, "HTExtParse_write, l=%d, used = %d\n",l,me->eps->used);
! 65: }
! 66:
! 67:
! 68: PRIVATE int HTExtParse_free ARGS1(HTStream *, me)
! 69: {
! 70: if (TRACE) fprintf(TDEST, "HTExtParse_free\n");
! 71: me->eps->finished = YES;
! 72: (*me->eps->call_client)(me->eps); /* client will free buffer */
! 73: free(me->eps);
! 74: free(me);
! 75: return 0;
! 76: }
! 77:
! 78: PRIVATE int HTExtParse_abort ARGS2(HTStream *, me, HTError, e)
! 79: {
! 80: if (TRACE)
! 81: fprintf(TDEST, "HTExtParse_abort\n");
! 82: HTExtParse_free(me); /* Henrik Nov 2 94 */
! 83: return EOF;
! 84: }
! 85:
! 86:
! 87: /* ExtParse stream
! 88: ** -----------------
! 89: */
! 90:
! 91:
! 92: PRIVATE CONST HTStreamClass HTExtParseClass =
! 93: {
! 94: "ExtParse",
! 95: HTExtParse_free,
! 96: HTExtParse_abort,
! 97: HTExtParse_put_character,
! 98: HTExtParse_put_string,
! 99: HTExtParse_write
! 100: };
! 101:
! 102: /*
! 103: extern void SetBufferPt PARAMS((char * p, int l));
! 104: extern void GiveReadStatus PARAMS((char * p, int l));
! 105: */
! 106:
! 107: PUBLIC HTStream* HTExtParse ARGS5(
! 108: HTRequest *, request,
! 109: void *, param,
! 110: HTFormat, input_format,
! 111: HTFormat, output_format,
! 112: HTStream *, output_stream)
! 113: {
! 114: HTStream* me;
! 115:
! 116: if (TRACE) {
! 117: fprintf(TDEST, "HTExtConvert..");
! 118: if (input_format && input_format->name)
! 119: fprintf(TDEST, ".. input format is %s",input_format->name);
! 120: if (output_format && output_format->name)
! 121: fprintf(TDEST, ".. output format is %s",output_format->name);
! 122: fprintf(TDEST, "\n");
! 123: }
! 124:
! 125: me = (HTStream*)calloc(1, sizeof(*me));
! 126: if (me == NULL) outofmem(__FILE__, "HTExtConvert");
! 127: me->isa = &HTExtParseClass;
! 128:
! 129: me->eps = (HTExtParseStruct *) calloc(1, sizeof(HTExtParseStruct));
! 130: if (me->eps == NULL) outofmem(__FILE__, "HTExtConvert");
! 131:
! 132: me->eps->content_type = input_format->name;
! 133: me->eps->call_client = HTCallClient;
! 134: me->eps->buffer = (char *)calloc(INPUT_BUFFER_SIZE,1);
! 135: me->eps->used = 0;
! 136: me->eps->finished = NO;
! 137: me->eps->length = INPUT_BUFFER_SIZE;
! 138: me->eps->request = request;
! 139: return me;
! 140: }
Webmaster