mod_proxy.h revision d5ea44510f258c84b08a9cecd1804cc41fabfc45
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu/* ====================================================================
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * The Apache Software License, Version 1.1
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * Copyright (c) 2000 The Apache Software Foundation. All rights
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * Redistribution and use in source and binary forms, with or without
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * modification, are permitted provided that the following conditions
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * 1. Redistributions of source code must retain the above copyright
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * notice, this list of conditions and the following disclaimer.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * 2. Redistributions in binary form must reproduce the above copyright
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * notice, this list of conditions and the following disclaimer in
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder * the documentation and/or other materials provided with the
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder * distribution.
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder * 3. The end-user documentation included with the redistribution,
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * if any, must include the following acknowledgment:
3f5d611a1388ce3cd33f86da3f1e9b7ad68d087cMihaela Turcu * "This product includes software developed by the
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder * Apache Software Foundation (http://www.apache.org/)."
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder * Alternately, this acknowledgment may appear in the software itself,
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder * if and wherever such third-party acknowledgments normally appear.
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder * 4. The names "Apache" and "Apache Software Foundation" must
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * not be used to endorse or promote products derived from this
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * software without prior written permission. For written
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder * permission, please contact apache@apache.org.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * 5. Products derived from this software may not be called "Apache",
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * nor may "Apache" appear in their name, without prior written
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder * permission of the Apache Software Foundation.
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * SUCH DAMAGE.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * ====================================================================
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * This software consists of voluntary contributions made by many
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * individuals on behalf of the Apache Software Foundation. For more
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * information on the Apache Software Foundation, please see
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * Portions of this software are based upon public domain software
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * originally written at the National Center for Supercomputing Applications,
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * University of Illinois, Urbana-Champaign.
3f5d611a1388ce3cd33f86da3f1e9b7ad68d087cMihaela Turcu * Main include file for the Apache proxy
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu Note that the Explain() stuff is not yet complete.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu Also note numerous FIXMEs and CHECKMEs which should be eliminated.
d20b265a2765e843986ceed6bf0055582981bf0fChristian Maeder If TESTING is set, then garbage collection doesn't delete ... probably a good
d20b265a2765e843986ceed6bf0055582981bf0fChristian Maeder idea when hacking.
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder This code is once again experimental!
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder Things to do:
a62775006ae39677af366c0f7b599924243cc65bChristian Maeder 1. Make it completely work (for FTP too)
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder Chuck Murcko <chuck@topsail.org> 02-06-01
d12f7a58b996457c25e12d674153346a4e21930eChristian Maederextern module AP_MODULE_DECLARE_DATA proxy_module;
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder/* for proxy_canonenc() */
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder enc_path, enc_search, enc_user, enc_fpath, enc_parm
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#define HDR_APP (0) /* append header, for proxy_add_header() */
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder#define HDR_REP (1) /* replace header, for proxy_add_header() */
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#else /*APR_CHARSET_EBCDIC*/
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder#endif /*APR_CHARSET_EBCDIC*/
712ff727df7fe324064a1082a40d66a18a3df352Christian Maeder#define DEFAULT_PROSPERO_PORT 1525 /* WARNING: conflict w/Oracle */
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder/* Some WWW schemes and their default ports; this is basically /etc/services */
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder/* static information about a remote proxy */
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder const char *scheme; /* the schemes handled by this proxy, or '*' */
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder const char *protocol; /* the scheme used to talk to this proxy */
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder const char *hostname; /* the hostname of this proxy */
398f02e814574f163278b28b5c78cd213493f7ccChristian Maeder int (*matcher) (struct dirconn_entry * This, request_rec *r);
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maedertypedef struct {
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder const char *domain; /* domain name to use in absence of a domain name in the request */
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder int req; /* true if proxy requests are enabled */
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder float cache_completion; /* Force cache completion after this point */
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder } viaopt; /* how to deal with proxy Via: headers */
d12f7a58b996457c25e12d674153346a4e21930eChristian Maedertypedef struct {
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder float cache_completion; /* completion percentage */
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder int content_length; /* length of the content */
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder/* Function prototypes */
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maederint ap_proxy_connect_handler(request_rec *r, char *url,
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maederint ap_proxy_ftp_canon(request_rec *r, char *url);
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maederint ap_proxy_ftp_handler(request_rec *r, ap_cache_el *c, char *url);
d12f7a58b996457c25e12d674153346a4e21930eChristian Maederint ap_proxy_http_canon(request_rec *r, char *url, const char *scheme,
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxy_http_handler(request_rec *r, char *url,
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxy_hex2c(const char *x);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederchar *ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederchar *ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder char **passwordp, char **hostp, int *port);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederconst char *ap_proxy_date_canon(apr_pool_t *p, const char *x);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederapr_table_t *ap_proxy_read_headers(request_rec *r, char *buffer, int size, conn_rec *c);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maedervoid ap_proxy_send_headers(request_rec *r, const char *respline, apr_table_t *hdrs);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxy_liststr(const char *list, const char *val);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maedervoid ap_proxy_hash(const char *it, char *val, int ndepth, int nlength);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxy_hex2sec(const char *x);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maedervoid ap_proxy_sec2hex(int t, char *y);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederconst char *ap_proxy_host2addr(const char *host, struct hostent *reqhp);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxyerror(request_rec *r, int statuscode, const char *message);