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

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

Webmaster