Annotation of libwww/Library/src/HTReqMan.html, revision 2.41

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: 
                     68: <H3>
                     69: Net Object
                     70: </H3>
                     71: Each request is assigned a Net object which contains pointers to other objects handling the request.
                     72: <PRE>
                     73:     HTNet *            net;                /* Information about socket etc. */
                     74: </PRE>
                     75: 
                     76: <H3>
                     77: Response Object
                     78: </H3>
                     79: 
                     80: When we start getting MIME headers in as a response we keep it in this object until we know what to do with it.
                     81: 
                     82: <PRE>
                     83:     HTResponse *        response;
                     84: </PRE>
                     85: 
                     86: <H3>
                     87:   Error Manager
                     88: </H3>
                     89: <PRE>
                     90:     HTList *           error_stack;                       /* List of errors */
                     91: </PRE>
                     92: 
                     93: <H3>
                     94: Have many times do We Want to Try?
                     95: </H3>
                     96: 
                     97: <PRE>
                     98:     int                        retrys;               /* Number of automatic reloads */
                     99:     int                 max_forwards;
2.41    ! kahan     100:     int                        AAretrys;             /* Number of authentication
        !           101:                                                  retries */
2.35      frystyk   102: </PRE>
                    103: 
                    104: <H3>
2.41    ! kahan     105:   Preemptive or Non-Preemptive load?
2.35      frystyk   106: </H3>
                    107: 
                    108: Each protocol module is registered with a default behavior but if you have registered a protocol module for non-preemtive load you can override this by using the following flag.
                    109: 
                    110: <PRE>
                    111:     BOOL               preemptive;
                    112: </PRE>
                    113: 
                    114: <H3>
                    115: Content Negotiation
                    116: </H3>
                    117: 
                    118: Normally, when we access the local file system we do content negotiation in order to find the most suited representation. However, you can turn this off by using the following flag.
                    119: 
                    120: <PRE>
                    121:     BOOL               ContentNegotiation;
                    122: </PRE>
                    123: 
                    124: <H3>
2.40      frystyk   125:   Should we use preconditions?
                    126: </H3>
                    127: <PRE>
                    128:     BOOL                preconditions;
                    129: </PRE>
                    130: 
                    131: <H3>
2.35      frystyk   132:   Headers and header information
                    133: </H3>
                    134: 
                    135: These are the masks that decides what headers to send.
                    136: 
                    137: <PRE>
                    138:     HTGnHd             GenMask;
                    139:     HTRsHd             ResponseMask;
                    140:     HTRqHd             RequestMask;
                    141:     HTEnHd             EntityMask;
                    142: 
                    143:     HTList *           generators;
                    144:     BOOL               gens_local;
                    145: </PRE>
                    146: 
                    147: <H3>
                    148: Local MIME Header Parsers 
                    149: </H3>
                    150: 
                    151: Each request can be assigned its own MIME header parsers.
                    152: 
                    153: <PRE>
                    154:     HTMIMEParseSet *   parseSet;
                    155:     BOOL               pars_local;
                    156: </PRE>
                    157: 
2.23      frystyk   158: <H3>
                    159:   Accept headers
                    160: </H3>
2.35      frystyk   161: 
                    162: These are the accept headers that we want to send out.
                    163: 
2.1       frystyk   164: <PRE>
                    165:     HTList *           conversions;
                    166:     BOOL               conv_local;
                    167: 
                    168:     HTList *           encodings;
                    169:     BOOL               enc_local;
                    170: 
2.38      frystyk   171:     HTList *           tes;
                    172:     BOOL               te_local;
2.21      frystyk   173: 
2.1       frystyk   174:     HTList *           languages;
                    175:     BOOL               lang_local;
                    176: 
                    177:     HTList *           charsets;
                    178:     BOOL               char_local;
2.20      hallam    179: 
                    180:     HTList *           befores;
                    181:     BOOL               befores_local;
                    182: 
                    183:     HTList *           afters;
                    184:     BOOL               afters_local;
2.1       frystyk   185: </PRE>
2.35      frystyk   186: 
                    187: <H3>
                    188: Are we using a Proxy?
                    189: </H3>
                    190: 
                    191: If so then we keep the name in this variable
                    192: 
                    193: <PRE>
                    194:     char *             proxy;
                    195:     BOOL                full_uri;
                    196: </PRE>
                    197: 
                    198: <H3>
                    199:   Cache Control Directives
                    200: </H3>
                    201: <P>
                    202: This association list is a list of the cache control directives that are
                    203: to be sent as part of the <CODE>Cache-Control</CODE> header.
                    204: <PRE>
                    205:     HTReload           reload;
                    206:     HTAssocList *       cache_control;
                    207: </PRE>
                    208: 
2.23      frystyk   209: <H3>
2.35      frystyk   210: Byte Ranges
                    211: </H3>
                    212: 
                    213: This association list is a list of the cache control directives that are
                    214: to be sent as part of the <CODE>Range</CODE> header.
                    215: 
                    216: <PRE>
                    217:     HTAssocList *       byte_ranges;
                    218: </PRE>
                    219: 
                    220: <H3>
                    221:   Connection Control Directives
                    222: </H3>
                    223: <P>
                    224: This association list is a list of the connection control directives that
                    225: are to be sent as part of the <CODE>Connection</CODE> header.
                    226: 
                    227: <PRE>
                    228:     HTAssocList *       connection;
                    229: </PRE>
                    230: <H3>
2.38      frystyk   231:   Expect Directives
                    232: </H3>
                    233: <P>
                    234: The Expect request-header field is used to indicate that particular
                    235: server behaviors are required by the client.  A server that does not
                    236: understand or is unable to comply with any of the expectation values in
                    237: the Expect field of a request MUST respond with appropriate error
                    238: status.
                    239: 
                    240: <PRE>
                    241:     HTAssocList *       expect;
                    242: </PRE>
                    243: <H3>
2.35      frystyk   244:   Access Authentication Information
2.23      frystyk   245: </H3>
2.35      frystyk   246: <P>
                    247: The <CODE>credentials</CODE> list contains the information that we are to send as part of the <CODE>Authorization</CODE> header. The realm is if we already know that we need to generate credentials for a specific realm.
2.1       frystyk   248: <PRE>
2.35      frystyk   249:     char *             realm;                              /* Current realm */
                    250:     HTAssocList *      credentials;       /* Credentials received by server */
                    251: </PRE>
                    252: <H3>
                    253:   Protocol Extension Protocol (PEP) Information
                    254: </H3>
2.5       frystyk   255: 
2.35      frystyk   256: These association lists contain the information that we are to send as PEP headers in the request.
2.5       frystyk   257: 
2.35      frystyk   258: <PRE>
                    259:     HTAssocList *      protocol;
                    260:     HTAssocList *      protocol_info;
                    261:     HTAssocList *      protocol_request;
2.1       frystyk   262: </PRE>
2.35      frystyk   263: 
2.23      frystyk   264: <H3>
                    265:   Anchors
                    266: </H3>
2.1       frystyk   267: <PRE>
2.10      frystyk   268:     HTParentAnchor *   anchor;        /* The Client anchor for this request */
                    269: 
2.1       frystyk   270:     HTChildAnchor *    childAnchor;        /* For element within the object */
                    271:     HTParentAnchor *   parentAnchor;                   /* For referer field */
                    272: </PRE>
2.23      frystyk   273: <H3>
                    274:   Streams From Network to Application
                    275: </H3>
2.1       frystyk   276: <PRE>
                    277:     HTStream *         output_stream; 
                    278:     HTFormat           output_format;
2.26      frystyk   279:     BOOL               connected;
2.1       frystyk   280: 
                    281:     HTStream*          debug_stream;
                    282:     HTFormat           debug_format;
                    283: </PRE>
2.23      frystyk   284: <H3>
                    285:   Streams From Application to Network
                    286: </H3>
2.1       frystyk   287: <PRE>
                    288:     HTStream *         input_stream; 
                    289:     HTFormat           input_format;
                    290: </PRE>
2.23      frystyk   291: <H3>
                    292:   Callback Function for getting data down the Input Stream
                    293: </H3>
2.1       frystyk   294: <PRE>
2.5       frystyk   295:     HTPostCallback *   PostCallback;
2.1       frystyk   296: </PRE>
2.23      frystyk   297: <H3>
                    298:   Context Swapping
                    299: </H3>
2.1       frystyk   300: <PRE>
                    301:     HTRequestCallback *        callback;
                    302:     void *             context;
                    303: </PRE>
2.23      frystyk   304: <H3>
                    305:   PostWeb Information
                    306: </H3>
2.1       frystyk   307: <PRE>
                    308:     HTRequest *                source;              /* Source for request or itself */
2.16      frystyk   309:     HTParentAnchor *   source_anchor;            /* Source anchor or itself */
                    310: 
2.1       frystyk   311:     HTRequest *                mainDestination;             /* For the typical case */
                    312:     HTList *           destinations;            /* List of related requests */
                    313:     int                        destRequests;      /* Number of destination requests */
                    314:     int                        destStreams;        /* Number of destination streams */
                    315: </PRE>
                    316: <PRE>
                    317: };
                    318: </PRE>
2.23      frystyk   319: <H2>
                    320:   Post Web Management
                    321: </H2>
                    322: <P>
                    323: These functions are mainly used internally in the Library but there is no
                    324: reason for them not to be public.
2.1       frystyk   325: <PRE>
                    326: extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest);
                    327: extern BOOL HTRequest_removeDestination        (HTRequest * dest);
2.14      frystyk   328: extern BOOL HTRequest_destinationsReady (HTRequest * me);
2.1       frystyk   329: 
                    330: extern BOOL HTRequest_linkDestination (HTRequest * dest);
                    331: extern BOOL HTRequest_unlinkDestination (HTRequest * dest);
                    332: 
                    333: extern BOOL HTRequest_removePostWeb (HTRequest * me);
                    334: extern BOOL HTRequest_killPostWeb (HTRequest * me);
                    335: 
                    336: #define        HTRequest_mainDestination(me) \
2.23      frystyk   337:        ((me) &amp;&amp; (me)-&gt;source ? (me)-&gt;source-&gt;mainDestination : NULL)
2.1       frystyk   338: #define HTRequest_isDestination(me) \
2.23      frystyk   339:        ((me) &amp;&amp; (me)-&gt;source &amp;&amp; (me) != (me)-&gt;source)
2.1       frystyk   340: #define HTRequest_isMainDestination(me) \
2.23      frystyk   341:        ((me) &amp;&amp; (me)-&gt;source &amp;&amp; \
                    342:        (me) == (me)-&gt;source-&gt;mainDestination)
2.1       frystyk   343: #define HTRequest_isSource(me) \
2.23      frystyk   344:        ((me) &amp;&amp; (me)-&gt;source &amp;&amp; (me) == (me)-&gt;source)
2.1       frystyk   345: </PRE>
2.23      frystyk   346: <P>
2.1       frystyk   347: End of Declaration
                    348: <PRE>
                    349: #endif /* HTREQMAN_H */
                    350: </PRE>
2.23      frystyk   351: <P>
                    352:   <HR>
2.21      frystyk   353: <ADDRESS>
2.41    ! kahan     354:   @(#) $Id: HTReqMan.html,v 1.2 1998/10/08 18:13:51 cvs Exp $
2.21      frystyk   355: </ADDRESS>
2.23      frystyk   356: </BODY></HTML>

Webmaster