/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */
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 HTReq Module.
This module is implemented by HTReqMan.c, and it is a part of the W3C Sample Code Library.
#ifndef HTREQMAN_H #define HTREQMAN_H #include "HTReq.h" #include "HTList.h" #include "HTFormat.h" #include "HTAnchor.h" #include "HTMethod.h" #include "HTAABrow.h" #include "HTStream.h" #include "HTNet.h" #include "HTMIMPrs.h"
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.
struct _HTRequest {
    BOOL		internal;      /* Does the app knows about this one? */
    time_t		date;      /* Time stamp when the request was issued */
    HTMethod		method;
    BOOL                flush;                /* Should we flush immediately */
    HTPriority		priority;		/* Priority for this request */
Each request can be assigned a user profile containing information about this host and the user issuing the request.
    HTUserProfile *	userprofile;
    HTNet *		net;		    /* Information about socket etc. */
    HTResponse *        response;
    HTList *		error_stack;		           /* List of errors */
    int			retrys;       	      /* Number of automatic reloads */
    int                 max_forwards;
    BOOL		preemptive;
    BOOL		ContentNegotiation;
    HTGnHd		GenMask;
    HTRsHd		ResponseMask;
    HTRqHd		RequestMask;
    HTEnHd		EntityMask;
    HTList *		generators;
    BOOL		gens_local;
    HTMIMEParseSet *	parseSet;
    BOOL		pars_local;
    HTList *		conversions;
    BOOL		conv_local;
    HTList *		encodings;
    BOOL		enc_local;
    HTList *		tes;
    BOOL		te_local;
    HTList *		languages;
    BOOL		lang_local;
    HTList *		charsets;
    BOOL		char_local;
    HTList *		befores;
    BOOL		befores_local;
    HTList *		afters;
    BOOL		afters_local;
    char * 		proxy;
    BOOL                full_uri;
This association list is a list of the cache control directives that are
to be sent as part of the Cache-Control header.
    HTReload		reload;
    HTAssocList *       cache_control;
Range header.
    HTAssocList *       byte_ranges;
This association list is a list of the connection control directives that
are to be sent as part of the Connection header.
    HTAssocList *       connection;
The Expect request-header field is used to indicate that particular server behaviors are required by the client. A server that does not understand or is unable to comply with any of the expectation values in the Expect field of a request MUST respond with appropriate error status.
    HTAssocList *       expect;
The credentials list contains the information that we are to send as part of the Authorization header. The realm is if we already know that we need to generate credentials for a specific realm.
    char *		realm;				    /* Current realm */
    HTAssocList *	credentials;	   /* Credentials received by server */
    HTAssocList *	protocol;
    HTAssocList *	protocol_info;
    HTAssocList *	protocol_request;
    HTParentAnchor *	anchor;	       /* The Client anchor for this request */
    HTChildAnchor *	childAnchor;	    /* For element within the object */
    HTParentAnchor *	parentAnchor;			/* For referer field */
    HTStream *		output_stream; 
    HTFormat		output_format;
    BOOL		connected;
    HTStream*		debug_stream;
    HTFormat		debug_format;
    HTStream *		input_stream; 
    HTFormat		input_format;
    HTPostCallback *	PostCallback;
    HTRequestCallback *	callback;
    void *		context;
    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 */
};
These functions are mainly used internally in the Library but there is no reason for them not to be public.
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) && (me)->source ? (me)->source->mainDestination : NULL) #define HTRequest_isDestination(me) \ ((me) && (me)->source && (me) != (me)->source) #define HTRequest_isMainDestination(me) \ ((me) && (me)->source && \ (me) == (me)->source->mainDestination) #define HTRequest_isSource(me) \ ((me) && (me)->source && (me) == (me)->source)
End of Declaration
#endif /* HTREQMAN_H */