diff options
author | Omair Majid <[email protected]> | 2011-03-07 11:10:42 -0500 |
---|---|---|
committer | Omair Majid <[email protected]> | 2011-03-07 11:10:42 -0500 |
commit | 6ee70462f3655208b658ab057e05c0f42d2b0afb (patch) | |
tree | 1a8fe5d5fd4d12968db3af28f88e1b75f43f4370 /netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java | |
parent | 9bc8e7fc91fa792f30093e8a24396d4aa5b9a9b5 (diff) |
Add Proxy Auto Config (PAC) support
This patch adds support for reading, parsing and evaluating PAC files using
rhino.
2011-03-07 Omair Majid <[email protected]>
* NEWS: Update.
* Makefile.am
(RHINO_RUNTIME): Define to point to rhino jars, or empty.
(RUNTIME, LAUNCHER_BOOTCLASSPATH, PLUGIN_BOOTCLASSPATH): Include
RHINO_RUNTIME.
(PHONY): Add check-pac-functions, clean-jrunscript and clean-tests.
(check-local): New target. Depends on check-pac-functions.
(check-pac-functions): New target.
(jrunscript): New target.
(clean-tests): New target.
(clean-jrunscript): New target.
(netx-source-files.txt): Remove rhino related files if not building with
rhino.
(build.properties): New target.
(stamps/netx.stamp): Depend on build.properties and copy new files to
build location.
(clean-netx): Remove build.properties.
(stamps/bootstrap-directory.stamp): Add java to bootstrap programs.
* acinclude.m4 (IT_FIND_RHINO_JAR): New macro.
* configure.ac: Invoke IT_FIND_RHINO_JAR.
* netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java: Add
browserProxyAutoConfig.
(initFromBrowserConfig): Initialize browserProxyAutoConfig if needed.
(getFromBrowserPAC): Use browserProxyAutoConfig to find proxies.
* netx/net/sourceforge/jnlp/resources/Messages.properties: Replace
RPRoxyPacNotImplemented with RPRoxyPacNotSupported.
* netx/net/sourceforge/jnlp/runtime/JNLPProxySelector.java: Add
pacEvaluator.
(parseConfiguration): Initialize pacEvaluator if needed.
(getFromPAC): Use pacEvaulator to find proxies.
(getProxiesFromPacResult): New method. Converts a proxy string to a list
or proxies.
* netx/net/sourceforge/jnlp/runtime/PacEvaluator.java: New file. Defines a
Java interface for a PAC evaluator.
* netx/net/sourceforge/jnlp/runtime/FakePacEvaluator.java: New file. Dummy
implementation of a PAC evaluator.
* netx/net/sourceforge/jnlp/runtime/RhinoBasedPacEvaluator.java: New file.
A rhino-based PAC evaluator.
* netx/net/sourceforge/jnlp/runtime/PacEvaluatorFactory.java: New file. A
factory for creating the right PAC evaulator.
* netx/net/sourceforge/jnlp/runtime/pac-funcs.js: New file. Defines helper
functions needed while evaluating PAC files.
* tests/netx/pac/pac-funcs-test.js: New file. Tests the PAC helper
functions.
Diffstat (limited to 'netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java')
-rw-r--r-- | netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java b/netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java index fb08325..331b954 100644 --- a/netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java +++ b/netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java @@ -54,6 +54,8 @@ import java.util.Map; import net.sourceforge.jnlp.runtime.JNLPProxySelector; import net.sourceforge.jnlp.runtime.JNLPRuntime; +import net.sourceforge.jnlp.runtime.PacEvaluator; +import net.sourceforge.jnlp.runtime.PacEvaluatorFactory; /** * A ProxySelector which can read proxy settings from a browser's @@ -85,6 +87,8 @@ public class BrowserAwareProxySelector extends JNLPProxySelector { private String browserSocks4ProxyHost; private int browserSocks4ProxyPort; + private PacEvaluator browserProxyAutoConfig = null; + /** * Create a new instance of this class, reading configuration fropm the browser */ @@ -128,6 +132,12 @@ public class BrowserAwareProxySelector extends JNLPProxySelector { e.printStackTrace(); } + if (browserProxyType == BROWSER_PROXY_TYPE_PAC) { + if (browserAutoConfigUrl != null) { + browserProxyAutoConfig = PacEvaluatorFactory.getPacEvaluator(browserAutoConfigUrl); + } + } + browserUseSameProxy = Boolean.valueOf(prefs.get("network.proxy.share_proxy_settings")); browserHttpProxyHost = prefs.get("network.proxy.http"); @@ -216,8 +226,21 @@ public class BrowserAwareProxySelector extends JNLPProxySelector { * browser. */ private List<Proxy> getFromBrowserPAC(URI uri) { - System.err.println(R("RPRoxyPacNotImplemented")); - return Arrays.asList(new Proxy[] { Proxy.NO_PROXY }); + if (browserAutoConfigUrl == null || uri.getScheme().equals("socket")) { + return Arrays.asList(new Proxy[] { Proxy.NO_PROXY }); + } + + List<Proxy> proxies = new ArrayList<Proxy>(); + + try { + String proxiesString = browserProxyAutoConfig.getProxies(uri.toURL()); + proxies.addAll(getProxiesFromPacResult(proxiesString)); + } catch (MalformedURLException e) { + e.printStackTrace(); + proxies.add(Proxy.NO_PROXY); + } + + return proxies; } /** |