diff options
author | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-08-10 10:10:25 +0100 |
---|---|---|
committer | Bryce McKinlay <bryce@gcc.gnu.org> | 2000-08-10 10:10:25 +0100 |
commit | b6ac804e3d3e38f8c9b9974b0e17ce70673209e8 (patch) | |
tree | c83f347809df3815635d9eb31211347f39ca2f5a /libjava/gnu | |
parent | 9052d3bebc0b9420a5f9cd8907f5b5c405e7cf7d (diff) | |
download | gcc-b6ac804e3d3e38f8c9b9974b0e17ce70673209e8.zip gcc-b6ac804e3d3e38f8c9b9974b0e17ce70673209e8.tar.gz gcc-b6ac804e3d3e38f8c9b9974b0e17ce70673209e8.tar.bz2 |
Connection.java (gotHeaders): Removed.
2000-08-10 Bryce McKinlay <bryce@albatross.co.nz>
John Stracke <francis@ecal.com>
* gnu/gcj/protocol/http/Connection.java (gotHeaders): Removed.
(connect): Don't falsely claim HTTP/1.1 compliance. Call
getHttpHeaders().
(disconnect): Don't unset connected flag.
(getHeaderField (String)): Call connect() if not connected.
(getHeaderField (int)): Ditto.
(getHeaderFieldKey): Ditto.
(getHttpHeaders): Don't call connect().
* java/net/HttpURLConnection.java (instanceFollowRedirects,
gotResponseVals): New fields.
(getResponseCode): Call getResponseVals() conditionally.
(getResponseMessage): Ditto.
(getResponseVals): Call connect(). Don't throw
FileNotFoundException.
From-SVN: r35603
Diffstat (limited to 'libjava/gnu')
-rw-r--r-- | libjava/gnu/gcj/protocol/http/Connection.java | 84 |
1 files changed, 41 insertions, 43 deletions
diff --git a/libjava/gnu/gcj/protocol/http/Connection.java b/libjava/gnu/gcj/protocol/http/Connection.java index ba5903d..5ff1c32 100644 --- a/libjava/gnu/gcj/protocol/http/Connection.java +++ b/libjava/gnu/gcj/protocol/http/Connection.java @@ -1,6 +1,6 @@ // Connection.java - Implementation of HttpURLConnection for http protocol. -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999, 2000 Free Software Foundation This file is part of libgcj. @@ -37,7 +37,6 @@ class Connection extends HttpURLConnection private Hashtable requestProperties; private Hashtable hdrHash = new Hashtable(); private Vector hdrVec = new Vector(); - private boolean gotHeaders = false; private BufferedInputStream bufferedIn; public Connection(URL url) @@ -94,14 +93,15 @@ class Connection extends HttpURLConnection PrintWriter out = new PrintWriter(sock.getOutputStream()); // Send request including any request properties that were set. - out.print(getRequestMethod() + " " + url.getFile() + " HTTP/1.1\n"); + out.print(getRequestMethod() + " " + url.getFile() + " HTTP/1.0\n"); out.print("Host: " + url.getHost() + ":" + port + "\n"); Enumeration reqKeys = requestProperties.keys(); Enumeration reqVals = requestProperties.elements(); while (reqKeys.hasMoreElements()) out.print(reqKeys.nextElement() + ": " + reqVals.nextElement() + "\n"); out.print("\n"); - out.flush(); + out.flush(); + getHttpHeaders(); connected = true; } @@ -120,7 +120,6 @@ class Connection extends HttpURLConnection } sock = null; } - connected = false; } // TODO: public boolean usingProxy() @@ -135,10 +134,8 @@ class Connection extends HttpURLConnection if (!connected) connect(); - if (! doInput) + if (!doInput) throw new ProtocolException("Can't open InputStream if doInput is false"); - if (bufferedIn == null) - bufferedIn = new BufferedInputStream(sock.getInputStream()); return bufferedIn; } @@ -157,48 +154,52 @@ class Connection extends HttpURLConnection // Override default method in URLConnection. public String getHeaderField(String name) { - try - { - getHttpHeaders(); - } - catch (IOException x) - { - return null; - } + if (!connected) + try + { + connect(); + } + catch (IOException x) + { + return null; + } + return (String) hdrHash.get(name.toLowerCase()); } // Override default method in URLConnection. public String getHeaderField(int n) { - try - { - getHttpHeaders(); - } - catch (IOException x) - { - return null; - } + if (!connected) + try + { + connect(); + } + catch (IOException x) + { + return null; + } + if (n < hdrVec.size()) return getField((String) hdrVec.elementAt(n)); - return null; } // Override default method in URLConnection. public String getHeaderFieldKey(int n) { - try - { - getHttpHeaders(); - } - catch (IOException x) - { - return null; - } + if (!connected) + try + { + connect(); + } + catch (IOException x) + { + return null; + } + if (n < hdrVec.size()) return getKey((String) hdrVec.elementAt(n)); - return null; } @@ -226,20 +227,13 @@ class Connection extends HttpURLConnection private void getHttpHeaders() throws IOException { - if (gotHeaders) - return; - gotHeaders = true; - - connect(); - // Originally tried using a BufferedReader here to take advantage of // the readLine method and avoid the following, but the buffer read // past the end of the headers so the first part of the content was lost. // It is probably more robust than it needs to be, e.g. the byte[] // is unlikely to overflow and a '\r' should always be followed by a '\n', // but it is better to be safe just in case. - if (bufferedIn == null) - bufferedIn = new BufferedInputStream(sock.getInputStream()); + bufferedIn = new BufferedInputStream(sock.getInputStream()); int buflen = 100; byte[] buf = new byte[buflen]; @@ -247,6 +241,7 @@ class Connection extends HttpURLConnection boolean gotnl = false; byte[] ch = new byte[1]; ch[0] = (byte) '\n'; + while (true) { // Check for leftover byte from non-'\n' after a '\r'. @@ -254,9 +249,12 @@ class Connection extends HttpURLConnection line = line + '\r' + new String(ch, 0, 1); int i; + // FIXME: This is rather inefficient. for (i = 0; i < buflen; i++) { - bufferedIn.read(buf, i, 1); + buf[i] = (byte) bufferedIn.read(); + if (buf[i] == -1) + throw new IOException("Malformed HTTP header"); if (buf[i] == '\r') { bufferedIn.read(ch, 0, 1); |