Merged gcj-eclipse branch to trunk.

From-SVN: r120621
This commit is contained in:
Tom Tromey
2007-01-09 19:58:05 +00:00
parent c648dedbde
commit 97b8365caf
17478 changed files with 606493 additions and 100744 deletions
@@ -48,6 +48,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -227,10 +228,16 @@ public class HTTPConnection
* @param secure whether to use a secure connection
* @param connectionTimeout the connection timeout
* @param timeout the socket read timeout
*
* @throws IllegalArgumentException if either connectionTimeout or
* timeout less than zero.
*/
public HTTPConnection(String hostname, int port, boolean secure,
int connectionTimeout, int timeout)
{
if (connectionTimeout < 0 || timeout < 0)
throw new IllegalArgumentException();
this.hostname = hostname;
this.port = port;
this.secure = secure;
@@ -471,14 +478,32 @@ public class HTTPConnection
{
String ttl =
SystemProperties.getProperty("classpath.net.http.keepAliveTTL");
connectionTTL = (ttl != null && ttl.length() > 0) ?
1000 * Math.max(1, Integer.parseInt(ttl)) : 10000;
connectionTTL = 10000;
if (ttl != null && ttl.length() > 0)
try
{
int v = 1000 * Integer.parseInt(ttl);
if (v >= 0)
connectionTTL = v;
}
catch (NumberFormatException _)
{
// Ignore.
}
String mc = SystemProperties.getProperty("http.maxConnections");
maxConnections = (mc != null && mc.length() > 0) ?
Math.max(Integer.parseInt(mc), 1) : 5;
if (maxConnections < 1)
maxConnections = 1;
maxConnections = 5;
if (mc != null && mc.length() > 0)
try
{
int v = Integer.parseInt(mc);
if (v > 0)
maxConnections = v;
}
catch (NumberFormatException _)
{
// Ignore.
}
HTTPConnection c = null;
@@ -490,12 +515,23 @@ public class HTTPConnection
{
c = cc;
it.remove();
// Update the timeout.
if (c.socket != null)
try
{
c.socket.setSoTimeout(timeout);
}
catch (SocketException _)
{
// Ignore.
}
break;
}
}
if (c == null)
{
c = new HTTPConnection(host, port, secure, connectionTimeout, timeout);
c = new HTTPConnection(host, port, secure,
connectionTimeout, timeout);
c.setPool(this);
}
return c;
@@ -75,7 +75,7 @@ public class HTTPURLConnection
// These are package private for use in anonymous inner classes.
String proxyHostname;
int proxyPort;
int proxyPort = -1;
String agent;
boolean keepAlive;
@@ -99,18 +99,21 @@ public class HTTPURLConnection
{
super(url);
requestHeaders = new Headers();
proxyHostname = SystemProperties.getProperty("http.proxyHost");
if (proxyHostname != null && proxyHostname.length() > 0)
String proxy = SystemProperties.getProperty("http.proxyHost");
if (proxy != null && proxy.length() > 0)
{
String port = SystemProperties.getProperty("http.proxyPort");
if (port != null && port.length() > 0)
{
proxyPort = Integer.parseInt(port);
}
else
{
proxyHostname = null;
proxyPort = -1;
try
{
proxyPort = Integer.parseInt(port);
proxyHostname = proxy;
}
catch (NumberFormatException _)
{
// Ignore.
}
}
}
agent = SystemProperties.getProperty("http.agent");
@@ -354,11 +357,14 @@ public class HTTPURLConnection
HTTPConnection connection;
if (keepAlive)
{
connection = HTTPConnection.Pool.instance.get(host, port, secure, getConnectTimeout(), 0);
connection = HTTPConnection.Pool.instance.get(host, port, secure,
getConnectTimeout(),
getReadTimeout());
}
else
{
connection = new HTTPConnection(host, port, secure, 0, getConnectTimeout());
connection = new HTTPConnection(host, port, secure,
getConnectTimeout(), getReadTimeout());
}
return connection;
}
@@ -662,23 +668,23 @@ public class HTTPURLConnection
}
/**
* Set the connection timeout speed, in milliseconds, or zero if the timeout
* Set the read timeout, in milliseconds, or zero if the timeout
* is to be considered infinite.
*
* Overloaded.
*
*/
public void setConnectTimeout(int timeout)
public void setReadTimeout(int timeout)
throws IllegalArgumentException
{
super.setConnectTimeout( timeout );
if( connection == null )
super.setReadTimeout(timeout);
if (connection == null)
return;
try
{
connection.getSocket().setSoTimeout( timeout );
connection.getSocket().setSoTimeout(timeout);
}
catch(IOException se)
catch (IOException se)
{
// Ignore socket exceptions.
}
@@ -1,5 +1,5 @@
/* gnu.java.net.protocol.jar.Handler - jar protocol handler for java.net
Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
Copyright (C) 1999, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,6 +45,9 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;
/**
* @author Kresten Krab Thorup (krab@gnu.org)
@@ -114,7 +117,7 @@ public class Handler extends URLStreamHandler
file = file.substring(0, idx + 1) + url_string;
}
setURL (url, "jar", url.getHost(), url.getPort(), file, null);
setURL (url, "jar", url.getHost(), url.getPort(), flat(file), null);
return;
}
@@ -148,6 +151,45 @@ public class Handler extends URLStreamHandler
setURL (url, "jar", url.getHost(), url.getPort(), url_string, null);
}
/**
* Makes the given jar url string 'flat' by removing any . and .. from
* jar file path because ZipFile entries can only handle flat paths.
* Inside jar files '/' is always the path separator.
*/
private static String flat(String url_string)
{
int jar_stop = url_string.indexOf("!/");
String jar_path = url_string.substring(jar_stop + 1, url_string.length());
if (jar_path.indexOf("/.") < 0)
return url_string;
ArrayList tokens = new ArrayList();
StringTokenizer st = new StringTokenizer(jar_path, "/");
while (st.hasMoreTokens())
{
String token = st.nextToken();
if (token.equals("."))
continue;
else if (token.equals(".."))
{
if (! tokens.isEmpty())
tokens.remove(tokens.size() - 1);
}
else
tokens.add(token);
}
StringBuffer path = new StringBuffer(url_string.length());
path.append(url_string.substring(0, jar_stop + 1));
Iterator it = tokens.iterator();
while (it.hasNext())
path.append('/').append(it.next());
return path.toString();
}
/**
* This method converts a Jar URL object into a String.
*