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