billbarker    2003/07/05 23:23:40

  Modified:    http11/src/java/org/apache/coyote/http11 Tag: coyote_10
                        Http11Processor.java
  Log:
  Port Patch for closing connections on bad requests.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.55.2.2  +26 -0     
jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java
  
  Index: Http11Processor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/http11/src/java/org/apache/coyote/http11/Http11Processor.java,v
  retrieving revision 1.55.2.1
  retrieving revision 1.55.2.2
  diff -u -r1.55.2.1 -r1.55.2.2
  --- Http11Processor.java      13 May 2003 22:47:00 -0000      1.55.2.1
  +++ Http11Processor.java      6 Jul 2003 06:23:40 -0000       1.55.2.2
  @@ -599,6 +599,15 @@
               if (!error) {
                   try {
                       adapter.service(request, response);
  +                    // Handle when the response was committed before a serious
  +                    // error occurred.  Throwing a ServletException should both
  +                    // set the status to 500 and set the errorException.
  +                    // If we fail here, then the response is likely already 
  +                    // committed, so we can't try and set headers.
  +                    if(keepAlive && !error) { // Avoid checking twice.
  +                        error = response.getErrorException() != null ||
  +                                statusDropsConnection(response.getStatus());
  +                    }
                   } catch (InterruptedIOException e) {
                       error = true;
                   } catch (Throwable t) {
  @@ -1204,6 +1213,9 @@
               keepAlive = false;
           }
   
  +        // If we know that the request is bad this early, add the
  +        // Connection: close header.
  +        keepAlive = keepAlive && statusDropsConnection(statusCode);
           if (!keepAlive) {
               response.addHeader("Connection", "close");
           } else if (!http11) {
  @@ -1302,5 +1314,19 @@
   
       }
   
  +    /**
  +     * Determine if we must drop the connection because of the HTTP status
  +     * code.  Use the same list of codes as Apache/httpd.
  +     */
  +    protected boolean statusDropsConnection(int status) {
  +        return status == 400 /* SC_BAD_REQUEST */ ||
  +               status == 408 /* SC_REQUEST_TIMEOUT */ ||
  +               status == 411 /* SC_LENGTH_REQUIRED */ ||
  +               status == 413 /* SC_REQUEST_ENTITY_TOO_LARGE */ ||
  +               status == 414 /* SC_REQUEST_URI_TOO_LARGE */ ||
  +               status == 500 /* SC_INTERNAL_SERVER_ERROR */ ||
  +               status == 503 /* SC_SERVICE_UNAVAILABLE */ ||
  +               status == 501 /* SC_NOT_IMPLEMENTED */;
  +    }
   
   }
  
  
  

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

Reply via email to