/* ** (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 Reference 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? */ HTMethod method; HTReload reload; char * boundary; /* MIME multipart boundary */ 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 */
Each request can be assigned a user profile containing information about this host and the user issuing the request.
HTUserProfile * userprofile;
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;
HTGnHd GenMask; HTRsHd ResponseMask; HTRqHd RequestMask; HTEnHd EntityMask; HTMIMEParseSet * parseSet; BOOL pars_local; HTList * generators; BOOL gens_local;
HTParentAnchor * anchor; /* The Client anchor for this request */ HTChildAnchor * childAnchor; /* For element within the object */ HTParentAnchor * parentAnchor; /* For referer field */
If we get a redirection back then we return the new destination for this request to the application using this anchor.
HTAnchor * redirectionAnchor; /* Redirection URL */
HTStream * output_stream; HTFormat output_format; HTStream* debug_stream; HTFormat debug_format;
HTStream * input_stream; HTFormat input_format;
HTPostCallback * PostCallback;
HTRequestCallback * callback; void * context;
BOOL preemptive; BOOL ContentNegotiation; BOOL using_proxy;
HTList * error_stack; /* List of errors */
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 */
The challenge
and the credentials
entries are use
by the authentication parsers and generators respectively. It is required
to have a scheme
in order to find a parser for an authentication
scheme.
char * scheme; /* Current authentication scheme */ char * realm; /* Current realm */ HTAssocList * challenge; /* Challenge received by client */ HTAssocList * credentials; /* Credentials received by server */
#ifdef WWW_WIN_ASYNC HWND hwnd; /* Windows handle for MSWindows */ unsigned long winMsg; /* msg number of Windows eloop */ #endif /* WWW_WIN_ASYNC */
};
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 */