diff options
Diffstat (limited to 'src/main/java/com/btr/proxy/selector/whitelist/ProxyBypassListSelector.java')
-rw-r--r-- | src/main/java/com/btr/proxy/selector/whitelist/ProxyBypassListSelector.java | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/main/java/com/btr/proxy/selector/whitelist/ProxyBypassListSelector.java b/src/main/java/com/btr/proxy/selector/whitelist/ProxyBypassListSelector.java new file mode 100644 index 0000000..81e2a7d --- /dev/null +++ b/src/main/java/com/btr/proxy/selector/whitelist/ProxyBypassListSelector.java @@ -0,0 +1,84 @@ +package com.btr.proxy.selector.whitelist; + +import java.io.IOException; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.SocketAddress; +import java.net.URI; +import java.util.List; + +import com.btr.proxy.util.ProxyUtil; +import com.btr.proxy.util.UriFilter; + +/***************************************************************************** + * Special purpose ProxySelector used as Facade on top of a normal ProxySelector. + * A wrapper that will first check the URI against a white list and if it matches + * it will return DIRECT else it will pass the URI to an delegate for inspection. + * + * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009 + ****************************************************************************/ + +public class ProxyBypassListSelector extends ProxySelector { + + private ProxySelector delegate; + private List<UriFilter> whiteListFilter; + + + /************************************************************************* + * Constructor + * @param whiteListFilter a list of filters for whitelist URLs. + * @param proxySelector the proxy selector to use. + ************************************************************************/ + + public ProxyBypassListSelector(List<UriFilter> whiteListFilter, ProxySelector proxySelector) { + super(); + if (whiteListFilter == null) { + throw new NullPointerException("Whitelist must not be null."); + } + if (proxySelector == null) { + throw new NullPointerException("ProxySelector must not be null."); + } + + this.delegate = proxySelector; + this.whiteListFilter = whiteListFilter; + } + + + /************************************************************************* + * Constructor + * @param whiteList a list of filters for whitelist URLs as comma/space separated string. + * @param proxySelector the proxy selector to use. + ************************************************************************/ + + public ProxyBypassListSelector(String whiteList, ProxySelector proxySelector) { + this(new DefaultWhiteListParser().parseWhiteList(whiteList), proxySelector); + } + + /************************************************************************* + * connectFailed + * @see java.net.ProxySelector#connectFailed(java.net.URI, java.net.SocketAddress, java.io.IOException) + ************************************************************************/ + @Override + public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { + this.delegate.connectFailed(uri, sa, ioe); + } + + /************************************************************************* + * select + * @see java.net.ProxySelector#select(java.net.URI) + ************************************************************************/ + + @Override + public List<Proxy> select(URI uri) { + + // If in white list, use DIRECT connection. + for (UriFilter filter : this.whiteListFilter) { + if (filter.accept(uri)) { + return ProxyUtil.noProxyList(); + } + } + + return this.delegate.select(uri); + } + +} |