Annotation of libwww/Library/src/HTReqMan.html, revision 2.44
2.1 frystyk 1: <HTML>
2: <HEAD>
2.32 frystyk 3: <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 -->
2.37 frystyk 4: <TITLE>W3C Sample Code Library libwww Private Request Definition</TITLE>
2.1 frystyk 5: </HEAD>
6: <BODY>
2.23 frystyk 7: <H1>
8: Private Request Definition
9: </H1>
2.1 frystyk 10: <PRE>
11: /*
12: ** (c) COPYRIGHT MIT 1995.
13: ** Please first read the full copyright statement in the file COPYRIGH.
14: */
15: </PRE>
2.23 frystyk 16: <P>
17: This module is the private part of the request object. It has the functions
18: declarations that are private to the Library and that shouldn't be used by
19: applications. The module has been separated from the old HTAccess module.
20: See also the public part of the declarition in the <A HREF="HTReq.html">HTReq
21: Module</A>.
22: <P>
23: This module is implemented by <A HREF="HTReqMan.c">HTReqMan.c</A>, and it
2.39 frystyk 24: is a part of the <A HREF="http://www.w3.org/Library/"> W3C Sample Code
2.23 frystyk 25: Library</A>.
2.1 frystyk 26: <PRE>
27: #ifndef HTREQMAN_H
28: #define HTREQMAN_H
29:
30: #include "<A HREF="HTReq.html">HTReq.h</A>"
31: #include "<A HREF="HTList.html">HTList.h</A>"
32: #include "<A HREF="HTFormat.html">HTFormat.h</A>"
33: #include "<A HREF="HTAnchor.html">HTAnchor.h</A>"
34: #include "<A HREF="HTMethod.html">HTMethod.h</A>"
35: #include "<A HREF="HTAABrow.html">HTAABrow.h</A>"
36: #include "<A HREF="HTStream.html">HTStream.h</A>"
37: #include "<A HREF="HTNet.html">HTNet.h</A>"
2.25 eric 38: #include "<A HREF="HTMIMPrs.html">HTMIMPrs.h</A>"
2.1 frystyk 39: </PRE>
2.23 frystyk 40: <P>
41: When a request is handled, all kinds of things about it need to be passed
42: along together with a request. It is intended to live as long as the request
43: is still active, but can be deleted as soon as it has terminated. Only the
44: anchor object stays around after the request itself is terminated.
2.1 frystyk 45: <PRE>
46: struct _HTRequest {
2.14 frystyk 47:
48: BOOL internal; /* Does the app knows about this one? */
49:
2.33 frystyk 50: time_t date; /* Time stamp when the request was issued */
51:
2.1 frystyk 52: HTMethod method;
53:
2.36 frystyk 54: BOOL flush; /* Should we flush immediately */
55:
2.5 frystyk 56: HTPriority priority; /* Priority for this request */
2.1 frystyk 57: </PRE>
2.23 frystyk 58: <H3>
59: User Profile
60: </H3>
61: <P>
62: Each request can be assigned a <A HREF="HTUser.html">user profile</A> containing
63: information about this host and the user issuing the request.
64: <PRE>
65: HTUserProfile * userprofile;
66: </PRE>
2.35 frystyk 67: <H3>
2.42 frystyk 68: Net Object
2.35 frystyk 69: </H3>
2.42 frystyk 70: <P>
71: Each request is assigned a Net object which contains pointers to other objects
72: handling the request.
2.35 frystyk 73: <PRE>
74: HTNet * net; /* Information about socket etc. */
75: </PRE>
76: <H3>
2.42 frystyk 77: Response Object
2.35 frystyk 78: </H3>
2.42 frystyk 79: <P>
80: When we start getting MIME headers in as a response we keep it in this object
81: until we know what to do with it.
2.35 frystyk 82: <PRE>
83: HTResponse * response;
84: </PRE>
85: <H3>
86: Error Manager
87: </H3>
88: <PRE>
89: HTList * error_stack; /* List of errors */
90: </PRE>
91: <H3>
2.42 frystyk 92: Have many times do We Want to Try?
2.35 frystyk 93: </H3>
94: <PRE>
95: int retrys; /* Number of automatic reloads */
96: int max_forwards;
2.41 kahan 97: int AAretrys; /* Number of authentication
98: retries */
2.35 frystyk 99: </PRE>
100: <H3>
2.41 kahan 101: Preemptive or Non-Preemptive load?
2.35 frystyk 102: </H3>
2.42 frystyk 103: <P>
104: Each protocol module is registered with a default behavior but if you have
105: registered a protocol module for non-preemtive load you can override this
106: by using the following flag.
2.35 frystyk 107: <PRE>
108: BOOL preemptive;
109: </PRE>
110: <H3>
2.42 frystyk 111: Content Negotiation
2.35 frystyk 112: </H3>
2.42 frystyk 113: <P>
114: Normally, when we access the local file system we do content negotiation
115: in order to find the most suited representation. However, you can turn this
116: off by using the following flag.
2.35 frystyk 117: <PRE>
118: BOOL ContentNegotiation;
119: </PRE>
120: <H3>
2.40 frystyk 121: Should we use preconditions?
122: </H3>
123: <PRE>
2.42 frystyk 124: HTPreconditions preconditions;
2.40 frystyk 125: </PRE>
126: <H3>
2.35 frystyk 127: Headers and header information
128: </H3>
2.42 frystyk 129: <P>
2.35 frystyk 130: These are the masks that decides what headers to send.
131: <PRE>
132: HTGnHd GenMask;
133: HTRsHd ResponseMask;
134: HTRqHd RequestMask;
135: HTEnHd EntityMask;
136: </PRE>
137: <H3>
2.42 frystyk 138: Local MIME Header Parsers
2.35 frystyk 139: </H3>
2.42 frystyk 140: <P>
2.35 frystyk 141: Each request can be assigned its own MIME header parsers.
142: <PRE>
143: HTMIMEParseSet * parseSet;
144: BOOL pars_local;
145: </PRE>
2.23 frystyk 146: <H3>
147: Accept headers
148: </H3>
2.42 frystyk 149: <P>
2.35 frystyk 150: These are the accept headers that we want to send out.
2.1 frystyk 151: <PRE>
152: HTList * conversions;
153: BOOL conv_local;
154:
155: HTList * encodings;
156: BOOL enc_local;
157:
2.38 frystyk 158: HTList * tes;
159: BOOL te_local;
2.21 frystyk 160:
2.1 frystyk 161: HTList * languages;
162: BOOL lang_local;
163:
164: HTList * charsets;
165: BOOL char_local;
2.20 hallam 166:
167: HTList * befores;
168: BOOL befores_local;
169:
170: HTList * afters;
171: BOOL afters_local;
2.1 frystyk 172: </PRE>
2.35 frystyk 173: <H3>
2.42 frystyk 174: Are we using a Proxy?
2.35 frystyk 175: </H3>
2.42 frystyk 176: <P>
2.35 frystyk 177: If so then we keep the name in this variable
178: <PRE>
179: char * proxy;
180: BOOL full_uri;
181: </PRE>
182: <H3>
183: Cache Control Directives
184: </H3>
185: <P>
186: This association list is a list of the cache control directives that are
187: to be sent as part of the <CODE>Cache-Control</CODE> header.
188: <PRE>
189: HTReload reload;
190: HTAssocList * cache_control;
191: </PRE>
2.23 frystyk 192: <H3>
2.42 frystyk 193: Byte Ranges
2.35 frystyk 194: </H3>
2.42 frystyk 195: <P>
2.35 frystyk 196: This association list is a list of the cache control directives that are
197: to be sent as part of the <CODE>Range</CODE> header.
198: <PRE>
199: HTAssocList * byte_ranges;
200: </PRE>
201: <H3>
202: Connection Control Directives
203: </H3>
204: <P>
205: This association list is a list of the connection control directives that
206: are to be sent as part of the <CODE>Connection</CODE> header.
207: <PRE>
208: HTAssocList * connection;
209: </PRE>
210: <H3>
2.38 frystyk 211: Expect Directives
212: </H3>
213: <P>
2.42 frystyk 214: The Expect request-header field is used to indicate that particular server
215: behaviors are required by the client. A server that does not understand or
216: is unable to comply with any of the expectation values in the Expect field
217: of a request MUST respond with appropriate error status.
2.38 frystyk 218: <PRE>
219: HTAssocList * expect;
220: </PRE>
221: <H3>
2.35 frystyk 222: Access Authentication Information
2.23 frystyk 223: </H3>
2.35 frystyk 224: <P>
2.42 frystyk 225: The <CODE>credentials</CODE> list contains the information that we are to
226: send as part of the <CODE>Authorization</CODE> header. The realm is if we
227: already know that we need to generate credentials for a specific realm.
2.1 frystyk 228: <PRE>
2.35 frystyk 229: char * realm; /* Current realm */
230: HTAssocList * credentials; /* Credentials received by server */
231: </PRE>
232: <H3>
2.44 ! frystyk 233: Request Header Extensibility
2.35 frystyk 234: </H3>
2.42 frystyk 235: <P>
2.44 ! frystyk 236: <HR>
! 237: <H4>
! 238: 1) Simple Association List
! 239: </H4>
! 240: <P>
! 241: Add the (name, value) and it will be converted into MIME header format as
! 242: <CODE>name: value</CODE>. DO NOT ADD CRLF line termination - this is done
! 243: by the <A HREF="HTTPReq.html">HTTP header generator stream</A>
! 244: <PRE>
! 245: HTAssocList * extra_headers;
! 246: </PRE>
! 247: <H4>
! 248: 2) Stream Oriented Header Generators
! 249: </H4>
! 250: <P>
! 251: A generator is a stream with direct access to the output stream
! 252: <PRE>
! 253: HTList * generators;
! 254: BOOL gens_local;
! 255: </PRE>
! 256: <H4>
! 257: 4) HTTP Extension Framework
! 258: </H4>
! 259: <P>
! 260: These association lists contain the information that we are to send as
! 261: <A HREF="/Protocols/HTTP/ietf-http-ext/">HTTP Extension Framework</A>.
2.35 frystyk 262: <PRE>
2.44 ! frystyk 263: HTAssocList * mandatory;
! 264: HTAssocList * optional;
2.1 frystyk 265: </PRE>
2.23 frystyk 266: <H3>
267: Anchors
268: </H3>
2.1 frystyk 269: <PRE>
2.10 frystyk 270: HTParentAnchor * anchor; /* The Client anchor for this request */
271:
2.1 frystyk 272: HTChildAnchor * childAnchor; /* For element within the object */
273: HTParentAnchor * parentAnchor; /* For referer field */
274: </PRE>
2.23 frystyk 275: <H3>
276: Streams From Network to Application
277: </H3>
2.1 frystyk 278: <PRE>
279: HTStream * output_stream;
2.43 frystyk 280: HTStream * orig_output_stream;
2.1 frystyk 281: HTFormat output_format;
2.26 frystyk 282: BOOL connected;
2.1 frystyk 283:
2.43 frystyk 284: HTStream * debug_stream;
285: HTStream * orig_debug_stream;
2.1 frystyk 286: HTFormat debug_format;
287: </PRE>
2.23 frystyk 288: <H3>
289: Streams From Application to Network
290: </H3>
2.1 frystyk 291: <PRE>
292: HTStream * input_stream;
293: HTFormat input_format;
294: </PRE>
2.23 frystyk 295: <H3>
296: Callback Function for getting data down the Input Stream
297: </H3>
2.1 frystyk 298: <PRE>
2.5 frystyk 299: HTPostCallback * PostCallback;
2.1 frystyk 300: </PRE>
2.23 frystyk 301: <H3>
302: Context Swapping
303: </H3>
2.1 frystyk 304: <PRE>
305: HTRequestCallback * callback;
306: void * context;
307: </PRE>
2.23 frystyk 308: <H3>
2.44 ! frystyk 309: PostWeb Information (Not used anymore - don't use!)
2.23 frystyk 310: </H3>
2.1 frystyk 311: <PRE>
312: HTRequest * source; /* Source for request or itself */
2.16 frystyk 313: HTParentAnchor * source_anchor; /* Source anchor or itself */
314:
2.1 frystyk 315: HTRequest * mainDestination; /* For the typical case */
316: HTList * destinations; /* List of related requests */
317: int destRequests; /* Number of destination requests */
318: int destStreams; /* Number of destination streams */
319: </PRE>
320: <PRE>
321: };
322: </PRE>
2.23 frystyk 323: <H2>
324: Post Web Management
325: </H2>
326: <P>
327: These functions are mainly used internally in the Library but there is no
328: reason for them not to be public.
2.1 frystyk 329: <PRE>
330: extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest);
331: extern BOOL HTRequest_removeDestination (HTRequest * dest);
2.14 frystyk 332: extern BOOL HTRequest_destinationsReady (HTRequest * me);
2.1 frystyk 333:
334: extern BOOL HTRequest_linkDestination (HTRequest * dest);
335: extern BOOL HTRequest_unlinkDestination (HTRequest * dest);
336:
337: extern BOOL HTRequest_removePostWeb (HTRequest * me);
338: extern BOOL HTRequest_killPostWeb (HTRequest * me);
339:
340: #define HTRequest_mainDestination(me) \
2.23 frystyk 341: ((me) && (me)->source ? (me)->source->mainDestination : NULL)
2.1 frystyk 342: #define HTRequest_isDestination(me) \
2.23 frystyk 343: ((me) && (me)->source && (me) != (me)->source)
2.1 frystyk 344: #define HTRequest_isMainDestination(me) \
2.23 frystyk 345: ((me) && (me)->source && \
346: (me) == (me)->source->mainDestination)
2.1 frystyk 347: #define HTRequest_isSource(me) \
2.23 frystyk 348: ((me) && (me)->source && (me) == (me)->source)
2.1 frystyk 349: </PRE>
2.23 frystyk 350: <P>
2.1 frystyk 351: End of Declaration
352: <PRE>
353: #endif /* HTREQMAN_H */
354: </PRE>
2.23 frystyk 355: <P>
356: <HR>
2.21 frystyk 357: <ADDRESS>
2.44 ! frystyk 358: @(#) $Id: HTReqMan.html,v 2.43 1999/02/01 18:41:11 frystyk Exp $
2.21 frystyk 359: </ADDRESS>
2.23 frystyk 360: </BODY></HTML>
Webmaster