- From: Anselm Baird_Smith <abaird@www43.inria.fr>
- Date: Tue, 22 Oct 1996 10:33:17 +0200 (MET DST)
- To: www-jigsaw@w3.org
The enclosed patch fixes two bugs:
a) HTTP/0.9 PUT should now work,
b) HTTP/1.1 "Connection: close" is now implemented properly.
This patch also fixes the problem with keepAlive set to false.
Anselm.
===================================================================
RCS file: /afs/w3.org/CVS-Repository/WWW/Jigsaw/src/classes/w3c/jigsaw/http/Request.java,v
retrieving revision 1.15
diff -u -r1.15 Request.java
--- Request.java 1996/09/13 19:54:48 1.15
+++ Request.java 1996/10/22 08:25:51
@@ -36,8 +36,10 @@
}
}
- protected Client client = null ;
- protected MimeParser parser = null;
+ protected Client client = null;
+ protected MimeParser parser = null;
+ protected InputStream in = null;
+ protected boolean keepcon = true;
boolean is_proxy = false;
/**
@@ -84,11 +86,11 @@
public boolean canKeepConnection() {
// HTTP/0.9 doesn't know about keeping connections alive:
- if (major < 1)
+ if (( ! keepcon) || (major < 1))
return false;
- if ( minor >= 1 )
+ if ( minor >= 1 )
// HTTP/1.1 keeps connections alive by default
- return true;
+ return hasConnection("close") ? false : true;
// For HTTP/1.0 check the [proxy] connection header:
if ( is_proxy )
return hasProxyConnection("keep-alive");
@@ -219,23 +221,28 @@
public InputStream getInputStream()
throws IOException
{
+ if ( in != null )
+ return in;
// Find out which method is used to the length:
int len = getContentLength();
if ( len >= 0 ) {
- return new ContentLengthInputStream(parser.getInputStream(), len);
- }
- // No content length, try out chunked encoding:
- String te[] = getTransferEncoding() ;
- if ( te != null ) {
- for (int i = 0 ; i < te.length ; i++) {
- if (te[i].equals("chunked"))
- return new ChunkedInputStream(parser.getInputStream());
+ in = new ContentLengthInputStream(parser.getInputStream(), len);
+ } else {
+ // No content length, try out chunked encoding:
+ String te[] = getTransferEncoding() ;
+ if ( te != null ) {
+ for (int i = 0 ; i < te.length ; i++) {
+ if (te[i].equals("chunked"))
+ in = new ChunkedInputStream(parser.getInputStream());
+ }
}
}
// Everything has failed, we assume the connection will close:
- // FIXME CLOSE THE CONNECTION !
- // return parser.getInputStream();
- return null;
+ if ( in == null ) {
+ keepcon = false;
+ in = parser.getInputStream();
+ }
+ return in;
}
/**
Received on Tuesday, 22 October 1996 04:33:21 UTC