httpd.h revision 169f62b04de69074b561b4e6dcf6f82572a5e367
* Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * 4. The names "Apache" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache@apache.org. * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * ==================================================================== * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * Portions of this software are based upon public domain software * originally written at the National Center for Supercomputing Applications, * University of Illinois, Urbana-Champaign. * httpd.h: header for simple (ha! not anymore) http daemon /* XXX - We need to push more stuff to other .h files, or even .c files, to * @package HTTP Daemon routines /* Headers in which EVERYONE has an interest... */ /* ----------------------------- config dir ------------------------------ */ /* Define this to be the default server home dir. Most things later in this * file with a relative pathname will have this added. /* Set default for OS/2 file system */ /* Set default for Windows file system */ /* Set the default for BeOS */ * --------- You shouldn't have to edit anything below this line ---------- * Any modifications to any defaults not defined above should be done in the * respective config. file. /* Default location of documents. Can be overridden by the DocumentRoot /* Set default for OS/2 file system */ #
endif /* DOCUMENT_LOCATION *//* Max. number of dynamically loaded modules */ /* Default administrator's address */ /* The target name of the installed Apache */ /* --------- Default user name and group name ----------------------------- */ /* --- These may be specified as numbers by placing a # before a number --- */ /* The name of the log files */ #
endif /* DEFAULT_XFERLOG */#
endif /* DEFAULT_ERRORLOG *//* Define this to be what your per-directory security files are called */ /* Set default for OS/2 file system */ #
endif /* DEFAULT_ACCESS_FNAME *//* The name of the server config file */ /* Whether we should enable rfc1413 identity checking */ /* The default path for CGI scripts if none is currently set */ /* The path to the suExec wrapper, can be overridden in Configuration */ /* The timeout for waiting for messages */ /* The timeout for waiting for keepalive timeout until next request */ /* The number of requests to entertain per connection */ /* The maximum length of the queue of pending connections, as defined * by listen(2). Under some systems, it should be increased if you * are experiencing a heavy TCP SYN flood attack. * It defaults to 511 instead of 512 because some systems store it * as an 8-bit datatype; 512 truncated to 8-bits is 0, while 511 is /* Limits on the size of various request items. These limits primarily * exist to prevent simple denial-of-service attacks on a server based * on misuse of the protocol. The recommended values will depend on the * nature of the server resources -- CGI scripts and database backends * might require large values, but most servers could get by with much * smaller limits than we use below. The request message body size can * be limited by the per-dir config directive LimitRequestBody. * Internal buffer sizes are two bytes more than the DEFAULT_LIMIT_REQUEST_LINE * and DEFAULT_LIMIT_REQUEST_FIELDSIZE below, which explains the 8190. * These two limits can be lowered (but not raised) by the server config * directives LimitRequestLine and LimitRequestFieldsize, respectively. * DEFAULT_LIMIT_REQUEST_FIELDS can be modified or disabled (set = 0) by * the server config directive LimitRequestFields. #
endif /* default limit on bytes in Request-Line (Method+URI+HTTP-version) */#
endif /* default limit on bytes in any one header field */#
endif /* default limit on number of request header fields */ * The default default character set name to add if AddDefaultCharset is * enabled. Overridden with AddDefaultCharsetName. * The below defines the base string of the Server: header. Additional * tokens can be added via the ap_add_version_component() API call. * The tokens are listed in order of their significance for identifying the * "Product tokens should be short and to the point -- use of them for * advertizing or other non-essential information is explicitly forbidden." * Example: "Apache/1.1.0 MrWidget/0.1-alpha" /* Define this to 1 if you want fancy indexing, 0 otherwise */ #
endif /* CORE_PRIVATE *//* ------------------ stuff that modules are allowed to look at ----------- */ /* Define this to be what your HTML directory content files are called */ /* Define this to be what type you'd like returned for files with unknown */ /* suffixes. MUST be all lower case. */ /* The name of the MIME types file */ * Define the HTML doctype strings centrally. "DTD HTML 3.2 Final//EN\">\n" "DTD HTML 4.0 Transitional//EN\"\n" \
"DTD HTML 4.0 Frameset//EN\"\n" \
/* -- Internal representation for a HTTP protocol number, e.g., HTTP/1.1 -- */ /* -------------- Port number for server running standalone --------------- */ /* The default string lengths */ /* The size of the server's internal read-write buffers */ * Special Apache error codes. These are basically used * in http_main.c so we can keep track of various errors. * A fatal error arising during the server's init sequence * The child died during it's init sequence * A fatal error, resulting in the whole server aborting. * If a child exits with this error, the parent process * considers this a server-wide fatal error and aborts. /* Numeric release version identifier: MMNNFFRBB: major minor fix final beta * Always increases along the same track as the source branch. * For example, Apache 1.4.2 would be '10402100', 2.5b7 would be '20500007'. #
define DECLINED -
1 /* Module declines to handle */#
define DONE -
2 /* Module has served the response completely * - it's safe to die() with no more output #
define OK 0
/* Module has handled this stage. *//* ----------------------- HTTP Status Codes ------------------------- */ * all of the potential response status-lines (a sparse table). * A future version should dynamically generate the apr_table_t at startup. /* Methods recognized (but not necessarily handled) by the server. * These constants are used in bit shifting masks of size int, so it is * unsafe to have more methods than bits in an int. HEAD == M_GET. #
endif /*CHARSET_EBCDIC*//* Just in case your linefeed isn't the one the other end is expecting. */ #
else /* CHARSET_EBCDIC *//* For platforms using the EBCDIC charset, the transition ASCII->EBCDIC is done * "native EBCDIC" CR and NL characters. These are therefore #
endif /* CHARSET_EBCDIC *//* Possible values for request_rec.read_body (set by handling module): * REQUEST_NO_BODY Send 413 error if message has any body * REQUEST_CHUNKED_ERROR Send 411 error if body without Content-Length * REQUEST_CHUNKED_DECHUNK If chunked, remove the chunks for me. * REQUEST_CHUNKED_PASS Pass the chunks to me without removal. /* Things which may vary per file-lookup WITHIN a request --- * e.g., state of MIME config. Basically, the name of an object, info * about the object, and any other info we may ahve which may need to * change as we go poking around looking for it (e.g., overridden by * Note how the default state of almost all these things is properly * zero, so that allocating it with pcalloc does the right thing without * a whole lot of hairy initialization... so long as we are willing to * make the (fairly) portable assumption that the bit pattern of a NULL * pointer is, in fact, zero. * This represents the result of calling htaccess; these are cached for /** the directory to which this applies */ /** the overrides allowed for the .htaccess file */ /** the configuration directives */ /** the next one, or NULL if no more; N.B. never change this */ /* The following four types define a hierarchy of activities, so that * given a request_rec r you can write r->connection->server->process * to get to the process_rec. While this reduces substantially the * number of arguments that various hooks require beware that in * threaded versions of the server you must consider multiplexing /** structure to aid charset translate between machine and network */ /* contents are experimental! expect it to change! */ /** translation handle to use when going to the network */ /** whether or not write translation is single-byte-only */ /** translation handle to use when coming from the network */ /** A structure that represents one process */ /** Global pool. Please try to cleared on _all_ exits */ /** aka configuration pool, cleared on restarts */ /** How many command line arguments were pass to the program */ /** The command line arguments */ /** The program name used to execute the program */ /** A structure that represents the current request */ /** The pool associated with the request */ /** The connection over which this connection has been read */ /** The virtual host this request is for */ /** If we wind up getting redirected, pointer to the request we /** If this is an internal redirect, pointer to where we redirected /** If this is a sub_request (see request.h) pointer back to the /* Info about the request itself... we begin with stuff that only /** First line of request, so we can log it */ /** HTTP/0.9, "simple" request */ /** HEAD request, as opposed to GET */ /** Protocol, as given to us, or HTTP/0.9 */ /** Number version of protocol; 1.1 = 1001 */ /** Host, as set by full URI or Host: */ /** When the request started */ /** Status line, if set by script */ /* Request method, two ways; also, protocol, etc.. Outside of protocol.c, /** GET, HEAD, POST, etc. */ /** M_GET, M_POST, etc. */ * allowed is a bitvector of the allowed methods. * A handler must ensure that the request method is one that * it is capable of handling. Generally modules should DECLINE * any request methods they do not handle. Prior to aborting the * handler like this the handler should set r->allowed to the list * of methods that it is willing to handle. This bitvector is used * to construct the "Allow:" header required for OPTIONS requests, * and HTTP_METHOD_NOT_ALLOWED and HTTP_NOT_IMPLEMENTED status codes. * Since the default_handler deals with OPTIONS, all modules can * usually decline to deal with OPTIONS. TRACE is always allowed, * modules don't need to set it explicitly. * Since the default_handler will always handle a GET, a * module which does *not* implement GET should probably return * HTTP_METHOD_NOT_ALLOWED. Unfortunately this means that a Script GET * handler can't be installed by mod_actions. </PRE> int allowed;
/* Allowed methods - for 405, OPTIONS, etc */ /** byte count in stream is for body */ /** body byte count, for easy access */ /** Time the resource was last modified */ /* HTTP/1.1 connection-level features */ /** sending chunked transfer-coding */ /** number of byte ranges */ /** The "real" content length */ /** bytes left to read */ /** bytes that have been read */ /** how the request body should be read */ /** reading chunked transfer-coding */ /** is client waiting for a 100 response? */ /* MIME header environments, in and out. Also, an array containing * environment variables to be passed to subprocesses, so people can * write modules to add to that environment. * The difference between headers_out and err_headers_out is that the * latter are printed even on error, and persist across internal redirects * (so the headers printed for ErrorDocument handlers will have them). * The 'notes' apr_table_t is for notes from one module to another, with no * other set purpose in mind... /** MIME header environment from the request */ /** MIME header environment for the response */ /** MIME header environment for the response, printed even on errors and * persist across internal redirects */ /** Array of environment variables to be used for sub processes */ /** Notes from one module to another */ /* content_type, handler, content_encoding, content_language, and all * content_languages MUST be lowercased strings. They may be pointers * to static strings; they should not be modified in place. /** The content-type for the current request */ const char *
content_type;
/* Break these out --- we dispatch on 'em */ /** The handler string that we use to call a handler function */ const char *
handler;
/* What we *really* dispatch on */ /** How to encode the data */ /** for back-compat. only -- do not use */ /** array of (char*) representing the content languages */ /** variant list validator (if negotiated) */ /** If an authentication check was made, this gets set to the user name. */ /** If an authentication check was made, this gets set to the auth type. */ /** This response is non-cache-able */ /** There is no local copy of this response */ /* What object is being requested (either directly, or via include * or content-negotiation mapping). /** the uri without any parsing performed */ /** the path portion of the URI */ /** The filename on disk that this response corresponds to */ /** The path_info for this request if there is any. */ /** QUERY_ARGS, if any */ /** ST_MODE set to zero if no such file */ /** components of uri, dismantled */ /* Various other config info which may change with .htaccess files * These are config vectors, with one void* pointer for each module * (the thing pointed to being the module's business). /** Options set in config files, etc. */ /** Notes on *this* request */ * a linked list of the configuration directives in the .htaccess files * accessed by this request. * N.B. always add to the head of the list, _never_ to the end. * that way, a sub request's list can (temporarily) point to a parent's list * @defvar const htaccess_result *htaccess /** The translation headers for dealing with this request * @defvar ap_rr_xlate *rrx */ /** A list of filters to be used for this request * @defvar ap_filter_t *filters */ /* Things placed at the end of the record to avoid breaking binary * compatibility. It would be nice to remember to reorder the entire * record to improve 64bit alignment the next time we need to break * binary compatibility for some other reason. /** Structure to store things which are per connection */ /** Pool associated with this connection */ /** Physical vhost this conn come in on */ /* Information about the connection itself */ /** Connection to the client */ /** Client's IP address */ /** Client's DNS name, if known. NULL if DNS hasn't been checked, * "" if it has and no address was found. N.B. Only access this though /** Only ever set if doing rfc1413 lookups. N.B. Only access this through * get_remote_logname() */ /** Are we still talking? */ /** Are we using HTTP Keep-Alive? -1 fatal error, 0 undecided, 1 yes */ /** Did we use HTTP Keep-Alive? */ /** have we done double-reverse DNS? -1 yes/failure, 0 not yet, /** How many times have we used it? */ /** used for ap_get_server_name when UseCanonicalName is set to DNS * (ignores setting of HostnameLookups) */ /** ID of this connection; unique at any point in time */ /** Notes on *this* connection */ /** send note from one module to another, must remain valid for all * requests on this conn */ /* Per-vhost config... */ /* The address 255.255.255.255, when used as a virtualhost address, * will become the "default" server when the ip doesn't match other vhosts. /** A structure to be used for Per-vhost config */ /** The next server in the list */ /** The bound address, for this server */ /** The bound port, for this server */ /** The name given in <VirtualHost> */ /** A structure to store information for each virtual server */ /** The process this server is running in */ /** The next server in the list */ /** The name of the server */ /** The line of the config file that the server was defined on */ /* Contact information */ /** The admin's contact information */ /** The server hostname */ /** for redirects, etc. */ /* Log files --- note that transfer log is now in the modules... */ /** The name of the error log */ /** A file descriptor that references the error log */ /** The log level for this server */ /* Module-specific configuration for server, and defaults... */ /** true if this is the virtual server */ /** Config vector containing pointers to modules' per-server config /** MIME type info, etc., before we start checking per-directory info */ /* Transaction handling */ /** I haven't got a clue */ /** Timeout, in seconds, before we give up */ /** Seconds we'll wait for another request */ /** Maximum requests per connection */ /** Use persistent connections? */ /** Pathname for ServerPath */ /** Normal names for ServerAlias servers */ /** Wildcarded names for ServerAlias servers */ /** effective user id when calling exec wrapper */ /** effective group id when calling exec wrapper */ /** limit on size of the HTTP request line */ /** limit on size of any request header field */ /** limit on number of request header fields */ /* stuff marked API_EXPORT is part of the API, and intended for use /* Stuff marked API_EXPORT_NONSTD is part of the API, and intended for * use by modules. The difference between API_EXPORT and * API_EXPORT_NONSTD is that the latter is required for any functions * which use varargs or are used via indirect function call. This * is to accomodate the two calling conventions in windows dlls. /* modules should not used functions marked CORE_EXPORT * or CORE_EXPORT_NONSTD */ /* On Mac OS X Server, symbols that conflict with loaded dylibs * (eg. System framework) need to be declared as private symbols with * For other systems, make that a no-op. * it sans any parameters; e.g., strip off any ';charset=foo' and the like. * @param p Pool to allocate memory out of * @param intype The field to examine * @return the field minus any parameters * @deffunc char *ap_field_noparam(apr_pool_t *p, const char *intype); * Convert a time from an integer into a string in a specified format * @param p The pool to allocate memory out of * @param t The time to convert * @param fmt The format to use for the conversion * @param gmt Convert the time for GMT? * @return The string that represents the specified time * @deffunc char *ap_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt, int gmt) /* String handling. The *_nc variants allow you to use non-const char **s as arguments (unfortunately C won't automatically convert a char ** to a const * Get the characters until the first occurance of a specified character * @param p The pool to allocate memory out of * @param line The string to get the characters from * @param stop The character to stop at * @return A copy of the characters up to the first stop character * @deffunc char *ap_getword(apr_pool_t *p, const char **line, char stop); * Get the characters until the first occurance of a specified character * @param p The pool to allocate memory out of * @param line The string to get the characters from * @param stop The character to stop at * @return A copy of the characters up to the first stop character * @tip This is the same as ap_getword, except it doesn't use const char **. * @deffunc char *ap_getword_nc(apr_pool_t *p, char **line, char stop); * Get the first word from a given string. A word is defined as all characters * up to the first whitespace. * @param p The pool to allocate memory from * @param line The string to traverse * @retrn The first word in the line * @deffunc char *ap_getword_white(apr_pool_t *p, const char **line) * Get the first word from a given string. A word is defined as all characters * up to the first whitespace. * @param p The pool to allocate memory from * @param line The string to traverse * @retrn The first word in the line * @tip The same as ap_getword_white, except it doesn't use const char **. * @deffunc char *ap_getword_white_nc(apr_pool_t *p, const char **line) * Get all characters from the first occurance of stop to the first '\0' * @param p The pool to allocate memory out of * @param line The line to traverse * @param stop The character to start at * @return A copy of all caracters after the first occurance of the specified * @deffunc char *ap_getword_nulls(apr_pool_t *p, const char **line, char stop) * Get all characters from the first occurance of stop to the first '\0' * @param p The pool to allocate memory out of * @param line The line to traverse * @param stop The character to start at * @return A copy of all caracters after the first occurance of the specified * @tip The same as ap_getword_nulls, except it doesn't use const char **. * @deffunc char *ap_getword_nulls_nc(apr_pool_t *p, char **line, char stop) * Get the second word in the string paying attention to quoting * @param p The pool to allocate out of * @param line The line to traverse * @return A copy of the string * @deffunc char *ap_getword_conf(apr_pool_t *p, const char **line) * Get the second word in the string paying attention to quoting * @param p The pool to allocate out of * @param line The line to traverse * @return A copy of the string * @tip The same as ap_getword_conf, except it doesn't use const char **. * @deffunc char *ap_getword_conf_nc(apr_pool_t *p, char **line) * Check a string for any ${ENV} environment variable construct and replace * each them by the value of that environment variable, if it exists. If the * environment value does not exist, leave the ${ENV} construct alone; it * @param p The pool to allocate out of * @param word The string to check * @return The string with the replaced environment variables * @deffunc const char *ap_resolve_env(apr_pool_t *p, const char *word) * Size an HTTP header field list item, as separated by a comma. * @param field The field to size * @param len The length of the field * @return The return value is a pointer to the beginning of the non-empty * list item within the original string (or NULL if there is none) and the * address of field is shifted to the next non-comma, non-whitespace * character. len is the length of the item excluding any beginning whitespace. * @deffunc const char *ap_size_list_item(const char **field, int *len) * Retrieve an HTTP header field list item, as separated by a comma, * while stripping insignificant whitespace and lowercasing anything not in * a quoted string or comment. * @param p The pool to allocate out of * @param field The field to retrieve * @return The return value is a new string containing the converted list * item (or NULL if none) and the address pointed to by field is * shifted to the next non-comma, non-whitespace. * @deffunc char *ap_get_list_item(apr_pool_t *p, const char **field) * Find an item in canonical form (lowercase, no extra spaces) within * an HTTP field value list. * @param p The pool to allocate out of * @param line The field value list to search * @param tok The token to search for * @return 1 if found, 0 if not found. * @deffunc int ap_find_list_item(apr_pool_t *p, const char *line, const char *tok) * Retrieve a token, spacing over it and returning a pointer to * the first non-white byte afterwards. Note that these tokens * are delimited by semis and commas; and can also be delimited * by whitespace at the caller's option. * @param p The pool to allocate out of * @param accept_line The line to retrieve the token from * @param accept_white Is it delimited by whitespace * @return the first non-white byte after the token * @deffunc char *ap_get_token(apr_pool_t *p, const char **accept_line, int accept_white) * find http tokens, see the definition of token from RFC2068 * @param p The pool to allocate out of * @param line The line to find the token * @param tok The token to find * @return 1 if the token is found, 0 otherwise * @deffunc int ap_find_token(apr_pool_t *p, const char *line, const char *tok) * find http tokens from the end of the line * @param p The pool to allocate out of * @param line The line to find the token * @param tok The token to find * @return 1 if the token is found, 0 otherwise * @deffunc int ap_find_last_token(apr_pool_t *p, const char *line, const char *tok) * Check for an Absolute URI syntax * @param u The string to check * @return 1 if URI, 0 otherwise * @deffunc int ap_is_url(const char *u) * @param url The url to unescapte * @return 0 on success, non-zero otherwise * @deffunc int ap_unescape_url(char *url) * Remove all double slashes from a string * @param name The string to parse * @deffunc void ap_no2slash(char *name) * Remove all ./ and ../ substrings from a file name * @param name the file name to parse * @deffunc void ap_getparents(char *name) * Escape a path segment, as defined in RFC 1808 * @param p The pool to allocate out of * @param s The path to convert * @return The converted URL * @deffunc char *ap_escape_path_segment(apr_pool_t *p, const char *s) * convert an OS path to a URL in an OS dependant way. * @param p The pool to allocate out of * @param path The path to convert * @param partial if set, assume that the path will be appended to something * with a '/' in it (and thus does not prefix "./") * @return The converted URL * @deffunc char *ap_os_escape_path(apr_pool_t *p, const char *path, int partial) * @param p The pool to allocate out of * @param s The html to escape * @return The escaped string * @deffunc char *ap_escape_html(apr_pool_t *p, const char *s) * Construct a full hostname * @param p The pool to allocate out of * @param hostname The hostname of the server * @param port The port the server is running on * @param r The current request * @return The server's hostname * @deffunc char *ap_construct_server(apr_pool_t *p, const char *hostname, unsiged port, const request_rec *r) * @param p The pool to allocate out of * @param s The command to escape * @return The escaped hostname * @deffunc char *ap_escape_shell_cmd(apr_pool_t *p, const char *s) * Count the number of directories in a path * @param The path to count * @return The number of directories * @deffunc int ap_count_dirs(const char *path) * copy at most n leading directories of s into d d should be at least as * large as s plus 1 extra byte assumes n > 0 * @param d The location to copy to * @param s The location to copy from * @param n The number of directories to copy * @return value is the ever useful pointer to the trailing \0 of d * @deffunc char *ap_make_dirstr_prefix(char *d, const char *s, int n) * return the parent directory name including trailing / of the file s * @param p The pool to allocate out of * @param s The file to get the parent of * @return A copy of the file's parent directory * @deffunc char *ap_make_dirstr_parent(apr_pool_t *p, const char *s) /* deprecated. The previous two routines are preferred. */ /* Misc system hackery */ * Redefine assert() to something more useful for an Apache... /* A set of flags which indicate places where the server should raise(SIGSTOP). * This is useful for debugging, because you can then attach to that process * with gdb and continue. This is important in cases where one_process * debugging isn't possible. /* strtoul does not exist on sunos4. */ /* The C library has functions that allow const to be silently dropped ... these macros detect the drop in maintainer mode, but use the native methods far narmal builds #
endif /* !APACHE_HTTPD_H */