diff options
Diffstat (limited to 'ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/req.h')
-rw-r--r-- | ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/req.h | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/req.h b/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/req.h new file mode 100644 index 00000000000..afe525150c6 --- /dev/null +++ b/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/frame/req.h @@ -0,0 +1,216 @@ +/* + * $Id$ + * + * Copyright (c) 1994, 1995. Netscape Communications Corporation. All + * rights reserved. + * + * Use of this software is governed by the terms of the license agreement for + * the Netscape Communications or Netscape Comemrce Server between the + * parties. + */ + + +/* ------------------------------------------------------------------------ */ + + +/* + * req.h: Request-specific data structures and functions + * + * Rob McCool + */ + + +#ifndef REQ_H +#define REQ_H + + +#include "netsite.h" +#include "base/pblock.h" +#include "base/session.h" +#include "frame/objset.h" + +#include <sys/stat.h> + + + +/* ------------------------------ Constants ------------------------------- */ + + +#define REQ_HASHSIZE 10 +#define REQ_MAX_LINE 4096 + + +/* + * The REQ_ return codes. These codes are used to determine what the server + * should do after a particular module completes its task. + * + * Func type functions return these as do many internal functions. + */ + +/* The function performed its task, proceed with the request */ +#define REQ_PROCEED 0 +/* The entire request should be aborted: An error occurred */ +#define REQ_ABORTED -1 +/* The function performed no task, but proceed anyway. */ +#define REQ_NOACTION -2 +/* Tear down the session and exit */ +#define REQ_EXIT -3 + + + +/* ------------------------------ Structures ------------------------------ */ + + +typedef struct { + /* Server working variables */ + pblock *vars; + + /* The method, URI, and protocol revision of this request */ + pblock *reqpb; + /* Protocol specific headers */ + int loadhdrs; + pblock *headers; + + /* Server's response headers */ + pblock *srvhdrs; + + /* The object set constructed to fulfill this request */ + httpd_objset *os; + /* Array of objects that were created from .nsconfig files */ + httpd_objset *tmpos; + + /* The stat last returned by request_stat_path */ + char *statpath; + char *staterr; + struct stat *finfo; + +#ifdef MCC_PROXY + /* SOCKS request data */ + void *socks_rq; +#endif + +} Request; + + +/* ------------------------------ Prototypes ------------------------------ */ + + +/* + * request_create creates a new request structure. + */ + +Request *request_create(void); + +/* + * request_free destroys a request structure. + */ + +void request_free(Request *req); + + +/* + * Restarts a request for a given URI internally. If rq is non-NULL, the + * function will keep the old request's headers and protocol, but with a new + * URI and method of GET. If the previous method was HEAD, this is preserved. + * Any other method becomes GET. You may assume that if you give it a request + * structure that it will use the same structure. + * + * Once you have this new Request, you must then do what you want with + * it (e.g. send the object back, perform uri2path translation, etc.) + */ + +Request *request_restart_internal(char *uri, Request *rq); + + +/* + * request_translate_uri performs virtual to physical mapping on the given + * uri and returns either a path string or NULL depending on whether it was + * successful or not. + */ + +char *request_translate_uri(char *uri, Session *sn); + + +/* + * request_header finds the named header depending on the requesting + * protocol. If possible, it will not load headers until the first is + * requested. You have to watch out because this can return REQ_ABORTED. + */ + +int request_header(char *name, char **value, Session *sn, Request *rq); + +/* + * request_loadheaders just makes sure the headers have been loaded. + */ + +int request_loadheaders(Session *sn, Request *rq); + + +/* + * request_stat_path tries to stat path. If path is NULL, it will look in + * the vars pblock for "path". If the stat is successful, it returns the stat + * structure. If not, returns NULL and leaves a message in rq->staterr. If a + * previous call to this function was successful, and path is the same, the + * function will simply return the previously found value. + * + * User functions should not free this structure. + */ + +struct stat *request_stat_path(char *path, Request *rq); + + +/* + * Parses the URI parameter in rq->vars and finds out what objects it + * references (using NameTrans). Builds the request's object set. + */ + +int request_uri2path(Session *sn, Request *rq); + +/* + * Performs any path checks needed for this request. + */ + +int request_pathchecks(Session *sn, Request *rq); + +/* + * Does all the ObjectType directives for a request + */ + +int request_fileinfo(Session *sn, Request *rq); + + +/* + * request_handle_processed takes a Request structure with its reqpb + * block filled in and handles the request. + */ + +int request_handle_processed(Session *sn, Request *rq); + + +/* + * Complete a request by finding the service function and using it. Returns + * REQ_NOACTION if no matching function was found. + */ + +int request_service(Session *sn, Request *rq); + + +/* + * request_handle handles one request from the session's inbuf. + */ + +void request_handle(Session *sn); + +/* + * Moved here due to problems with interdependency. See object.h for + * description. + */ + +int object_findnext(Session *sn, Request *rq, httpd_object *obj); +int object_pathcheck(Session *sn, Request *rq, httpd_object *obj); +int object_findinfo(Session *sn, Request *rq, httpd_object *obj); +int object_findservice(Session *sn, Request *rq, httpd_object *obj); +int object_finderror(Session *sn, Request *rq, httpd_object *obj); +int object_findlogs(Session *sn, Request *rq, httpd_object *obj); + +#endif |