Annotation of libwww/Library/src/HTXParse.c, revision 2.18

2.1       frystyk     1: /*                                                                HTXParse.c
                      2: **     EXTPARSE CLASS
                      3: **
2.3       frystyk     4: **     (c) COPYRIGHT MIT 1995.
2.1       frystyk     5: **     Please first read the full copyright statement in the file COPYRIGH.
2.18    ! frystyk     6: **     @(#) $Id: HTXParse.c,v 2.17 1996/05/16 19:03:26 frystyk Exp $
2.1       frystyk     7: **
                      8: **  AUTHORS:
                      9: **     HWL 23/8/94
2.11      frystyk    10: **
                     11: **  HISTORY:
                     12: **      HWL 5/12/95: Added NUL-terminatio, changed name from Ext to X
2.1       frystyk    13: */
                     14: 
                     15: /* Library include files */
2.14      frystyk    16: #include "sysdep.h"
2.18    ! frystyk    17: #include "WWWUtil.h"
        !            18: #include "WWWCore.h"
2.1       frystyk    19: #include "HTXParse.h"                 /* defines HTStreamClass */
2.5       frystyk    20: #include "HTEPtoCl.h"         /* defines dummy routine for talking to client */
2.1       frystyk    21: 
                     22: struct _HTStream {
2.14      frystyk    23:        const HTStreamClass *   isa;
2.11      frystyk    24:        HTXParseStruct *      eps;
2.1       frystyk    25: };
                     26: 
2.11      frystyk    27: PRIVATE int HTXParse_put_character (HTStream * me, char c)
2.1       frystyk    28: {
2.11      frystyk    29:     while ((me->eps->used + 1) > (me->eps->length + 1)) {
2.16      frystyk    30:        me->eps->length += INPUT_BUFFER_SIZE;
2.1       frystyk    31:     }
2.12      frystyk    32:     if ((me->eps->buffer = (char  *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL)
                     33:         HT_OUTOFMEM("me->eps->buffer ");
2.1       frystyk    34:     *(me->eps->buffer + me->eps->used) = c;
                     35:     me->eps->used++;
2.11      frystyk    36:     me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */
2.2       frystyk    37:     return HT_OK;
2.1       frystyk    38: }
                     39: 
2.14      frystyk    40: PRIVATE int HTXParse_put_string (HTStream * me, const char * s)
2.1       frystyk    41: {
                     42:     int l = strlen(s);
                     43: 
2.13      eric       44:     if (WWWTRACE) HTTrace("HTXParse_put_string, %s\n",s);
2.1       frystyk    45: 
2.11      frystyk    46:     while ((me->eps->used + l) > (me->eps->length + 1)) {
2.16      frystyk    47:        me->eps->length += INPUT_BUFFER_SIZE;
2.1       frystyk    48:     }
2.12      frystyk    49:     if ((me->eps->buffer = (char  *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL)
                     50:         HT_OUTOFMEM("me->eps->buffer ");
2.1       frystyk    51:     memcpy( (me->eps->buffer + me->eps->used), s, l); 
                     52:     me->eps->used += l;
2.11      frystyk    53:     me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */
2.2       frystyk    54:     return HT_OK;
2.1       frystyk    55: }
                     56: 
2.14      frystyk    57: PRIVATE int HTXParse_write (HTStream * me, const char * s, int l)
2.1       frystyk    58: {
2.11      frystyk    59:     while ((me->eps->used + l) > (me->eps->length + 1)) {
2.16      frystyk    60:        me->eps->length += INPUT_BUFFER_SIZE;
2.1       frystyk    61:     }
2.12      frystyk    62:     if ((me->eps->buffer = (char  *) HT_REALLOC(me->eps->buffer, (me->eps->length + 1))) == NULL)
                     63:         HT_OUTOFMEM("me->eps->buffer ");
2.1       frystyk    64:     memcpy( (me->eps->buffer + me->eps->used), s, l); 
                     65:     me->eps->used += l;
2.11      frystyk    66:     me->eps->buffer[me->eps->used] = '\0'; /* null-terminate string */
2.5       frystyk    67:     (*(me->eps->call_client))(me->eps);       /* client can give status info */
2.7       frystyk    68:     if (WWWTRACE)
2.13      eric       69:        HTTrace("HTXParse_write, l=%d, used = %d\n",l,me->eps->used);
2.2       frystyk    70:     return HT_OK;
2.1       frystyk    71: }
                     72: 
                     73: 
2.11      frystyk    74: PRIVATE int HTXParse_flush (HTStream * me)
2.2       frystyk    75: {
2.13      eric       76:     if (WWWTRACE) HTTrace("HTXParse_flush\n");
2.2       frystyk    77:     return HT_OK;
                     78: }
                     79: 
2.11      frystyk    80: PRIVATE int HTXParse_free (HTStream * me)
2.1       frystyk    81: {
2.13      eric       82:     if (WWWTRACE) HTTrace("HTXParse_free\n");
2.1       frystyk    83:     me->eps->finished = YES;
2.5       frystyk    84:     (*(me->eps->call_client))(me->eps);           /* client will free buffer */
2.12      frystyk    85:     HT_FREE(me->eps);
                     86:     HT_FREE(me);
2.2       frystyk    87:     return HT_OK;
2.1       frystyk    88: }
                     89: 
2.11      frystyk    90: PRIVATE int HTXParse_abort (HTStream * me, HTList * e)
2.1       frystyk    91: {
2.7       frystyk    92:     if (WWWTRACE)
2.13      eric       93:        HTTrace("HTXParse_abort\n");
2.11      frystyk    94:     HTXParse_free(me);                           /* Henrik Nov 2 94 */
2.2       frystyk    95:     return HT_ERROR;
2.1       frystyk    96: }
                     97: 
                     98: 
2.11      frystyk    99: /*     XParse stream
2.1       frystyk   100: **     -----------------
                    101: */
                    102: 
                    103: 
2.14      frystyk   104: PRIVATE const HTStreamClass HTXParseClass =
2.1       frystyk   105: {              
2.11      frystyk   106:        "XParse",
                    107:        HTXParse_flush,
                    108:        HTXParse_free,
                    109:        HTXParse_abort,
                    110:        HTXParse_put_character,
                    111:        HTXParse_put_string,
                    112:        HTXParse_write
2.1       frystyk   113: }; 
                    114: 
2.11      frystyk   115: PUBLIC HTStream* HTXParse (HTRequest * request,
2.10      frystyk   116:                             void *             param,
                    117:                             HTFormat           input_format,
                    118:                             HTFormat           output_format,
                    119:                             HTStream *         output_stream)
2.1       frystyk   120: {
                    121:     HTStream* me;
                    122:   
2.7       frystyk   123:     if (WWWTRACE) {
2.13      eric      124:        HTTrace("HTXConvert..");
2.1       frystyk   125:        if (input_format && input_format->name)
2.13      eric      126:             HTTrace(".. input format is %s",input_format->name);
2.1       frystyk   127:        if (output_format && output_format->name)
2.13      eric      128:             HTTrace(".. output format is %s",output_format->name);
                    129:        HTTrace("\n");
2.1       frystyk   130:     }
                    131: 
2.12      frystyk   132:     if ((me = (HTStream *) HT_CALLOC(1, sizeof(*me))) == NULL)
                    133:         HT_OUTOFMEM("HTXConvert");
2.11      frystyk   134:     me->isa = &HTXParseClass;
2.1       frystyk   135: 
2.12      frystyk   136:     if ((me->eps = (HTXParseStruct  *) HT_CALLOC(1, sizeof(HTXParseStruct))) == NULL)
                    137:         HT_OUTOFMEM("HTXConvert");
2.1       frystyk   138: 
2.4       frystyk   139:     if (input_format)
                    140:         me->eps->content_type = input_format->name;
2.1       frystyk   141:     me->eps->call_client = HTCallClient;
2.16      frystyk   142:     if ((me->eps->buffer = (char  *) HT_CALLOC(INPUT_BUFFER_SIZE,1)) == NULL)
2.12      frystyk   143:         HT_OUTOFMEM("me->eps->buffer ");
2.1       frystyk   144:     me->eps->used = 0;
                    145:     me->eps->finished = NO;
2.16      frystyk   146:     me->eps->length = INPUT_BUFFER_SIZE;
2.1       frystyk   147:     me->eps->request = request;
                    148:     return me;
                    149: }

Webmaster