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

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.22      frystyk   162:     HTList *           ctes;
                    163:     BOOL               cte_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>
                    222:   Access Authentication Information
2.23      frystyk   223: </H3>
2.35      frystyk   224: <P>
                    225: 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   226: <PRE>
2.35      frystyk   227:     char *             realm;                              /* Current realm */
                    228:     HTAssocList *      credentials;       /* Credentials received by server */
                    229: </PRE>
                    230: <H3>
                    231:   Protocol Extension Protocol (PEP) Information
                    232: </H3>
2.5       frystyk   233: 
2.35      frystyk   234: These association lists contain the information that we are to send as PEP headers in the request.
2.5       frystyk   235: 
2.35      frystyk   236: <PRE>
                    237:     HTAssocList *      protocol;
                    238:     HTAssocList *      protocol_info;
                    239:     HTAssocList *      protocol_request;
2.1       frystyk   240: </PRE>
2.35      frystyk   241: 
2.23      frystyk   242: <H3>
                    243:   Anchors
                    244: </H3>
2.1       frystyk   245: <PRE>
2.10      frystyk   246:     HTParentAnchor *   anchor;        /* The Client anchor for this request */
                    247: 
2.1       frystyk   248:     HTChildAnchor *    childAnchor;        /* For element within the object */
                    249:     HTParentAnchor *   parentAnchor;                   /* For referer field */
                    250: </PRE>
2.23      frystyk   251: <H3>
                    252:   Streams From Network to Application
                    253: </H3>
2.1       frystyk   254: <PRE>
                    255:     HTStream *         output_stream; 
                    256:     HTFormat           output_format;
2.26      frystyk   257:     BOOL               connected;
2.1       frystyk   258: 
                    259:     HTStream*          debug_stream;
                    260:     HTFormat           debug_format;
                    261: </PRE>
2.23      frystyk   262: <H3>
                    263:   Streams From Application to Network
                    264: </H3>
2.1       frystyk   265: <PRE>
                    266:     HTStream *         input_stream; 
                    267:     HTFormat           input_format;
                    268: </PRE>
2.23      frystyk   269: <H3>
                    270:   Callback Function for getting data down the Input Stream
                    271: </H3>
2.1       frystyk   272: <PRE>
2.5       frystyk   273:     HTPostCallback *   PostCallback;
2.1       frystyk   274: </PRE>
2.23      frystyk   275: <H3>
                    276:   Context Swapping
                    277: </H3>
2.1       frystyk   278: <PRE>
                    279:     HTRequestCallback *        callback;
                    280:     void *             context;
                    281: </PRE>
2.23      frystyk   282: <H3>
                    283:   PostWeb Information
                    284: </H3>
2.1       frystyk   285: <PRE>
                    286:     HTRequest *                source;              /* Source for request or itself */
2.16      frystyk   287:     HTParentAnchor *   source_anchor;            /* Source anchor or itself */
                    288: 
2.1       frystyk   289:     HTRequest *                mainDestination;             /* For the typical case */
                    290:     HTList *           destinations;            /* List of related requests */
                    291:     int                        destRequests;      /* Number of destination requests */
                    292:     int                        destStreams;        /* Number of destination streams */
                    293: </PRE>
                    294: <PRE>
                    295: };
                    296: </PRE>
2.23      frystyk   297: <H2>
                    298:   Post Web Management
                    299: </H2>
                    300: <P>
                    301: These functions are mainly used internally in the Library but there is no
                    302: reason for them not to be public.
2.1       frystyk   303: <PRE>
                    304: extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest);
                    305: extern BOOL HTRequest_removeDestination        (HTRequest * dest);
2.14      frystyk   306: extern BOOL HTRequest_destinationsReady (HTRequest * me);
2.1       frystyk   307: 
                    308: extern BOOL HTRequest_linkDestination (HTRequest * dest);
                    309: extern BOOL HTRequest_unlinkDestination (HTRequest * dest);
                    310: 
                    311: extern BOOL HTRequest_removePostWeb (HTRequest * me);
                    312: extern BOOL HTRequest_killPostWeb (HTRequest * me);
                    313: 
                    314: #define        HTRequest_mainDestination(me) \
2.23      frystyk   315:        ((me) &amp;&amp; (me)-&gt;source ? (me)-&gt;source-&gt;mainDestination : NULL)
2.1       frystyk   316: #define HTRequest_isDestination(me) \
2.23      frystyk   317:        ((me) &amp;&amp; (me)-&gt;source &amp;&amp; (me) != (me)-&gt;source)
2.1       frystyk   318: #define HTRequest_isMainDestination(me) \
2.23      frystyk   319:        ((me) &amp;&amp; (me)-&gt;source &amp;&amp; \
                    320:        (me) == (me)-&gt;source-&gt;mainDestination)
2.1       frystyk   321: #define HTRequest_isSource(me) \
2.23      frystyk   322:        ((me) &amp;&amp; (me)-&gt;source &amp;&amp; (me) == (me)-&gt;source)
2.1       frystyk   323: </PRE>
2.23      frystyk   324: <P>
2.1       frystyk   325: End of Declaration
                    326: <PRE>
                    327: #endif /* HTREQMAN_H */
                    328: </PRE>
2.23      frystyk   329: <P>
                    330:   <HR>
2.21      frystyk   331: <ADDRESS>
2.37    ! frystyk   332:   @(#) $Id: HTReqMan.html,v 2.36 1996/12/03 14:49:12 frystyk Exp $
2.21      frystyk   333: </ADDRESS>
2.23      frystyk   334: </BODY></HTML>

Webmaster