Merged gcj-eclipse branch to trunk.
From-SVN: r120621
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user