Annotation of libwww/Library/src/HTReqMan.html, revision 2.43
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:
137: HTList * generators;
138: BOOL gens_local;
139: </PRE>
140: <H3>
2.42 frystyk 141: Local MIME Header Parsers
2.35 frystyk 142: </H3>
2.42 frystyk 143: <P>
2.35 frystyk 144: Each request can be assigned its own MIME header parsers.
145: <PRE>
146: HTMIMEParseSet * parseSet;
147: BOOL pars_local;
148: </PRE>
2.23 frystyk 149: <H3>
150: Accept headers
151: </H3>
2.42 frystyk 152: <P>
2.35 frystyk 153: These are the accept headers that we want to send out.
2.1 frystyk 154: <PRE>
155: HTList * conversions;
156: BOOL conv_local;
157:
158: HTList * encodings;
159: BOOL enc_local;
160:
2.38 frystyk 161: HTList * tes;
162: BOOL te_local;
2.21 frystyk 163:
2.1 frystyk 164: HTList * languages;
165: BOOL lang_local;
166:
167: HTList * charsets;
168: BOOL char_local;
2.20 hallam 169:
170: HTList * befores;
171: BOOL befores_local;
172:
173: HTList * afters;
174: BOOL afters_local;
2.1 frystyk 175: </PRE>
2.35 frystyk 176: <H3>
2.42 frystyk 177: Are we using a Proxy?
2.35 frystyk 178: </H3>
2.42 frystyk 179: <P>
2.35 frystyk 180: If so then we keep the name in this variable
181: <PRE>
182: char * proxy;
183: BOOL full_uri;
184: </PRE>
185: <H3>
186: Cache Control Directives
187: </H3>
188: <P>
189: This association list is a list of the cache control directives that are
190: to be sent as part of the <CODE>Cache-Control</CODE> header.
191: <PRE>
192: HTReload reload;
193: HTAssocList * cache_control;
194: </PRE>
2.23 frystyk 195: <H3>
2.42 frystyk 196: Byte Ranges
2.35 frystyk 197: </H3>
2.42 frystyk 198: <P>
2.35 frystyk 199: This association list is a list of the cache control directives that are
200: to be sent as part of the <CODE>Range</CODE> header.
201: <PRE>
202: HTAssocList * byte_ranges;
203: </PRE>
204: <H3>
205: Connection Control Directives
206: </H3>
207: <P>
208: This association list is a list of the connection control directives that
209: are to be sent as part of the <CODE>Connection</CODE> header.
210: <PRE>
211: HTAssocList * connection;
212: </PRE>
213: <H3>
2.38 frystyk 214: Expect Directives
215: </H3>
216: <P>
2.42 frystyk 217: The Expect request-header field is used to indicate that particular server
218: behaviors are required by the client. A server that does not understand or
219: is unable to comply with any of the expectation values in the Expect field
220: of a request MUST respond with appropriate error status.
2.38 frystyk 221: <PRE>
222: HTAssocList * expect;
223: </PRE>
224: <H3>
2.35 frystyk 225: Access Authentication Information
2.23 frystyk 226: </H3>
2.35 frystyk 227: <P>
2.42 frystyk 228: The <CODE>credentials</CODE> list contains the information that we are to
229: send as part of the <CODE>Authorization</CODE> header. The realm is if we
230: already know that we need to generate credentials for a specific realm.
2.1 frystyk 231: <PRE>
2.35 frystyk 232: char * realm; /* Current realm */
233: HTAssocList * credentials; /* Credentials received by server */
234: </PRE>
235: <H3>
236: Protocol Extension Protocol (PEP) Information
237: </H3>
2.42 frystyk 238: <P>
239: These association lists contain the information that we are to send as PEP
240: headers in the request.
2.35 frystyk 241: <PRE>
242: HTAssocList * protocol;
243: HTAssocList * protocol_info;
244: HTAssocList * protocol_request;
2.1 frystyk 245: </PRE>
2.23 frystyk 246: <H3>
247: Anchors
248: </H3>
2.1 frystyk 249: <PRE>
2.10 frystyk 250: HTParentAnchor * anchor; /* The Client anchor for this request */
251:
2.1 frystyk 252: HTChildAnchor * childAnchor; /* For element within the object */
253: HTParentAnchor * parentAnchor; /* For referer field */
254: </PRE>
2.23 frystyk 255: <H3>
256: Streams From Network to Application
257: </H3>
2.1 frystyk 258: <PRE>
259: HTStream * output_stream;
2.43 ! frystyk 260: HTStream * orig_output_stream;
2.1 frystyk 261: HTFormat output_format;
2.26 frystyk 262: BOOL connected;
2.1 frystyk 263:
2.43 ! frystyk 264: HTStream * debug_stream;
! 265: HTStream * orig_debug_stream;
2.1 frystyk 266: HTFormat debug_format;
267: </PRE>
2.23 frystyk 268: <H3>
269: Streams From Application to Network
270: </H3>
2.1 frystyk 271: <PRE>
272: HTStream * input_stream;
273: HTFormat input_format;
274: </PRE>
2.23 frystyk 275: <H3>
276: Callback Function for getting data down the Input Stream
277: </H3>
2.1 frystyk 278: <PRE>
2.5 frystyk 279: HTPostCallback * PostCallback;
2.1 frystyk 280: </PRE>
2.23 frystyk 281: <H3>
282: Context Swapping
283: </H3>
2.1 frystyk 284: <PRE>
285: HTRequestCallback * callback;
286: void * context;
287: </PRE>
2.23 frystyk 288: <H3>
289: PostWeb Information
290: </H3>
2.1 frystyk 291: <PRE>
292: HTRequest * source; /* Source for request or itself */
2.16 frystyk 293: HTParentAnchor * source_anchor; /* Source anchor or itself */
294:
2.1 frystyk 295: HTRequest * mainDestination; /* For the typical case */
296: HTList * destinations; /* List of related requests */
297: int destRequests; /* Number of destination requests */
298: int destStreams; /* Number of destination streams */
299: </PRE>
300: <PRE>
301: };
302: </PRE>
2.23 frystyk 303: <H2>
304: Post Web Management
305: </H2>
306: <P>
307: These functions are mainly used internally in the Library but there is no
308: reason for them not to be public.
2.1 frystyk 309: <PRE>
310: extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest);
311: extern BOOL HTRequest_removeDestination (HTRequest * dest);
2.14 frystyk 312: extern BOOL HTRequest_destinationsReady (HTRequest * me);
2.1 frystyk 313:
314: extern BOOL HTRequest_linkDestination (HTRequest * dest);
315: extern BOOL HTRequest_unlinkDestination (HTRequest * dest);
316:
317: extern BOOL HTRequest_removePostWeb (HTRequest * me);
318: extern BOOL HTRequest_killPostWeb (HTRequest * me);
319:
320: #define HTRequest_mainDestination(me) \
2.23 frystyk 321: ((me) && (me)->source ? (me)->source->mainDestination : NULL)
2.1 frystyk 322: #define HTRequest_isDestination(me) \
2.23 frystyk 323: ((me) && (me)->source && (me) != (me)->source)
2.1 frystyk 324: #define HTRequest_isMainDestination(me) \
2.23 frystyk 325: ((me) && (me)->source && \
326: (me) == (me)->source->mainDestination)
2.1 frystyk 327: #define HTRequest_isSource(me) \
2.23 frystyk 328: ((me) && (me)->source && (me) == (me)->source)
2.1 frystyk 329: </PRE>
2.23 frystyk 330: <P>
2.1 frystyk 331: End of Declaration
332: <PRE>
333: #endif /* HTREQMAN_H */
334: </PRE>
2.23 frystyk 335: <P>
336: <HR>
2.21 frystyk 337: <ADDRESS>
2.43 ! frystyk 338: @(#) $Id: HTReqMan.html,v 2.42 1998/11/19 17:14:39 frystyk Exp $
2.21 frystyk 339: </ADDRESS>
2.23 frystyk 340: </BODY></HTML>
Webmaster