mod_proxy.h revision b0974c82efee430dbcb479cbb7f93b96a78032a3
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* ====================================================================
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * The Apache Software License, Version 1.1
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Copyright (c) 2000-2001 The Apache Software Foundation. All rights
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Redistribution and use in source and binary forms, with or without
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * modification, are permitted provided that the following conditions
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * 1. Redistributions of source code must retain the above copyright
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * notice, this list of conditions and the following disclaimer.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * 2. Redistributions in binary form must reproduce the above copyright
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * notice, this list of conditions and the following disclaimer in
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * the documentation and/or other materials provided with the
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * distribution.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * 3. The end-user documentation included with the redistribution,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * if any, must include the following acknowledgment:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * "This product includes software developed by the
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Apache Software Foundation (http://www.apache.org/)."
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Alternately, this acknowledgment may appear in the software itself,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * if and wherever such third-party acknowledgments normally appear.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * 4. The names "Apache" and "Apache Software Foundation" must
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * not be used to endorse or promote products derived from this
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * software without prior written permission. For written
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * permission, please contact apache@apache.org.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * 5. Products derived from this software may not be called "Apache",
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * nor may "Apache" appear in their name, without prior written
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * permission of the Apache Software Foundation.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * SUCH DAMAGE.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * ====================================================================
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * This software consists of voluntary contributions made by many
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * individuals on behalf of the Apache Software Foundation. For more
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * information on the Apache Software Foundation, please see
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Portions of this software are based upon public domain software
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * originally written at the National Center for Supercomputing Applications,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * University of Illinois, Urbana-Champaign.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Main include file for the Apache proxy
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Also note numerous FIXMEs and CHECKMEs which should be eliminated.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny This code is once again experimental!
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Things to do:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny 1. Make it completely work (for FTP too)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Chuck Murcko <chuck@topsail.org> 02-06-01
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* for proxy_canonenc() */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny enc_path, enc_search, enc_user, enc_fpath, enc_parm
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#else /*APR_CHARSET_EBCDIC*/
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif /*APR_CHARSET_EBCDIC*/
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* default Max-Forwards header setting */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* static information about a remote proxy */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *scheme; /* the schemes handled by this proxy, or '*' */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *protocol; /* the scheme used to talk to this proxy */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *hostname; /* the hostname of this proxy */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *real;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *fake;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int (*matcher) (struct dirconn_entry * This, request_rec *r);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *name;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *domain; /* domain name to use in absence of a domain name in the request */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int req; /* true if proxy requests are enabled */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny } viaopt; /* how to deal with proxy Via: headers */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * the following setting masks the error page
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * returned from the 'proxied server' and just
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * forwards the status code upwards.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * This allows the main server (us) to generate
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * the error page, (so it will look like a error
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * returned from the rest of the system
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *p; /* The path */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int p_is_fnmatch; /* Is this path an fnmatch candidate? */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny float cache_completion; /* completion percentage */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* Create a set of PROXY_DECLARE(type), PROXY_DECLARE_NONSTD(type) and
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * PROXY_DECLARE_DATA with appropriate export and import tags for the platform
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#if !defined(WIN32)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE(type) __declspec(dllexport) type __stdcall
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_NONSTD(type) __declspec(dllexport) type
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE(type) __declspec(dllimport) type __stdcall
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_NONSTD(type) __declspec(dllimport) type
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyAPR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, scheme_handler, (request_rec *r,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyAPR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, canon_handler, (request_rec *r,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyAPR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, create_req, (request_rec *r, request_rec *pr))
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(request_rec *)ap_proxy_make_fake_req(conn_rec *c, request_rec *r);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(void) ap_proxy_c2hex(int ch, char *x);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(char *)ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char **passwordp, char **hostp, apr_port_t *port);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(const char *)ap_proxy_date_canon(apr_pool_t *p, const char *x);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(apr_table_t *)ap_proxy_read_headers(request_rec *r, request_rec *rp, char *buffer, int size, conn_rec *c);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_liststr(const char *list, const char *val);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(char *)ap_proxy_removestr(apr_pool_t *pool, const char *list, const char *val);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_hex2sec(const char *x);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(void) ap_proxy_sec2hex(int t, char *y);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxyerror(request_rec *r, int statuscode, const char *message);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_checkproxyblock(request_rec *r, proxy_server_conf *conf, apr_sockaddr_t *uri_addr);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_pre_http_request(conn_rec *c, request_rec *r);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(apr_status_t) ap_proxy_string_read(conn_rec *c, apr_bucket_brigade *bb, char *buff, size_t bufflen, int *eos);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(void) ap_proxy_reset_output_filters(conn_rec *c);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif /*MOD_PROXY_H*/