mod_proxy.h revision 5babe00918c88eda487771fa6d6d4a1a19c0ced0
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* ====================================================================
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * The Apache Software License, Version 1.1
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Copyright (c) 2000 The Apache Software Foundation. All rights
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * reserved.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Redistribution and use in source and binary forms, with or without
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * modification, are permitted provided that the following conditions
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * are met:
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * 1. Redistributions of source code must retain the above copyright
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * notice, this list of conditions and the following disclaimer.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * 2. Redistributions in binary form must reproduce the above copyright
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * notice, this list of conditions and the following disclaimer in
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * the documentation and/or other materials provided with the
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * distribution.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * 3. The end-user documentation included with the redistribution,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * if any, must include the following acknowledgment:
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * "This product includes software developed by the
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Apache Software Foundation (http://www.apache.org/)."
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Alternately, this acknowledgment may appear in the software itself,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * if and wherever such third-party acknowledgments normally appear.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * 4. The names "Apache" and "Apache Software Foundation" must
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * not be used to endorse or promote products derived from this
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * software without prior written permission. For written
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * permission, please contact apache@apache.org.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * 5. Products derived from this software may not be called "Apache",
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * nor may "Apache" appear in their name, without prior written
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * permission of the Apache Software Foundation.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * SUCH DAMAGE.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * ====================================================================
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * This software consists of voluntary contributions made by many
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * individuals on behalf of the Apache Software Foundation. For more
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * information on the Apache Software Foundation, please see
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Portions of this software are based upon public domain software
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * originally written at the National Center for Supercomputing Applications,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * University of Illinois, Urbana-Champaign.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Main include file for the Apache proxy
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Note that the Explain() stuff is not yet complete.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Also note numerous FIXMEs and CHECKMEs which should be eliminated.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb If TESTING is set, then garbage collection doesn't delete ... probably a good
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb idea when hacking.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb This code is still experimental!
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Things to do:
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 1. Make it garbage collect in the background, not while someone is
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb waiting for a response!
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 2. Check the logic thoroughly.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 3. Empty directories are only removed the next time round (but this does
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb avoid two passes). Consider doing them the first time round.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Ben Laurie <ben@algroup.co.uk> 30 Mar 96
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb More things to do:
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 0. Code cleanup (ongoing)
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 1. add 230 response output for ftp now that it works
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 2. Make the ftp proxy transparent, also same with (future) gopher & wais
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 3. Use protocol handler struct a la Apache module handlers (Dirk van Gulik)
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 4. Use a cache expiry database for more efficient GC (Jeremy Wohl)
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 5. Bulletproof GC against SIGALRM
b45c1c292ff1fa635004ae81fa691f8cb3cdda85rbb Chuck Murcko <chuck@topsail.org> 15 April 1997
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* for proxy_canonenc() */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#define HDR_APP (0) /* append header, for proxy_add_header() */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#define HDR_REP (1) /* replace header, for proxy_add_header() */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#else /*CHARSET_EBCDIC*/
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#endif /*CHARSET_EBCDIC*/
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#define DEFAULT_PROSPERO_PORT 1525 /* WARNING: conflict w/Oracle */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* Some WWW schemes and their default ports; this is basically /etc/services */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb const char *scheme;
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* static information about a remote proxy */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb const char *scheme; /* the schemes handled by this proxy, or '*' */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb const char *protocol; /* the scheme used to talk to this proxy */
290ecc1ddceca1ed49bc1a5338921264b5c3e07cwrowe int (*matcher) (struct dirconn_entry * This, request_rec *r);
290ecc1ddceca1ed49bc1a5338921264b5c3e07cwrowetypedef struct {
2f1949bb0e3c209db94c8d521cba7380b9d11421trawick a domain name in the request */
290ecc1ddceca1ed49bc1a5338921264b5c3e07cwrowe float cache_completion; /* Force cache completion after this point */
290ecc1ddceca1ed49bc1a5338921264b5c3e07cwrowetypedef struct {
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* Function prototypes */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_connect_handler(request_rec *r, ap_cache_el *c, char *url,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_ftp_handler(request_rec *r, ap_cache_el *c, char *url);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_http_canon(request_rec *r, char *url, const char *scheme,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_http_handler(request_rec *r, ap_cache_el *c, char *url,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_hex2c(const char *x);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbchar *ap_proxy_canonenc(ap_pool_t *p, const char *x, int len, enum enctype t,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbchar *ap_proxy_canon_netloc(ap_pool_t *p, char **const urlp, char **userp,
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbconst char *ap_proxy_date_canon(ap_pool_t *p, const char *x);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbap_table_t *ap_proxy_read_headers(request_rec *r, char *buffer, int size, BUFF *f);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbblong int ap_proxy_send_fb(proxy_completion *, BUFF *f, request_rec *r, ap_cache_el *c);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbvoid ap_proxy_send_headers(request_rec *r, const char *respline, ap_table_t *hdrs);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbvoid ap_proxy_hash(const char *it, char *val, int ndepth, int nlength);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_hex2sec(const char *x);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbvoid ap_proxy_sec2hex(int t, char *y);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbconst char *ap_proxy_host2addr(const char *host, struct hostent *reqhp);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxyerror(request_rec *r, int statuscode, const char *message);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_is_ipaddr(struct dirconn_entry *This, ap_pool_t *p);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_is_domainname(struct dirconn_entry *This, ap_pool_t *p);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_is_hostname(struct dirconn_entry *This, ap_pool_t *p);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_is_word(struct dirconn_entry *This, ap_pool_t *p);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_doconnect(ap_socket_t *sock, char *host, ap_uint32_t port, request_rec *r);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* This function is called by ap_table_do() for all header lines */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbint ap_proxy_send_hdr_line(void *p, const char *key, const char *value);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbbunsigned ap_proxy_bputs2(const char *data, BUFF *client, ap_cache_el *cache);
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#endif /*MOD_PROXY_H*/