mod_proxy.h revision d5ea44510f258c84b08a9cecd1804cc41fabfc45
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu/* ====================================================================
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * The Apache Software License, Version 1.1
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu *
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * Copyright (c) 2000 The Apache Software Foundation. All rights
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu * reserved.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu *
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * Redistribution and use in source and binary forms, with or without
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * modification, are permitted provided that the following conditions
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder * are met:
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu *
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 *
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.
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder *
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.
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder *
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.
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder *
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 *
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 * ====================================================================
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 * <http://www.apache.org/>.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu *
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.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu */
15a8dd18bba124cd031e4b658c5a8202ffea08edChristian Maeder
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu#ifndef MOD_PROXY_H
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu#define MOD_PROXY_H
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder
a62775006ae39677af366c0f7b599924243cc65bChristian Maeder/*
3f5d611a1388ce3cd33f86da3f1e9b7ad68d087cMihaela Turcu * Main include file for the Apache proxy
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu */
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu/*
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu Note that the Explain() stuff is not yet complete.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu Also note numerous FIXMEs and CHECKMEs which should be eliminated.
1070181294f9381ac4ac19eba1c3ecc40fc731a4Mihaela Turcu
d20b265a2765e843986ceed6bf0055582981bf0fChristian Maeder If TESTING is set, then garbage collection doesn't delete ... probably a good
d20b265a2765e843986ceed6bf0055582981bf0fChristian Maeder idea when hacking.
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder This code is once again experimental!
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder Things to do:
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder
a62775006ae39677af366c0f7b599924243cc65bChristian Maeder 1. Make it completely work (for FTP too)
765f3b8c82bca96eeb44463da2305201b1a493daChristian Maeder
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder 2. HTTP/1.1
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder Chuck Murcko <chuck@topsail.org> 02-06-01
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder */
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder#define TESTING 0
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder#undef EXPLAIN
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder
d20b265a2765e843986ceed6bf0055582981bf0fChristian Maeder#include "apr_compat.h"
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder#include "apr_lib.h"
64610ae60115fa0465d6d8548827b13d214cdc9eChristian Maeder#include "apr_strings.h"
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder#if APR_HAVE_NETDB_H
17f1de180b775332d98ff24c7ce51d6866272dcdChristian Maeder#include <netdb.h>
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder#endif
a62775006ae39677af366c0f7b599924243cc65bChristian Maeder#if APR_HAVE_SYS_SOCKET_H
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder#include <sys/socket.h>
7cfd47f6dc4147e9a3d21d72f68c6325552092f0Christian Maeder#endif
de2d031e186086e2cb775bc59bacda87c9b18371Christian Maeder#if APR_HAVE_NETINET_IN_H
a62775006ae39677af366c0f7b599924243cc65bChristian Maeder#include <netinet/in.h>
a62775006ae39677af366c0f7b599924243cc65bChristian Maeder#endif
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#if APR_HAVE_ARPA_INET_H
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#include <arpa/inet.h>
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder#endif
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder#include "httpd.h"
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder#include "http_config.h"
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder#include "http_protocol.h"
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maederextern module AP_MODULE_DECLARE_DATA proxy_module;
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder/* for proxy_canonenc() */
d12f7a58b996457c25e12d674153346a4e21930eChristian Maederenum enctype {
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder enc_path, enc_search, enc_user, enc_fpath, enc_parm
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder};
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#define HDR_APP (0) /* append header, for proxy_add_header() */
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder#define HDR_REP (1) /* replace header, for proxy_add_header() */
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder
398f02e814574f163278b28b5c78cd213493f7ccChristian Maeder#if APR_CHARSET_EBCDIC
398f02e814574f163278b28b5c78cd213493f7ccChristian Maeder#define CRLF "\r\n"
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#else /*APR_CHARSET_EBCDIC*/
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder#define CRLF "\015\012"
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder#endif /*APR_CHARSET_EBCDIC*/
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder#define DEFAULT_FTP_DATA_PORT 20
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder#define DEFAULT_FTP_PORT 21
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#define DEFAULT_GOPHER_PORT 70
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#define DEFAULT_NNTP_PORT 119
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder#define DEFAULT_WAIS_PORT 210
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#define DEFAULT_HTTPS_PORT 443
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder#define DEFAULT_SNEWS_PORT 563
712ff727df7fe324064a1082a40d66a18a3df352Christian Maeder#define DEFAULT_PROSPERO_PORT 1525 /* WARNING: conflict w/Oracle */
53d2d31717e8c65bb3c2d1f2cd891d626cf45e5bChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder#define DEFAULT_CACHE_COMPLETION (0.9)
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder/* Some WWW schemes and their default ports; this is basically /etc/services */
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maederstruct proxy_services {
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder const char *scheme;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder int port;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder};
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder/* static information about a remote proxy */
712ff727df7fe324064a1082a40d66a18a3df352Christian Maederstruct proxy_remote {
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 */
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder int port; /* the port for this proxy */
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder};
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maederstruct proxy_alias {
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder const char *real;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder const char *fake;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder};
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maederstruct dirconn_entry {
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder char *name;
398f02e814574f163278b28b5c78cd213493f7ccChristian Maeder struct in_addr addr, mask;
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder struct hostent *hostentry;
398f02e814574f163278b28b5c78cd213493f7ccChristian Maeder int (*matcher) (struct dirconn_entry * This, request_rec *r);
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder};
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maederstruct noproxy_entry {
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder const char *name;
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder struct in_addr addr;
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder};
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maederstruct nocache_entry {
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder const char *name;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder struct in_addr addr;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder};
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maedertypedef struct {
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *proxies;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *aliases;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *raliases;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *noproxies;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *dirconn;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *nocaches;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder apr_array_header_t *allowed_connect_ports;
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 char req_set;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder float cache_completion; /* Force cache completion after this point */
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder enum {
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder via_off,
a2cc771b106f5792a02348fd36475550b8731792Christian Maeder via_on,
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder via_block,
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder via_full
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder } viaopt; /* how to deal with proxy Via: headers */
a2cc771b106f5792a02348fd36475550b8731792Christian Maeder char viaopt_set;
a2cc771b106f5792a02348fd36475550b8731792Christian Maeder size_t recv_buffer_size;
a2cc771b106f5792a02348fd36475550b8731792Christian Maeder char recv_buffer_size_set;
712ff727df7fe324064a1082a40d66a18a3df352Christian Maeder} proxy_server_conf;
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maeder
dc792317de0a95aac4e9a6dadfb78df050e5022eChristian Maederstruct per_thread_data {
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder struct hostent hpbuf;
3397210aac34a94e9ae85faacf7f6a02a808097eChristian Maeder u_long ipaddr;
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder char *charpbuf[2];
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder};
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maedertypedef struct {
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder float cache_completion; /* completion percentage */
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder int content_length; /* length of the content */
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder} proxy_completion;
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder/* Function prototypes */
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder
16779ccfe622e9db869898f724bc0132b90cb7d7Christian Maeder/* proxy_connect.c */
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maederint ap_proxy_connect_handler(request_rec *r, char *url,
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder const char *proxyhost, int proxyport);
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder/* proxy_ftp.c */
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder
c55f9e48a7d93c41ebfe7a3216ed305165346e2fChristian Maeder#if FTP
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 Maeder#endif
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder/* proxy_http.c */
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
d12f7a58b996457c25e12d674153346a4e21930eChristian Maederint ap_proxy_http_canon(request_rec *r, char *url, const char *scheme,
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder int def_port);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxy_http_handler(request_rec *r, char *url,
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder const char *proxyhost, int proxyport);
d12f7a58b996457c25e12d674153346a4e21930eChristian Maeder
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder/* proxy_util.c */
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederint ap_proxy_hex2c(const char *x);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maedervoid ap_proxy_c2hex(int ch, char *x);
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maederchar *ap_proxy_canonenc(apr_pool_t *p, const char *x, int len, enum enctype t,
c5ddf41fe430a758733dbc46db25d5910c85ab8cChristian Maeder int isenc);
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);
int ap_proxy_is_ipaddr(struct dirconn_entry *This, apr_pool_t *p);
int ap_proxy_is_domainname(struct dirconn_entry *This, apr_pool_t *p);
int ap_proxy_is_hostname(struct dirconn_entry *This, apr_pool_t *p);
int ap_proxy_is_word(struct dirconn_entry *This, apr_pool_t *p);
apr_status_t ap_proxy_doconnect(apr_socket_t *sock, char *host, apr_uint32_t port, request_rec *r);
/* This function is called by ap_table_do() for all header lines */
int ap_proxy_send_hdr_line(void *p, const char *key, const char *value);
#endif /*MOD_PROXY_H*/