/* ** (c) COPYRIGHT MIT 1995. ** Please first read the full copyright statement in the file COPYRIGH. */The request manager consists of two parts: a public part and a private part. The public part contains all the information needed to define a request the parameters to be used when requesting a resource from the network or local file system. When a request is handled, all kinds of things about it need to be passed along together with a request.
This module is implemented by HTReqMan.c, and it is a part of the W3C Reference Library.
#ifndef HTREQ_H #define HTREQ_H typedef struct _HTRequest HTRequest; #include "HTList.h" #include "HTFormat.h" #include "HTStream.h" #include "HTEvntrg.h" #include "HTError.h" #include "HTNet.h"
extern BOOL HTLoad (HTRequest * request, BOOL recursive);If you are a server then you want this function. This function initiates the server side of a request and starts serving it back accross the network. Returns: YES if request has been registered (success) NO an error occured
extern BOOL HTServ (HTRequest * request, SOCKET master, BOOL recursive);
extern HTRequest * HTRequest_new (void);
extern HTRequest * HTRequest_dup (HTRequest * src);
extern void HTRequest_delete (HTRequest * request);
extern void HTRequest_setAnchor (HTRequest *request, HTAnchor *anchor); extern HTParentAnchor * HTRequest_anchor (HTRequest *request);
extern void HTRequest_setAccess (HTRequest * request, char * access); extern CONST char * HTRequest_access (HTRequest * request);
Methods are handled by the Method Module, and the default value is "GET".
extern void HTRequest_setMethod (HTRequest *request, HTMethod method); extern HTMethod HTRequest_method (HTRequest *request);
typedef enum _HTReload {
HT_ANY_VERSION = 0x0, /* Use any version available */
HT_MEM_REFRESH = 0x1, /* Reload from file cache or network */
HT_CACHE_REFRESH = 0x2, /* Update from network with IMS */
HT_FORCE_RELOAD = 0x4 /* Update from network with no-cache */
} HTReload;
extern void HTRequest_setReloadMode (HTRequest *request, HTReload mode);
extern HTReload HTRequest_reloadMode (HTRequest *request);
extern BOOL HTRequest_setMaxRetry (int newmax); extern int HTRequest_maxRetry (void); extern BOOL HTRequest_retry (HTRequest *request);
extern time_t HTRequest_retryTime (HTRequest * request);
Each request can have its local set of accept headers that either are added to the global set or replaces the global set of accept headers. Non of the headers have to be set. If the global set is sufficient for all requests then this us perfectly fine. If the parameter "override" is set then only local accept headers are used, else both local and global headers are used.
extern void HTRequest_setConversion (HTRequest *request, HTList *type, BOOL override); extern HTList * HTRequest_conversion (HTRequest *request);
extern void HTRequest_setEncoding (HTRequest *request, HTList *enc, BOOL override); extern HTList * HTRequest_encoding (HTRequest *request);
extern void HTRequest_setLanguage (HTRequest *request, HTList *lang, BOOL override); extern HTList * HTRequest_language (HTRequest *request);
extern void HTRequest_setCharset (HTRequest *request, HTList *charset, BOOL override); extern HTList * HTRequest_charset (HTRequest *request);
typedef enum _HTGnHd {
HT_G_DATE = 0x1,
HT_G_FORWARDED = 0x2,
HT_G_MESSAGE_ID = 0x4,
HT_G_MIME = 0x8,
HT_G_CONNECTION = 0x10,
HT_G_NO_CACHE = 0x20 /* Pragma */
} HTGnHd;
#define DEFAULT_GENERAL_HEADERS HT_G_CONNECTION
extern void HTRequest_setGnHd (HTRequest *request, HTGnHd gnhd);
extern void HTRequest_addGnHd (HTRequest *request, HTGnHd gnhd);
extern HTGnHd HTRequest_gnHd (HTRequest *request);
From and
Pragma.
typedef enum _HTRqHd {
HT_C_ACCEPT_TYPE = 0x1,
HT_C_ACCEPT_CHAR = 0x2,
HT_C_ACCEPT_ENC = 0x4,
HT_C_ACCEPT_LAN = 0x8,
HT_C_FROM = 0x10,
HT_C_IMS = 0x20,
HT_C_HOST = 0x40,
HT_C_REFERER = 0x80,
HT_C_USER_AGENT = 0x200
} HTRqHd;
#define DEFAULT_REQUEST_HEADERS \
HT_C_ACCEPT_TYPE+HT_C_ACCEPT_CHAR+ \
HT_C_ACCEPT_ENC+HT_C_ACCEPT_LAN+HT_C_REFERER+HT_C_USER_AGENT
extern void HTRequest_setRqHd (HTRequest *request, HTRqHd rqhd);
extern void HTRequest_addRqHd (HTRequest *request, HTRqHd rqhd);
extern HTRqHd HTRequest_rqHd (HTRequest *request);
typedef enum _HTRsHd {
HT_S_LOCATION = 0x1,
HT_S_PROXY_AUTH = 0x2,
HT_S_PUBLIC = 0x4,
HT_S_RETRY_AFTER = 0x8,
HT_S_SERVER = 0x10,
HT_S_WWW_AUTH = 0x20
} HTRsHd;
#define DEFAULT_RESPONSE_HEADERS HT_S_SERVER
extern void HTRequest_setRsHd (HTRequest * request, HTRsHd rshd);
extern void HTRequest_addRsHd (HTRequest * request, HTRsHd rshd);
extern HTRsHd HTRequest_rsHd (HTRequest * request);
typedef enum _HTEnHd {
HT_E_ALLOW = 0x1,
HT_E_CONTENT_ENCODING = 0x2,
HT_E_CONTENT_LANGUAGE = 0x4,
HT_E_CONTENT_LENGTH = 0x8,
HT_E_CTE = 0x10, /* Content-Transfer-Encoding */
HT_E_CONTENT_TYPE = 0x20,
HT_E_DERIVED_FROM = 0x40,
HT_E_EXPIRES = 0x80,
HT_E_LAST_MODIFIED = 0x200,
HT_E_LINK = 0x400,
HT_E_TITLE = 0x800,
HT_E_URI = 0x1000,
HT_E_VERSION = 0x2000
} HTEnHd;
#define DEFAULT_ENTITY_HEADERS 0xFFFF /* all */
extern void HTRequest_setEnHd (HTRequest *request, HTEnHd enhd);
extern void HTRequest_addEnHd (HTRequest *request, HTEnHd enhd);
extern HTEnHd HTRequest_enHd (HTRequest *request);
extern void HTRequest_setParent (HTRequest *request, HTParentAnchor *parent); extern HTParentAnchor * HTRequest_parent (HTRequest *request);
typedef int HTPostCallback (HTRequest *request, HTStream * target);
extern void HTRequest_setGenerator (HTRequest *request, HTList *gens, BOOL override); extern HTList * HTRequest_generator (HTRequest *request, BOOL *override); extern void HTRequest_setParser (HTRequest *request, HTList *pars, BOOL override); extern HTList * HTRequest_parser (HTRequest *request, BOOL *override);
NULL which means that the stream goes to the user
(display).
extern void HTRequest_setOutputStream (HTRequest *request, HTStream *output); extern HTStream *HTRequest_outputStream (HTRequest *request);The desired format of the output stream. This can be used to get unconverted data etc. from the library. If
NULL, then WWW_PRESENT is default value.
extern void HTRequest_setOutputFormat (HTRequest *request, HTFormat format); extern HTFormat HTRequest_outputFormat (HTRequest *request);
200 OK will be put down this stream. This can be
used for redirecting body information in status codes different from
"200 OK" to for example a debug window. If the value is NULL (default)
then the stream is not set up.
extern void HTRequest_setDebugStream (HTRequest *request, HTStream *debug); extern HTStream *HTRequest_debugStream (HTRequest *request);The desired format of the error stream. This can be used to get unconverted data etc. from the library. The default value if
WWW_HTML as a character based only has one WWW_PRESENT.
extern void HTRequest_setDebugFormat (HTRequest *request, HTFormat format); extern HTFormat HTRequest_debugFormat (HTRequest *request);
typedef int HTRequestCallback (HTRequest * request, void *param); extern void HTRequest_setCallback (HTRequest *request, HTRequestCallback *cb); extern HTRequestCallback *HTRequest_callback (HTRequest *request);The callback function can be passed an arbitrary pointer (the void part) which can describe the context of the current request structure. If such context information is required then it can be set using the following methods:
extern void HTRequest_setContext (HTRequest *request, void *context); extern void *HTRequest_context (HTRequest *request);
extern void HTRequest_setPreemtive (HTRequest *request, BOOL mode); extern BOOL HTRequest_preemtive (HTRequest *request);
extern HTPriority HTRequest_priority (HTRequest * request); extern BOOL HTRequest_setPriority (HTRequest * request, HTPriority priority);
extern HTNet * HTRequest_net (HTRequest * request); extern BOOL HTRequest_setNet (HTRequest * request, HTNet * net);
extern void HTRequest_setNegotiation (HTRequest *request, BOOL mode); extern BOOL HTRequest_negotiation (HTRequest *request);
extern HTList * HTRequest_error (HTRequest * request); extern void HTRequest_setError (HTRequest * request, HTList * list);These are the cover functions that go directly to the Error manager
extern BOOL HTRequest_addError (HTRequest * request, HTSeverity severity, BOOL ignore, int element, void * par, unsigned int length, char * where); extern BOOL HTRequest_addSystemError (HTRequest * request, HTSeverity severity, int errornumber, BOOL ignore, char * syscall);
extern long HTRequest_bytesRead(HTRequest * request);
extern BOOL HTRequest_kill(HTRequest * request);
#endif /* HTREQ_H */End of declaration