org.mortbay.http.handler

Class ProxyHandler

public class ProxyHandler extends AbstractHttpHandler

Proxy request handler. A HTTP/1.1 Proxy. This implementation uses the JVMs URL implementation to make proxy requests.

The HttpTunnel mechanism is also used to implement the CONNECT method.

Version: $Id: ProxyHandler.java,v 1.34 2005/10/05 13:32:59 gregwilkins Exp $

Author: Greg Wilkins (gregw) giacof@tiscali.it (chained proxy)

Field Summary
protected HashSet_allowedConnectPorts
Set of allowed CONNECT ports.
protected StringMap_DontProxyHeaders
Map of leg by leg headers (not end to end).
protected Set_proxyHostsBlackList
protected Set_proxyHostsWhiteList
protected StringMap_ProxyAuthHeaders
Map of leg by leg headers (not end to end).
protected StringMap_ProxySchemes
Map of allows schemes to proxy Should be a set, but more efficient string map is used instead.
protected int_tunnelTimeoutMs
Method Summary
protected voidcustomizeConnection(String pathInContext, String pathParams, HttpRequest request, Socket socket)
Customize proxy Socket connection for CONNECT.
protected voidcustomizeConnection(String pathInContext, String pathParams, HttpRequest request, URLConnection connection)
Customize proxy URL connection.
String[]getProxyHostsBlackList()
Get proxy host black list.
String[]getProxyHostsWhiteList()
Get proxy host white list.
intgetTunnelTimeoutMs()
voidhandle(String pathInContext, String pathParams, HttpRequest request, HttpResponse response)
voidhandleConnect(String pathInContext, String pathParams, HttpRequest request, HttpResponse response)
booleanisAnonymous()
protected booleanisForbidden(URI uri)
Is URL Forbidden.
protected booleanisForbidden(String scheme, String host, int port, boolean openNonPrivPorts)
Is scheme,host & port Forbidden.
protected URLisProxied(URI uri)
Is URL Proxied.
protected HttpTunnelnewHttpTunnel(HttpRequest request, HttpResponse response, InetAddress iaddr, int port, int timeoutMS)
protected voidsendForbid(HttpRequest request, HttpResponse response, URI uri)
Send Forbidden.
voidsetAnonymous(boolean anonymous)
voidsetProxyHostsBlackList(String[] hosts)
Set proxy host black list.
voidsetProxyHostsWhiteList(String[] hosts)
Set proxy host white list.
voidsetTunnelTimeoutMs(int ms)
Tunnel timeout.
voidstart()

Field Detail

_allowedConnectPorts

protected HashSet _allowedConnectPorts
Set of allowed CONNECT ports.

_DontProxyHeaders

protected StringMap _DontProxyHeaders
Map of leg by leg headers (not end to end). Should be a set, but more efficient string map is used instead.

_proxyHostsBlackList

protected Set _proxyHostsBlackList

_proxyHostsWhiteList

protected Set _proxyHostsWhiteList

_ProxyAuthHeaders

protected StringMap _ProxyAuthHeaders
Map of leg by leg headers (not end to end). Should be a set, but more efficient string map is used instead.

_ProxySchemes

protected StringMap _ProxySchemes
Map of allows schemes to proxy Should be a set, but more efficient string map is used instead.

_tunnelTimeoutMs

protected int _tunnelTimeoutMs

Method Detail

customizeConnection

protected void customizeConnection(String pathInContext, String pathParams, HttpRequest request, Socket socket)
Customize proxy Socket connection for CONNECT. Method to allow derived handlers to customize the tunnel sockets.

customizeConnection

protected void customizeConnection(String pathInContext, String pathParams, HttpRequest request, URLConnection connection)
Customize proxy URL connection. Method to allow derived handlers to customize the connection.

getProxyHostsBlackList

public String[] getProxyHostsBlackList()
Get proxy host black list.

Returns: Array of hostnames and IPs that are NOT proxied.

getProxyHostsWhiteList

public String[] getProxyHostsWhiteList()
Get proxy host white list.

Returns: Array of hostnames and IPs that are proxied, or an empty array if all hosts are proxied.

getTunnelTimeoutMs

public int getTunnelTimeoutMs()

handle

public void handle(String pathInContext, String pathParams, HttpRequest request, HttpResponse response)

handleConnect

public void handleConnect(String pathInContext, String pathParams, HttpRequest request, HttpResponse response)

isAnonymous

public boolean isAnonymous()

Returns: Returns the anonymous.

isForbidden

protected boolean isForbidden(URI uri)
Is URL Forbidden.

Returns: True if the URL is not forbidden. Calls isForbidden(scheme,host,port,true);

isForbidden

protected boolean isForbidden(String scheme, String host, int port, boolean openNonPrivPorts)
Is scheme,host & port Forbidden.

Parameters: scheme A scheme that mast be in the proxySchemes StringMap. host A host that must pass the white and black lists port A port that must in the allowedConnectPorts Set openNonPrivPorts If true ports greater than 1024 are allowed.

Returns: True if the request to the scheme,host and port is not forbidden.

isProxied

protected URL isProxied(URI uri)
Is URL Proxied. Method to allow derived handlers to select which URIs are proxied and to where.

Parameters: uri The requested URI, which should include a scheme, host and port.

Returns: The URL to proxy to, or null if the passed URI should not be proxied. The default implementation returns the passed uri if isForbidden() returns true.

newHttpTunnel

protected HttpTunnel newHttpTunnel(HttpRequest request, HttpResponse response, InetAddress iaddr, int port, int timeoutMS)

sendForbid

protected void sendForbid(HttpRequest request, HttpResponse response, URI uri)
Send Forbidden. Method called to send forbidden response. Default implementation calls sendError(403)

setAnonymous

public void setAnonymous(boolean anonymous)

Parameters: anonymous The anonymous to set.

setProxyHostsBlackList

public void setProxyHostsBlackList(String[] hosts)
Set proxy host black list.

Parameters: hosts Array of hostnames and IPs that are NOT proxied.

setProxyHostsWhiteList

public void setProxyHostsWhiteList(String[] hosts)
Set proxy host white list.

Parameters: hosts Array of hostnames and IPs that are proxied, or null if all hosts are proxied.

setTunnelTimeoutMs

public void setTunnelTimeoutMs(int ms)
Tunnel timeout. IE on win2000 has connections issues with normal timeout handling. This timeout should be set to a low value that will expire to allow IE to see the end of the tunnel connection.

start

public void start()
Copyright © 2004 Mortbay Consulting Pty. Ltd. All Rights Reserved.