diff options
-rw-r--r-- | libjava/ChangeLog | 6 | ||||
-rw-r--r-- | libjava/java/net/HttpURLConnection.java | 55 |
2 files changed, 56 insertions, 5 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index a5b63e5..dd3f6eb 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,5 +1,11 @@ 2002-11-17 Mark Wielaard <mark@klomp.org> + * java/net/HttpURLConnection.java ((getPermission): Take port + into consideration. + (getErrorStream): Implement. + +2002-11-17 Mark Wielaard <mark@klomp.org> + * java/net/HttpURLConnection.java: Merge with GNU Classpath. 2002-11-16 Mark Wielaard <mark@klomp.org> diff --git a/libjava/java/net/HttpURLConnection.java b/libjava/java/net/HttpURLConnection.java index 85a3ea4..e914b19 100644 --- a/libjava/java/net/HttpURLConnection.java +++ b/libjava/java/net/HttpURLConnection.java @@ -495,17 +495,62 @@ public abstract class HttpURLConnection extends URLConnection */ public Permission getPermission() throws IOException { - return new SocketPermission (url.getHost (), "connect"); + URL url = getURL(); + String host = url.getHost(); + int port = url.getPort(); + if (port == -1) + port = 80; + + host = host + ":" + port; + + return new SocketPermission(host, "connect"); } /** - * Returns the error stream if the connection failed but the server sent - * useful data nonetheless + * This method allows the caller to retrieve any data that might have + * been sent despite the fact that an error occurred. For example, the + * HTML page sent along with a 404 File Not Found error. If the socket + * is not connected, or if no error occurred or no data was returned, + * this method returns <code>null</code>. + * + * @return An <code>InputStream</code> for reading error data. */ public InputStream getErrorStream () { - // FIXME: implement this - return null; + if (!connected) + return(null); + + int code; + try + { + code = getResponseCode(); + } + catch(IOException e) + { + code = -1; + } + + if (code == -1) + return(null); + + if (((code/100) != 4) || ((code/100) != 5)) + return(null); + + try + { + PushbackInputStream pbis = new PushbackInputStream(getInputStream()); + + int i = pbis.read(); + if (i == -1) + return(null); + + pbis.unread(i); + return(pbis); + } + catch(IOException e) + { + return(null); + } } /** |