Finished up the proxy jockeying. Now we peek into the registry to see if
they've already got a proxy configuration. Oh how we love to go native.
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
-ClassPath:
|
-ClassPath:
|
||||||
/usr/local/jdk1.4/jre/lib/rt.jar
|
/usr/local/jdk1.4/jre/lib/rt.jar
|
||||||
dist/classes
|
dist/classes
|
||||||
|
lib/jRegistryKey.jar
|
||||||
../../projects/samskivert/dist/samskivert.jar
|
../../projects/samskivert/dist/samskivert.jar
|
||||||
../../lib/commons-io.jar
|
../../lib/commons-io.jar
|
||||||
../../lib/javaws.jar
|
../../lib/javaws.jar
|
||||||
@@ -37,6 +38,14 @@ com.sun.*
|
|||||||
|
|
||||||
-ExcludeMethods:
|
-ExcludeMethods:
|
||||||
|
|
||||||
|
-IncludeClassesUnconditional:
|
||||||
|
ca.beq.util.win32.registry.RegistryException
|
||||||
|
ca.beq.util.win32.registry.RegistryKey
|
||||||
|
ca.beq.util.win32.registry.RegistryValue
|
||||||
|
ca.beq.util.win32.registry.RootKey
|
||||||
|
ca.beq.util.win32.registry.ValueIterator
|
||||||
|
ca.beq.util.win32.registry.ValueType
|
||||||
|
|
||||||
-General:
|
-General:
|
||||||
nomakepublic
|
nomakepublic
|
||||||
fornamedetection
|
fornamedetection
|
||||||
|
|||||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: Getdown.java,v 1.28 2004/07/30 21:45:28 mdb Exp $
|
// $Id: Getdown.java,v 1.29 2004/07/30 22:37:15 mdb Exp $
|
||||||
|
|
||||||
package com.threerings.getdown.launcher;
|
package com.threerings.getdown.launcher;
|
||||||
|
|
||||||
@@ -27,10 +27,13 @@ import java.net.URL;
|
|||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
// import org.apache.commons.io.TeeOutputStream;
|
import ca.beq.util.win32.registry.RegistryKey;
|
||||||
|
import ca.beq.util.win32.registry.RegistryValue;
|
||||||
|
import ca.beq.util.win32.registry.RootKey;
|
||||||
|
|
||||||
import com.samskivert.swing.util.SwingUtil;
|
import com.samskivert.swing.util.SwingUtil;
|
||||||
import com.samskivert.text.MessageUtil;
|
import com.samskivert.text.MessageUtil;
|
||||||
@@ -42,7 +45,6 @@ import com.threerings.getdown.data.Resource;
|
|||||||
import com.threerings.getdown.tools.Patcher;
|
import com.threerings.getdown.tools.Patcher;
|
||||||
import com.threerings.getdown.util.ConfigUtil;
|
import com.threerings.getdown.util.ConfigUtil;
|
||||||
import com.threerings.getdown.util.ProgressObserver;
|
import com.threerings.getdown.util.ProgressObserver;
|
||||||
import com.threerings.getdown.util.ProxyUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages the main control for the Getdown application updater and
|
* Manages the main control for the Getdown application updater and
|
||||||
@@ -142,10 +144,7 @@ public class Getdown extends Thread
|
|||||||
}
|
}
|
||||||
|
|
||||||
// also configure them in the JVM
|
// also configure them in the JVM
|
||||||
System.setProperty("http.proxyHost", host);
|
setProxyProperties(host, port);
|
||||||
if (!StringUtil.blank(port)) {
|
|
||||||
System.setProperty("http.proxyPort", port);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear out our UI
|
// clear out our UI
|
||||||
@@ -170,25 +169,48 @@ public class Getdown extends Thread
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: look in the Vinders registry
|
// look in the Vinders registry
|
||||||
|
try {
|
||||||
|
String host = null, port = null;
|
||||||
|
boolean enabled = false;
|
||||||
|
RegistryKey.initialize();
|
||||||
|
RegistryKey r = new RegistryKey(
|
||||||
|
RootKey.HKEY_CURRENT_USER, PROXY_REGISTRY);
|
||||||
|
for (Iterator iter = r.values(); iter.hasNext(); ) {
|
||||||
|
RegistryValue value = (RegistryValue)iter.next();
|
||||||
|
if (value.getName().equals("ProxyEnable")) {
|
||||||
|
enabled = value.getStringValue().equals("1");
|
||||||
|
}
|
||||||
|
if (value.getName().equals("ProxyServer")) {
|
||||||
|
String strval = value.getStringValue();
|
||||||
|
int cidx = strval.indexOf(":");
|
||||||
|
if (cidx != -1) {
|
||||||
|
port = strval.substring(cidx+1);
|
||||||
|
strval = strval.substring(0, cidx);
|
||||||
|
}
|
||||||
|
host = strval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
setProxyProperties(host, port);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
Log.info("Detected no proxy settings in the registry.");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Throwable t) {
|
||||||
|
Log.info("Failed to find proxy settings in Windows registry " +
|
||||||
|
"[error=" + t + "].");
|
||||||
|
}
|
||||||
|
|
||||||
// otherwise look for and read our proxy.txt file
|
// otherwise look for and read our proxy.txt file
|
||||||
File pfile = _app.getLocalPath("proxy.txt");
|
File pfile = _app.getLocalPath("proxy.txt");
|
||||||
if (pfile.exists()) {
|
if (pfile.exists()) {
|
||||||
try {
|
try {
|
||||||
HashMap pconf = ConfigUtil.parseConfig(pfile, false);
|
HashMap pconf = ConfigUtil.parseConfig(pfile, false);
|
||||||
String proxyHost = (String)pconf.get("host");
|
setProxyProperties((String)pconf.get("host"),
|
||||||
String proxyPort = (String)pconf.get("port");
|
(String)pconf.get("port"));
|
||||||
if (!StringUtil.blank(proxyHost)) {
|
|
||||||
System.setProperty("http.proxyHost", proxyHost);
|
|
||||||
if (!StringUtil.blank(proxyPort)) {
|
|
||||||
System.setProperty("http.proxyPort", proxyPort);
|
|
||||||
}
|
|
||||||
Log.info("Using proxy [host=" + proxyHost +
|
|
||||||
", port=" + proxyPort + "].");
|
|
||||||
}
|
|
||||||
|
|
||||||
// now we can get on with getting down
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
@@ -196,10 +218,10 @@ public class Getdown extends Thread
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise we'll need to try to detect our proxy settings; first
|
// otherwise see if we actually need a proxy; first we have to
|
||||||
// we have to initialize our application to get some sort of
|
// initialize our application to get some sort of interface
|
||||||
// interface configuration and the appbase URL
|
// configuration and the appbase URL
|
||||||
Log.info("Attempting to detect proxy settings...");
|
Log.info("Checking whether we need to use a proxy...");
|
||||||
try {
|
try {
|
||||||
_ifc = _app.init(true);
|
_ifc = _app.init(true);
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
@@ -242,6 +264,20 @@ public class Getdown extends Thread
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures the JVM proxy system properties.
|
||||||
|
*/
|
||||||
|
protected void setProxyProperties (String host, String port)
|
||||||
|
{
|
||||||
|
if (!StringUtil.blank(host)) {
|
||||||
|
System.setProperty("http.proxyHost", host);
|
||||||
|
if (!StringUtil.blank(port)) {
|
||||||
|
System.setProperty("http.proxyPort", port);
|
||||||
|
}
|
||||||
|
Log.info("Using proxy [host=" + host + ", port=" + port + "].");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the actual application validation, update and launching
|
* Does the actual application validation, update and launching
|
||||||
* business.
|
* business.
|
||||||
@@ -598,4 +634,6 @@ public class Getdown extends Thread
|
|||||||
|
|
||||||
protected static final int MAX_LOOPS = 5;
|
protected static final int MAX_LOOPS = 5;
|
||||||
protected static final long MIN_EXIST_TIME = 5000L;
|
protected static final long MIN_EXIST_TIME = 5000L;
|
||||||
|
protected static final String PROXY_REGISTRY =
|
||||||
|
"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,129 +0,0 @@
|
|||||||
//
|
|
||||||
// $Id: ProxyUtil.java,v 1.2 2004/07/29 18:46:57 mdb Exp $
|
|
||||||
|
|
||||||
package com.threerings.getdown.util;
|
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
import com.threerings.getdown.Log;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Code to detect a user's proxy settings.
|
|
||||||
*/
|
|
||||||
public class ProxyUtil
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Detects whether or not there are proxy settings that should be used
|
|
||||||
* by this JVM.
|
|
||||||
*
|
|
||||||
* @return true if there are such settings, false if not.
|
|
||||||
*/
|
|
||||||
public static boolean detectProxy (URL sampleURL)
|
|
||||||
{
|
|
||||||
// first look for a proxy that's already set
|
|
||||||
if ((_proxyIP = System.getProperty("proxyHost")) != null) {
|
|
||||||
_proxyPort = System.getProperty("proxyPort");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if ((_proxyIP = System.getProperty("http.proxyHost")) != null) {
|
|
||||||
_proxyPort = System.getProperty("http.proxyPort");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Look around for the 1.4.X plugin proxy detection
|
|
||||||
// class... Without it, cannot autodetect...
|
|
||||||
Class t = Class.forName("com.sun.java.browser.net.ProxyService");
|
|
||||||
com.sun.java.browser.net.ProxyInfo[] pi =
|
|
||||||
com.sun.java.browser.net.ProxyService.getProxyInfo(sampleURL);
|
|
||||||
if (pi == null || pi.length == 0) {
|
|
||||||
Log.info("1.4.X reported NULL proxy (no proxy assumed).");
|
|
||||||
return false;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
Log.info("1.4.X Proxy info getProxy: " + pi[0].getHost() +
|
|
||||||
" getPort: " + pi[0].getPort() +
|
|
||||||
" isSocks: " + pi[0].isSocks());
|
|
||||||
_proxyIP = pi[0].getHost();
|
|
||||||
_proxyPort = "" + pi[0].getPort();
|
|
||||||
Log.info("Detected proxy " + _proxyIP + " port " + _proxyPort);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception ee) {
|
|
||||||
Log.info("Sun Plugin 1.4.X proxy detection class not " +
|
|
||||||
"found: " + ee + ". Trying failover detection...");
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
String key = "javaplugin.proxy.config.list";
|
|
||||||
String proxyList = (String)
|
|
||||||
System.getProperties().getProperty(key);
|
|
||||||
proxyList = proxyList.toUpperCase();
|
|
||||||
Log.info("Plugin proxy config list: " + proxyList);
|
|
||||||
|
|
||||||
// Using HTTP proxy as proxy for HTTP proxy tunnelled SSL
|
|
||||||
// socket (should be listed FIRST)....
|
|
||||||
if (proxyList != null) {
|
|
||||||
// 6.0.0 1/14/03 1.3.1_06 appears to omit HTTP portion of
|
|
||||||
// 6.0.reported proxy list... Mod to accomodate this...
|
|
||||||
|
|
||||||
// Expecting proxyList of "HTTP=XXX.XXX.XXX.XXX:Port"
|
|
||||||
// OR "XXX.XXX.XXX.XXX:Port" & assuming HTTP...
|
|
||||||
if (proxyList.indexOf("HTTP=") > -1) {
|
|
||||||
_proxyIP = proxyList.substring(
|
|
||||||
proxyList.indexOf("HTTP=") + 5,
|
|
||||||
proxyList.indexOf(":"));
|
|
||||||
} else {
|
|
||||||
_proxyIP = proxyList.substring(
|
|
||||||
0, proxyList.indexOf(":"));
|
|
||||||
}
|
|
||||||
int endOfPort = proxyList.indexOf(",");
|
|
||||||
if (endOfPort < 1) {
|
|
||||||
endOfPort = proxyList.length();
|
|
||||||
}
|
|
||||||
_proxyPort = proxyList.substring(proxyList.indexOf(":") + 1,
|
|
||||||
endOfPort);
|
|
||||||
Log.info("Detected proxy " + _proxyIP + " port " + _proxyPort);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.warning("Exception during failover auto proxy detect: " + e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the IP of the detected proxy. This is only valid after a
|
|
||||||
* call to {@link #detectProxy} that returns true.
|
|
||||||
*/
|
|
||||||
public static String getProxyIP ()
|
|
||||||
{
|
|
||||||
return _proxyIP;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the port of the detected proxy. This is only valid after a
|
|
||||||
* call to {@link #detectProxy} that returns true.
|
|
||||||
*/
|
|
||||||
public static String getProxyPort ()
|
|
||||||
{
|
|
||||||
return _proxyPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the necessary system properties to enact the use of this proxy
|
|
||||||
* host and port.
|
|
||||||
*/
|
|
||||||
public static void configureProxy (String host, String port)
|
|
||||||
{
|
|
||||||
System.setProperty("http.proxyHost", host);
|
|
||||||
System.setProperty("http.proxyPort", port);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static String _proxyIP;
|
|
||||||
protected static String _proxyPort = "80";
|
|
||||||
protected static boolean _useProxy = false;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user