Author: markt
Date: Fri Jul  8 14:04:08 2011
New Revision: 1144317

URL: http://svn.apache.org/viewvc?rev=1144317&view=rev
Log:
Bring the Http11 protocol implementations closer together.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
    tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Fri 
Jul  8 14:04:08 2011
@@ -104,6 +104,12 @@ public abstract class AbstractHttp11Proc
 
 
     /**
+     * Comet used.
+     */
+    protected boolean comet = false;
+
+
+    /**
      * Regular expression that defines the restricted user agents.
      */
     protected Pattern restrictedUserAgents = null;
@@ -1242,6 +1248,9 @@ public abstract class AbstractHttp11Proc
     }
 
 
+    public abstract SocketState event(SocketStatus status) throws IOException;
+
+
     /**
      * Provides a mechanism for those connector implementations (currently only
      * NIO) that need to reset timeouts from Async timeouts to standard HTTP

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Fri Jul  
8 14:04:08 2011
@@ -94,12 +94,6 @@ public class Http11AprProcessor extends 
 
 
     /**
-     * Comet used.
-     */
-    protected boolean comet = false;
-
-
-    /**
      * Socket associated with the current connection.
      */
     protected SocketWrapper<Long> socket = null;
@@ -128,6 +122,7 @@ public class Http11AprProcessor extends 
      *
      * @throws IOException error during an I/O operation
      */
+    @Override
     public SocketState event(SocketStatus status)
         throws IOException {
         

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Fri Jul  
8 14:04:08 2011
@@ -214,8 +214,7 @@ public class Http11AprProtocol extends A
         @Override
         public SocketState process(SocketWrapper<Long> socket,
                 SocketStatus status) {
-            Http11AprProcessor processor =
-                connections.remove(socket.getSocket());
+            Http11AprProcessor processor = 
connections.remove(socket.getSocket());
             
             socket.setAsync(false);
 
@@ -227,6 +226,8 @@ public class Http11AprProtocol extends A
                     processor = createProcessor();
                 }
 
+                initSsl(socket, processor);
+
                 SocketState state = SocketState.CLOSED;
                 do {
                     if (processor.isAsync() || state == SocketState.ASYNC_END) 
{
@@ -266,7 +267,6 @@ public class Http11AprProtocol extends A
                     recycledProcessors.offer(processor);
                 }
                 return state;
-
             } catch (java.net.SocketException e) {
                 // SocketExceptions are normal
                 log.debug(sm.getString(
@@ -292,6 +292,11 @@ public class Http11AprProtocol extends A
             return SocketState.CLOSED;
         }
 
+        private void initSsl(SocketWrapper<Long> socket,
+                Http11AprProcessor processor) {
+            // NOOP for APR
+        }
+
         protected Http11AprProcessor createProcessor() {
             Http11AprProcessor processor = new Http11AprProcessor(
                     proto.getMaxHttpHeaderSize(), (AprEndpoint)proto.endpoint,

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Fri Jul  
8 14:04:08 2011
@@ -96,11 +96,6 @@ public class Http11NioProcessor extends 
     protected NioEndpoint.SendfileData sendfileData = null;
 
     /**
-     * Comet used.
-     */
-    protected boolean comet = false;
-    
-    /**
      * Closed flag, a Comet async thread can 
      * signal for this Nio processor to be closed and recycled instead
      * of waiting for a timeout.
@@ -123,6 +118,7 @@ public class Http11NioProcessor extends 
      *
      * @throws IOException error during an I/O operation
      */
+    @Override
     public SocketState event(SocketStatus status)
         throws IOException {
 

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Fri Jul  
8 14:04:08 2011
@@ -245,16 +245,7 @@ public class Http11NioProtocol extends A
                     processor = createProcessor();
                 }
 
-                if (proto.isSSLEnabled() &&
-                        (proto.sslImplementation != null)
-                        && (socket.getSocket() instanceof SecureNioChannel)) {
-                    SecureNioChannel ch = (SecureNioChannel)socket.getSocket();
-                    processor.setSslSupport(
-                            proto.sslImplementation.getSSLSupport(
-                                    ch.getSslEngine().getSession()));
-                } else {
-                    processor.setSslSupport(null);
-                }
+                initSsl(socket, processor);
 
                 SocketState state = SocketState.CLOSED;
                 do {
@@ -299,7 +290,6 @@ public class Http11NioProtocol extends A
                     release(socket, processor);
                 }
                 return state;
-
             } catch (java.net.SocketException e) {
                 // SocketExceptions are normal
                 log.debug(sm.getString(
@@ -323,6 +313,21 @@ public class Http11NioProtocol extends A
             return SocketState.CLOSED;
         }
 
+        private void initSsl(SocketWrapper<NioChannel> socket,
+                Http11NioProcessor processor) {
+            if (proto.isSSLEnabled() &&
+                    (proto.sslImplementation != null)
+                    && (socket.getSocket() instanceof SecureNioChannel)) {
+                SecureNioChannel ch = (SecureNioChannel)socket.getSocket();
+                processor.setSslSupport(
+                        proto.sslImplementation.getSSLSupport(
+                                ch.getSslEngine().getSession()));
+            } else {
+                processor.setSslSupport(null);
+            }
+
+        }
+
         public Http11NioProcessor createProcessor() {
             Http11NioProcessor processor = new Http11NioProcessor(
                     proto.getMaxHttpHeaderSize(), (NioEndpoint)proto.endpoint,

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Fri Jul  8 
14:04:08 2011
@@ -386,6 +386,13 @@ public class Http11Processor extends Abs
     }
 
 
+    @Override
+    public SocketState event(SocketStatus status) throws IOException {
+        // Should never reach this code but in case we do...
+        throw new IOException(
+                sm.getString("http11processor.comet.notsupported"));
+    }
+
     // ----------------------------------------------------- ActionHook Methods
 
 

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Protocol.java Fri Jul  8 
14:04:08 2011
@@ -136,8 +136,12 @@ public class Http11Protocol extends Abst
         }
 
         @Override
-        public SocketState process(SocketWrapper<Socket> socket, SocketStatus 
status) {
+        public SocketState process(SocketWrapper<Socket> socket,
+                SocketStatus status) {
             Http11Processor processor = connections.remove(socket);
+
+            socket.setAsync(false); //no longer check for timeout
+
             try {
                 if (processor == null) {
                     processor = recycledProcessors.poll();
@@ -146,18 +150,14 @@ public class Http11Protocol extends Abst
                     processor = createProcessor();
                 }
 
-                if (proto.isSSLEnabled() && (proto.sslImplementation != null)) 
{
-                    processor.setSSLSupport(
-                            proto.sslImplementation.getSSLSupport(
-                                    socket.getSocket()));
-                } else {
-                    processor.setSSLSupport(null);
-                }
+                initSsl(socket,processor);
                 
                 SocketState state = SocketState.CLOSED;
                 do {
                     if (processor.isAsync() || state == SocketState.ASYNC_END) 
{
                         state = processor.asyncDispatch(status);
+                    } else if (processor.comet) {
+                        state = processor.event(status);
                     } else {
                         state = processor.process(socket);
                     }
@@ -166,12 +166,18 @@ public class Http11Protocol extends Abst
                         state = processor.asyncPostProcess();
                     }
                 } while (state == SocketState.ASYNC_END);
-                // TODO Better to add a new state to the AsyncStateMachine and
-                //      remove ASYNC_END entirely
 
                 if (state == SocketState.LONG) {
+                    // In the middle of processing a request/response. Keep the
+                    // socket associated with the processor.
                     connections.put(socket, processor);
+                } else if (state == SocketState.OPEN){
+                    // In keep-alive but between requests. OK to recycle
+                    // processor. Continue to poll for the next request.
+                    processor.recycle();
+                    recycledProcessors.offer(processor);
                 } else {
+                    // Connection closed. OK to recycle the processor.
                     processor.recycle();
                     recycledProcessors.offer(processor);
                 }
@@ -200,6 +206,18 @@ public class Http11Protocol extends Abst
             return SocketState.CLOSED;
         }
         
+        private void initSsl(SocketWrapper<Socket> socket,
+                Http11Processor processor) {
+            if (proto.isSSLEnabled() && (proto.sslImplementation != null)) {
+                processor.setSSLSupport(
+                        proto.sslImplementation.getSSLSupport(
+                                socket.getSocket()));
+            } else {
+                processor.setSSLSupport(null);
+            }
+
+        }
+
         protected Http11Processor createProcessor() {
             Http11Processor processor = new Http11Processor(
                     proto.getMaxHttpHeaderSize(), (JIoEndpoint)proto.endpoint,

Modified: tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties?rev=1144317&r1=1144316&r2=1144317&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/LocalStrings.properties Fri Jul  
8 14:04:08 2011
@@ -34,6 +34,7 @@ http11processor.socket.info=Exception ge
 http11processor.socket.ssl=Exception getting SSL attributes
 http11processor.socket.sslreneg=Exception re-negotiating SSL connection
 http11processor.socket.timeout=Error setting socket timeout
+http11processor.comet.notsupported=The Comet protocol is not supported by this 
connector
 
 iib.eof.error=Unexpected EOF read on the socket
 iib.requestheadertoolarge.error=Request header is too large



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to