File:  [Public] / libwww / Library / src / HTReqMan.html
Revision 2.33: download - view: text, annotated - select for diffs
Sun Sep 8 22:08:44 1996 UTC (27 years, 9 months ago) by frystyk
Branches: MAIN
CVS tags: Release-5-0, HEAD
Persistent Cache

<HTML>
<HEAD>
  <!-- Changed by: Henrik Frystyk Nielsen, 15-Jul-1996 -->
  <TITLE>W3C Reference Library libwww Private Request Definition</TITLE>
</HEAD>
<BODY>
<H1>
  Private Request Definition
</H1>
<PRE>
/*
**	(c) COPYRIGHT MIT 1995.
**	Please first read the full copyright statement in the file COPYRIGH.
*/
</PRE>
<P>
This module is the private part of the request object. It has the functions
declarations that are private to the Library and that shouldn't be used by
applications. The module has been separated from the old HTAccess module.
See also the public part of the declarition in the <A HREF="HTReq.html">HTReq
Module</A>.
<P>
This module is implemented by <A HREF="HTReqMan.c">HTReqMan.c</A>, and it
is a part of the <A HREF="http://www.w3.org/pub/WWW/Library/"> W3C Reference
Library</A>.
<PRE>
#ifndef HTREQMAN_H
#define HTREQMAN_H

#include "<A HREF="HTReq.html">HTReq.h</A>"
#include "<A HREF="HTList.html">HTList.h</A>"
#include "<A HREF="HTFormat.html">HTFormat.h</A>"
#include "<A HREF="HTAnchor.html">HTAnchor.h</A>"
#include "<A HREF="HTMethod.html">HTMethod.h</A>"
#include "<A HREF="HTAABrow.html">HTAABrow.h</A>"
#include "<A HREF="HTStream.html">HTStream.h</A>"
#include "<A HREF="HTNet.html">HTNet.h</A>"
#include "<A HREF="HTMIMPrs.html">HTMIMPrs.h</A>"
</PRE>
<P>
When a request is handled, all kinds of things about it need to be passed
along together with a request. It is intended to live as long as the request
is still active, but can be deleted as soon as it has terminated. Only the
anchor object stays around after the request itself is terminated.
<PRE>
struct _HTRequest {

    BOOL		internal;      /* Does the app knows about this one? */

    time_t		date;      /* Time stamp when the request was issued */

    HTMethod		method;
    HTReload		reload;

    int			retrys;       	      /* Number of automatic reloads */
    time_t		retry_after;		 /* Absolut time for a retry */
    HTNet *		net;		    /* Information about socket etc. */
    HTPriority		priority;		/* Priority for this request */
</PRE>
<H3>
  User Profile
</H3>
<P>
Each request can be assigned a <A HREF="HTUser.html">user profile</A> containing
information about this host and the user issuing the request.
<PRE>
    HTUserProfile *	userprofile;
</PRE>
<H3>
  Accept headers
</H3>
<PRE>
    HTList *		conversions;
    BOOL		conv_local;

    HTList *		encodings;
    BOOL		enc_local;

    HTList *		ctes;
    BOOL		cte_local;

    HTList *		languages;
    BOOL		lang_local;

    HTList *		charsets;
    BOOL		char_local;

    HTList *		befores;
    BOOL		befores_local;

    HTList *		afters;
    BOOL		afters_local;
</PRE>
<H3>
  Headers and header information
</H3>
<PRE>
    HTGnHd		GenMask;
    HTRsHd		ResponseMask;
    HTRqHd		RequestMask;
    HTEnHd		EntityMask;

    HTMIMEParseSet *	parseSet;
    BOOL		pars_local;

    HTList *		generators;
    BOOL		gens_local;
</PRE>
<H3>
  Anchors
</H3>
<PRE>
    HTParentAnchor *	anchor;	       /* The Client anchor for this request */

    HTChildAnchor *	childAnchor;	    /* For element within the object */
    HTParentAnchor *	parentAnchor;			/* For referer field */
</PRE>
<H4>
  Redirection
</H4>
<P>
If we get a redirection back then we return the new destination for this
request to the application using this anchor.
<PRE>
    HTAnchor *		redirectionAnchor;		  /* Redirection URL */
</PRE>
<H3>
  Streams From Network to Application
</H3>
<PRE>
    HTStream *		output_stream; 
    HTFormat		output_format;
    BOOL		connected;

    HTStream*		debug_stream;
    HTFormat		debug_format;
</PRE>
<H3>
  Streams From Application to Network
</H3>
<PRE>
    HTStream *		input_stream; 
    HTFormat		input_format;
</PRE>
<H3>
  Callback Function for getting data down the Input Stream
</H3>
<PRE>
    HTPostCallback *	PostCallback;
</PRE>
<H3>
  Context Swapping
</H3>
<PRE>
    HTRequestCallback *	callback;
    void *		context;
</PRE>
<H3>
  Other Flags
</H3>
<PRE>
    BOOL		preemptive;
    BOOL		ContentNegotiation;

    BOOL                full_uri;
    char * 		proxy;

    int                 max_forwards;
</PRE>
<H3>
  Error Manager
</H3>
<PRE>
    HTList *		error_stack;		           /* List of errors */
</PRE>
<H3>
  PostWeb Information
</H3>
<PRE>
    HTRequest *		source;		     /* Source for request or itself */
    HTParentAnchor *	source_anchor;		  /* Source anchor or itself */

    HTRequest *		mainDestination;	     /* For the typical case */
    HTList *		destinations;		 /* List of related requests */
    int			destRequests;	   /* Number of destination requests */
    int			destStreams;	    /* Number of destination streams */
</PRE>
<H3>
  Cache Control Directives
</H3>
<P>
This association list is a list of the cache control directives that are
to be sent as part of the <CODE>Cache-Control</CODE> header.
<CODE>Cache-control</CODE> directives can be sent in both directions - we
keep the out-going ones here and the incoming becomes part of the
<A HREF="HTAnchor.html">anchor object</A>.
<PRE>
    HTAssocList *       cache_control;
</PRE>
<H3>
  Original Header Values
</H3>
<P>
The cache uses (for the moment) the original header values when it creates
a cache entry. We can pass the headers to the cache manager using this list
<PRE>
    HTAssocList *      headers;
</PRE>
<H3>
  Connection Control Directives
</H3>
<P>
This association list is a list of the connection control directives that
are to be sent as part of the <CODE>Connection</CODE> header.
<CODE>Connection</CODE> directives can be sent in both directions - that
is - from the server to the client and vise-verse. In order to separate outgoing
from incoming connections directives, we keep two lists - one for outgoing
and one for incoming.
<PRE>
    HTAssocList *       client_connection;
    HTAssocList *       server_connection;
</PRE>
<H3>
  Access Authentication Information
</H3>
<P>
The <CODE>challenge</CODE> and the <CODE>credentials</CODE> entries are use
by the authentication parsers and generators respectively.
<PRE>    char *		realm;				    /* Current realm */
    char *		scheme;				   /* Current scheme */

    HTAssocList *	challenge;           /* Challenge received by client */
    HTAssocList *	credentials;	   /* Credentials received by server */
</PRE>
<H3>
  Protocol Extension Protocol (PEP) Information
</H3>
<PRE>
    HTAssocList *	protocol;
    HTAssocList *	protocol_info;
    HTAssocList *	protocol_request;
</PRE>
<P>
As a small alternative to the PEP protocol headers, we also support the extension
header which works pretty much the same way but is somewhat simpler in use.
<PRE>
    HTAssocList *       client_extension;
    HTAssocList *       server_extension;
</PRE>
<H3>
  Windows Specific Information
</H3>
<PRE>
#ifdef WWW_WIN_ASYNC
    HWND		hwnd;		/* Windows handle for MSWindows   */
    unsigned long	winMsg;	        /* msg number of Windows eloop    */
#endif /* WWW_WIN_ASYNC */
</PRE>
<PRE>
};
</PRE>
<H2>
  Post Web Management
</H2>
<P>
These functions are mainly used internally in the Library but there is no
reason for them not to be public.
<PRE>
extern BOOL HTRequest_addDestination (HTRequest * src, HTRequest * dest);
extern BOOL HTRequest_removeDestination	(HTRequest * dest);
extern BOOL HTRequest_destinationsReady (HTRequest * me);

extern BOOL HTRequest_linkDestination (HTRequest * dest);
extern BOOL HTRequest_unlinkDestination (HTRequest * dest);

extern BOOL HTRequest_removePostWeb (HTRequest * me);
extern BOOL HTRequest_killPostWeb (HTRequest * me);

#define	HTRequest_mainDestination(me) \
	((me) &amp;&amp; (me)-&gt;source ? (me)-&gt;source-&gt;mainDestination : NULL)
#define HTRequest_isDestination(me) \
	((me) &amp;&amp; (me)-&gt;source &amp;&amp; (me) != (me)-&gt;source)
#define HTRequest_isMainDestination(me) \
	((me) &amp;&amp; (me)-&gt;source &amp;&amp; \
	(me) == (me)-&gt;source-&gt;mainDestination)
#define HTRequest_isSource(me) \
	((me) &amp;&amp; (me)-&gt;source &amp;&amp; (me) == (me)-&gt;source)
</PRE>
<P>
End of Declaration
<PRE>
#endif /* HTREQMAN_H */
</PRE>
<P>
  <HR>
<ADDRESS>
  @(#) $Id: HTReqMan.html,v 2.33 1996/09/08 22:08:44 frystyk Exp $
</ADDRESS>
</BODY></HTML>

Webmaster