mod_proxy.h revision b0974c82efee430dbcb479cbb7f93b96a78032a3
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* ====================================================================
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * The Apache Software License, Version 1.1
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny *
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Copyright (c) 2000-2001 The Apache Software Foundation. All rights
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * reserved.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny *
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 * are met:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny *
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 *
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 *
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 *
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 *
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 *
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 *
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 * <http://www.apache.org/>.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny *
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 */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#ifndef MOD_PROXY_H
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define MOD_PROXY_H
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/*
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny * Main include file for the Apache proxy
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/*
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Also note numerous FIXMEs and CHECKMEs which should be eliminated.
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny This code is once again experimental!
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Things to do:
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny 1. Make it completely work (for FTP too)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny 2. HTTP/1.1
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny Chuck Murcko <chuck@topsail.org> 02-06-01
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define CORE_PRIVATE
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_hooks.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_compat.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_lib.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_strings.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_buckets.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_md5.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_network_io.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_pools.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_strings.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_uri.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_date.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_fnmatch.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define APR_WANT_STRFUNC
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "apr_want.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "httpd.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_config.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "ap_config.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_core.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_protocol.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_request.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_vhost.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_main.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_log.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "http_connection.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include "util_filter.h"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#if APR_HAVE_NETINET_IN_H
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include <netinet/in.h>
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#if APR_HAVE_ARPA_INET_H
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#include <arpa/inet.h>
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* for proxy_canonenc() */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenyenum enctype {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny enc_path, enc_search, enc_user, enc_fpath, enc_parm
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny};
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#if APR_CHARSET_EBCDIC
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define CRLF "\r\n"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#else /*APR_CHARSET_EBCDIC*/
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define CRLF "\015\012"
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif /*APR_CHARSET_EBCDIC*/
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* default Max-Forwards header setting */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define DEFAULT_MAX_FORWARDS 10
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* static information about a remote proxy */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenystruct proxy_remote {
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 apr_port_t port; /* the port for this proxy */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny};
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenystruct proxy_alias {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *real;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *fake;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny};
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenystruct dirconn_entry {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char *name;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct in_addr addr, mask;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct apr_sockaddr_t *hostaddr;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int (*matcher) (struct dirconn_entry * This, request_rec *r);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny};
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenystruct noproxy_entry {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *name;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny struct apr_sockaddr_t *addr;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny};
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *proxies;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *sec_proxy;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *aliases;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *raliases;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *noproxies;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *dirconn;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_array_header_t *allowed_connect_ports;
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 char req_set;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny enum {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny via_off,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny via_on,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny via_block,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny via_full
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny } viaopt; /* how to deal with proxy Via: headers */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char viaopt_set;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny size_t recv_buffer_size;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char recv_buffer_size_set;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny long maxfwd;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char maxfwd_set;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny /**
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 Zeleny */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int error_override;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int error_override_set;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int preserve_host;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int preserve_host_set;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny} proxy_server_conf;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *p; /* The path */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int p_is_fnmatch; /* Is this path an fnmatch candidate? */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny regex_t *r; /* Is this a regex? */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny} proxy_dir_conf;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny conn_rec *connection;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char *hostname;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny apr_port_t port;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny} proxy_conn_rec;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zelenytypedef struct {
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny float cache_completion; /* completion percentage */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny int content_length; /* length of the content */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny} proxy_completion;
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* hooks */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
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 */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#if !defined(WIN32)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE(type) type
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_NONSTD(type) type
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_DATA
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#elif defined(PROXY_DECLARE_STATIC)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE(type) type __stdcall
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_NONSTD(type) type
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_DATA
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#elif defined(PROXY_DECLARE_EXPORT)
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_DATA __declspec(dllexport)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#else
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE(type) __declspec(dllimport) type __stdcall
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_NONSTD(type) __declspec(dllimport) type
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#define PROXY_DECLARE_DATA __declspec(dllimport)
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyAPR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, scheme_handler, (request_rec *r,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny proxy_server_conf *conf, char *url,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny const char *proxyhost, apr_port_t proxyport))
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyAPR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, canon_handler, (request_rec *r,
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny char *url))
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyAPR_DECLARE_EXTERNAL_HOOK(proxy, PROXY, int, create_req, (request_rec *r, request_rec *pr))
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny/* proxy_util.c */
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(request_rec *)ap_proxy_make_fake_req(conn_rec *c, request_rec *r);
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan ZelenyPROXY_DECLARE(int) ap_proxy_hex2c(const char *x);
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 Zeleny int isenc);
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
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny#endif /*MOD_PROXY_H*/
e76d78338026fa47dca32eaf7f5c15eabb1b951aJan Zeleny