olegk       2004/12/20 03:42:30

  Modified:    httpclient/src/java/org/apache/commons/httpclient
                        HttpMethodBase.java
               httpclient/src/test/org/apache/commons/httpclient
                        TestConnectionPersistence.java
  Log:
  PR #32333 (Connection not closed after "Connection: close" request)
  
  Contributed by Oleg Kalnichevski
  Reviewed by Michael Becke
  
  Revision  Changes    Path
  1.221     +13 -8     
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java
  
  Index: HttpMethodBase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v
  retrieving revision 1.220
  retrieving revision 1.221
  diff -u -r1.220 -r1.221
  --- HttpMethodBase.java       9 Nov 2004 19:25:42 -0000       1.220
  +++ HttpMethodBase.java       20 Dec 2004 11:42:30 -0000      1.221
  @@ -903,17 +903,22 @@
           if (connectionHeader == null) {
               connectionHeader = responseHeaders.getFirstHeader("connection");
           }
  +        // In case the response does not contain any explict connection
  +        // directives, check whether the request does
  +        if (connectionHeader == null) {
  +            connectionHeader = requestHeaders.getFirstHeader("connection");
  +        }
           if (connectionHeader != null) {
               if (connectionHeader.getValue().equalsIgnoreCase("close")) {
                   if (LOG.isDebugEnabled()) {
  -                    LOG.debug("Should close connection in response to " 
  -                        + connectionHeader.toExternalForm());
  +                    LOG.debug("Should close connection in response to 
directive: " 
  +                        + connectionHeader.getValue());
                   }
                   return true;
               } else if 
(connectionHeader.getValue().equalsIgnoreCase("keep-alive")) {
                   if (LOG.isDebugEnabled()) {
  -                    LOG.debug("Should NOT close connection in response to " 
  -                        + connectionHeader.toExternalForm());
  +                    LOG.debug("Should NOT close connection in response to 
directive: " 
  +                        + connectionHeader.getValue());
                   }
                   return false;
               } else {
  
  
  
  1.2       +46 -4     
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestConnectionPersistence.java
  
  Index: TestConnectionPersistence.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestConnectionPersistence.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestConnectionPersistence.java    7 Nov 2004 12:31:42 -0000       1.1
  +++ TestConnectionPersistence.java    20 Dec 2004 11:42:30 -0000      1.2
  @@ -31,6 +31,10 @@
   
   import org.apache.commons.httpclient.methods.PostMethod;
   import org.apache.commons.httpclient.methods.StringRequestEntity;
  +import org.apache.commons.httpclient.server.HttpRequestHandler;
  +import org.apache.commons.httpclient.server.SimpleHttpServerConnection;
  +import org.apache.commons.httpclient.server.SimpleRequest;
  +import org.apache.commons.httpclient.server.SimpleResponse;
   
   import junit.framework.Test;
   import junit.framework.TestSuite;
  @@ -171,6 +175,44 @@
               httppost.releaseConnection();
           }
           assertTrue(connman.getConection().isOpen());
  +    }
  +
  +    public void testRequestConnClose() throws Exception {
  +        this.server.setRequestHandler(new HttpRequestHandler() {
  +           
  +            public boolean processRequest(
  +                    final SimpleHttpServerConnection conn,
  +                    final SimpleRequest request) throws IOException {
  +
  +                // Make sure the request if fully consumed
  +                request.getBodyBytes();
  +                
  +                SimpleResponse response = new SimpleResponse();
  +                response.setStatusLine(HttpVersion.HTTP_1_1, 
HttpStatus.SC_OK);
  +                response.setBodyString("stuff back");
  +
  +                conn.setKeepAlive(true);
  +                conn.writeResponse(response);
  +                
  +                return true;
  +            }
  +            
  +        });
  +
  +        AccessibleHttpConnectionManager connman = new 
AccessibleHttpConnectionManager();
  +        
  +        this.client.getParams().setVersion(HttpVersion.HTTP_1_0);
  +        this.client.setHttpConnectionManager(connman);
  +        
  +        PostMethod httppost = new PostMethod("/test/");
  +        httppost.setRequestHeader("Connection", "close");
  +        httppost.setRequestEntity(new StringRequestEntity("stuff"));
  +        try {
  +            this.client.executeMethod(httppost);
  +        } finally {
  +            httppost.releaseConnection();
  +        }
  +        assertFalse(connman.getConection().isOpen());
       }
   
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to