aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java
diff options
context:
space:
mode:
authorOmair Majid <[email protected]>2011-03-07 11:10:42 -0500
committerOmair Majid <[email protected]>2011-03-07 11:10:42 -0500
commit6ee70462f3655208b658ab057e05c0f42d2b0afb (patch)
tree1a8fe5d5fd4d12968db3af28f88e1b75f43f4370 /netx/net/sourceforge/jnlp/browser/BrowserAwareProxySelector.java
parent9bc8e7fc91fa792f30093e8a24396d4aa5b9a9b5 (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.java27
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;
}
/**