2003-12-27 Michael Koch <konqueror@gmx.de>

* gnu/java/net/protocol/http/Connection.java
	(connect): Call receiveReply().
	(receiveReply): Renamed from getHttpHeaders().
	(getOutputStream): Moved check on doOutput before check for connection
	state.

From-SVN: r75172
This commit is contained in:
Michael Koch 2003-12-27 17:24:51 +00:00 committed by Michael Koch
parent 5bd1d00e5c
commit 82ebe78b9e
2 changed files with 77 additions and 60 deletions

View file

@ -172,7 +172,8 @@ public final class Connection extends HttpURLConnection
inputStream = new BufferedInputStream(socket.getInputStream());
sendRequest();
getHttpHeaders();
receiveReply();
connected = true;
}
@ -225,6 +226,62 @@ public final class Connection extends HttpURLConnection
outputWriter.flush();
}
/**
* Read HTTP reply from inputStream.
*/
private void receiveReply() throws IOException
{
int buflen = 100;
byte[] buf = new byte[buflen];
String line = "";
boolean gotnl = false;
byte[] ch = new byte[1];
ch[0] = (byte) '\n';
while (true)
{
// Check for leftover byte from non-'\n' after a '\r'.
if (ch[0] != '\n')
line = line + '\r' + new String(ch, 0, 1);
int i;
// FIXME: This is rather inefficient.
for (i = 0; i < buflen; i++)
{
buf[i] = (byte) inputStream.read();
if (buf[i] == -1)
throw new IOException("Malformed HTTP header");
if (buf[i] == '\r')
{
inputStream.read(ch, 0, 1);
if (ch[0] == '\n')
gotnl = true;
break;
}
}
line = line + new String(buf, 0, i);
// A '\r' '\n' combo indicates the end of the header entry.
// If it wasn't found, cycle back through the loop and append
// to 'line' until one is found.
if (gotnl)
{
// A zero length entry signals the end of the headers.
if (line.length() == 0)
break;
// Store the header and reinitialize for next cycle.
hdrVec.addElement(line);
String key = getKey(line);
if (key != null)
hdrHash.put(key.toLowerCase(), getField(line));
line = "";
ch[0] = (byte) '\n';
gotnl = false;
}
}
}
/**
* Return a boolean indicating whether or not this connection is
* going through a proxy
@ -256,13 +313,21 @@ public final class Connection extends HttpURLConnection
return inputStream;
}
/**
* Returns on OutputStream for writing to this connection.
*
* @return An OutputStream for this connection.
*
* @exception IOException If an error occurs
*/
public OutputStream getOutputStream() throws IOException
{
if (!doOutput)
throw new ProtocolException
("Want output stream while haven't setDoOutput(true)");
if (!connected)
connect();
if (! doOutput)
throw new ProtocolException("Can't open OutputStream if doOutput is false");
return socket.getOutputStream();
}
@ -389,60 +454,4 @@ public final class Connection extends HttpURLConnection
else
return str;
}
/**
* Read HTTP reply from inputStream.
*/
private void getHttpHeaders() throws IOException
{
int buflen = 100;
byte[] buf = new byte[buflen];
String line = "";
boolean gotnl = false;
byte[] ch = new byte[1];
ch[0] = (byte) '\n';
while (true)
{
// Check for leftover byte from non-'\n' after a '\r'.
if (ch[0] != '\n')
line = line + '\r' + new String(ch, 0, 1);
int i;
// FIXME: This is rather inefficient.
for (i = 0; i < buflen; i++)
{
buf[i] = (byte) inputStream.read();
if (buf[i] == -1)
throw new IOException("Malformed HTTP header");
if (buf[i] == '\r')
{
inputStream.read(ch, 0, 1);
if (ch[0] == '\n')
gotnl = true;
break;
}
}
line = line + new String(buf, 0, i);
// A '\r' '\n' combo indicates the end of the header entry.
// If it wasn't found, cycle back through the loop and append
// to 'line' until one is found.
if (gotnl)
{
// A zero length entry signals the end of the headers.
if (line.length() == 0)
break;
// Store the header and reinitialize for next cycle.
hdrVec.addElement(line);
String key = getKey(line);
if (key != null)
hdrHash.put(key.toLowerCase(), getField(line));
line = "";
ch[0] = (byte) '\n';
gotnl = false;
}
}
}
}