mod_proxy.h revision 984519938db95cd681c159102a852e523da1d07e
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/* ====================================================================
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * The Apache Software License, Version 1.1
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb *
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Copyright (c) 2000 The Apache Software Foundation. All rights
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * reserved.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb *
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 *
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * 1. Redistributions of source code must retain the above copyright
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * notice, this list of conditions and the following disclaimer.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb *
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 *
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 *
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 *
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 *
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 *
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 * <http://www.apache.org/>.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb *
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 */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#ifndef MOD_PROXY_H
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#define MOD_PROXY_H
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/*
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb * Main include file for the Apache proxy
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb/*
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Note that the Explain() stuff is not yet complete.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Also note numerous FIXMEs and CHECKMEs which should be eliminated.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb If TESTING is set, then garbage collection doesn't delete ... probably a good
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb idea when hacking.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb This code is still experimental!
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Things to do:
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 1. Make it garbage collect in the background, not while someone is waiting for
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb a response!
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 2. Check the logic thoroughly.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 3. Empty directories are only removed the next time round (but this does avoid
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb two passes). Consider doing them the first time round.
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Ben Laurie <ben@algroup.co.uk> 30 Mar 96
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb More things to do:
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 0. Code cleanup (ongoing)
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 1. add 230 response output for ftp now that it works
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 2. Make the ftp proxy transparent, also same with (future) gopher & wais
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
a2a0abd88b19e042a3eb2a9fa1702c25ad51303dwrowe 3. Use protocol handler struct a la Apache module handlers (Dirk van Gulik)
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 4. Use a cache expiry database for more efficient GC (Jeremy Wohl)
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb 5. Bulletproof GC against SIGALRM
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb Chuck Murcko <chuck@topsail.org> 15 April 1997
b45c1c292ff1fa635004ae81fa691f8cb3cdda85rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb */
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#define TESTING 0
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#undef EXPLAIN
a2a0abd88b19e042a3eb2a9fa1702c25ad51303dwrowe
a2a0abd88b19e042a3eb2a9fa1702c25ad51303dwrowe#include "httpd.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include "http_config.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include "http_protocol.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include "ap_cache.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include "buff.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include "apr_compat.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include "apr_strings.h"
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#ifdef HAVE_NETDB_H
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#include <netdb.h>
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#endif
c3e342e5b0b9fea6617ee16d2da02c3ef2108126dougm
b38846b15c8891c6dec44dcc4f96ca40721bf663rbb#ifdef HAVE_SYS_SOCKET_H
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#include <sys/socket.h>
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#endif
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#ifdef HAVE_NETINET_IN_H
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#include <netinet/in.h>
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#endif
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#ifdef HAVE_ARPA_INET_H
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#include <arpa/inet.h>
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#endif
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweextern module AP_MODULE_DECLARE_DATA proxy_module;
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe/* for proxy_canonenc() */
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweenum enctype {
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe enc_path, enc_search, enc_user, enc_fpath, enc_parm
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe};
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define HDR_APP (0) /* append header, for proxy_add_header() */
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define HDR_REP (1) /* replace header, for proxy_add_header() */
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#ifdef CHARSET_EBCDIC
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define CRLF "\r\n"
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#else /*CHARSET_EBCDIC*/
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define CRLF "\015\012"
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#endif /*CHARSET_EBCDIC*/
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define DEFAULT_FTP_DATA_PORT 20
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define DEFAULT_FTP_PORT 21
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe#define DEFAULT_GOPHER_PORT 70
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe#define DEFAULT_NNTP_PORT 119
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe#define DEFAULT_WAIS_PORT 210
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe#define DEFAULT_HTTPS_PORT 443
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe#define DEFAULT_SNEWS_PORT 563
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe#define DEFAULT_PROSPERO_PORT 1525 /* WARNING: conflict w/Oracle */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe#define DEFAULT_CACHE_COMPLETION (0.9)
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe/* Some WWW schemes and their default ports; this is basically /etc/services */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowestruct proxy_services {
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe const char *scheme;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe int port;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe};
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe/* static information about a remote proxy */
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowestruct proxy_remote {
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe const char *scheme; /* the schemes handled by this proxy, or '*' */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe const char *protocol; /* the scheme used to talk to this proxy */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe const char *hostname; /* the hostname of this proxy */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe int port; /* the port for this proxy */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe};
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowestruct proxy_alias {
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe const char *real;
4775dfc34c90fada8c7c4d6a57ed8a3114d55c2dtrawick const char *fake;
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe};
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowestruct dirconn_entry {
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe char *name;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe struct in_addr addr, mask;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe struct hostent *hostentry;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe int (*matcher) (struct dirconn_entry * This, request_rec *r);
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe};
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowestruct noproxy_entry {
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe const char *name;
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe struct in_addr addr;
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe};
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowestruct nocache_entry {
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe const char *name;
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe struct in_addr addr;
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe};
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowetypedef struct {
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *proxies;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *aliases;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *raliases;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *noproxies;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *dirconn;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *nocaches;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe apr_array_header_t *allowed_connect_ports;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe const char *domain; /* domain name to use in absence of a domain name in the request */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe int req; /* true if proxy requests are enabled */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe float cache_completion; /* Force cache completion after this point */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe enum {
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe via_off,
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe via_on,
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe via_block,
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe via_full
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe } viaopt; /* how to deal with proxy Via: headers */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe size_t recv_buffer_size;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe ap_cache_handle_t *cache;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe} proxy_server_conf;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowestruct per_thread_data {
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe struct hostent hpbuf;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe u_long ipaddr;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe char *charpbuf[2];
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe};
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowetypedef struct {
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe float cache_completion; /* completion percentage */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe int content_length; /* length of the content */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe} proxy_completion;
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe/* Function prototypes */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe/* proxy_connect.c */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wroweint ap_proxy_connect_handler(request_rec *r, ap_cache_el *c, char *url,
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe const char *proxyhost, int proxyport);
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe/* proxy_ftp.c */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wroweint ap_proxy_ftp_canon(request_rec *r, char *url);
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wroweint ap_proxy_ftp_handler(request_rec *r, ap_cache_el *c, char *url);
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe/* proxy_http.c */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wroweint ap_proxy_http_canon(request_rec *r, char *url, const char *scheme,
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe int def_port);
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wroweint ap_proxy_http_handler(request_rec *r, ap_cache_el *c, char *url,
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe const char *proxyhost, int proxyport);
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe/* proxy_util.c */
fa06de8a28a737e8fbaad76d7f3ff67aaa5e4a09wrowe
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_hex2c(const char *x);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowevoid ap_proxy_c2hex(int ch, char *x);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowechar *ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe int isenc);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowechar *ap_proxy_canon_netloc(apr_pool_t *p, char **const urlp, char **userp,
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe char **passwordp, char **hostp, int *port);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweconst char *ap_proxy_date_canon(apr_pool_t *p, const char *x);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweapr_table_t *ap_proxy_read_headers(request_rec *r, char *buffer, int size, BUFF *f);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowelong int ap_proxy_send_fb(proxy_completion *, BUFF *f, request_rec *r, ap_cache_el *c);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowevoid ap_proxy_send_headers(request_rec *r, const char *respline, apr_table_t *hdrs);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_liststr(const char *list, const char *val);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowevoid ap_proxy_hash(const char *it, char *val, int ndepth, int nlength);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_hex2sec(const char *x);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowevoid ap_proxy_sec2hex(int t, char *y);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweconst char *ap_proxy_host2addr(const char *host, struct hostent *reqhp);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_cache_send(request_rec *r, ap_cache_el *c);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_cache_should_cache(request_rec *r, apr_table_t *resp_hdrs,
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowe const int is_HTTP1);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_cache_update(ap_cache_el *c);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewrowevoid ap_proxy_cache_error(ap_cache_el **r);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxyerror(request_rec *r, int statuscode, const char *message);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweapr_status_t ap_proxy_doconnect(apr_socket_t *sock, char *host, apr_uint32_t port, request_rec *r);
83a8dc5a596a8a1b9d14f063268287d123b9ed7ewroweint ap_proxy_garbage_init(server_rec *, apr_pool_t *);
cc9582e53aead2a044077c4a92f3dfc3605590b3wrowe/* This function is called by ap_table_do() for all header lines */
cc9582e53aead2a044077c4a92f3dfc3605590b3wroweint ap_proxy_send_hdr_line(void *p, const char *key, const char *value);
cc9582e53aead2a044077c4a92f3dfc3605590b3wroweunsigned ap_proxy_bputs2(const char *data, apr_socket_t *client, ap_cache_el *cache);
cc9582e53aead2a044077c4a92f3dfc3605590b3wrowe
cc9582e53aead2a044077c4a92f3dfc3605590b3wrowe#endif /*MOD_PROXY_H*/
cc9582e53aead2a044077c4a92f3dfc3605590b3wrowe