Align AJP and HTTP prior to pulling up Handler.process
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 8 Jul 2011 17:28:25 +0000 (17:28 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 8 Jul 2011 17:28:25 +0000 (17:28 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1144393 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/ajp/AbstractAjpProcessor.java
java/org/apache/coyote/ajp/AbstractAjpProtocol.java
java/org/apache/coyote/ajp/LocalStrings.properties

index 7824eba..cde518c 100644 (file)
@@ -213,6 +213,11 @@ public abstract class AbstractAjpProcessor<S> extends AbstractProcessor {
     protected long byteCount = 0;
 
 
+    /**
+     * AJP does not support comet
+     */
+    protected final boolean comet = false;
+
     // ------------------------------------------------------------ Constructor
 
     public AbstractAjpProcessor(int packetSize, AbstractEndpoint endpoint) {
@@ -497,6 +502,13 @@ public abstract class AbstractAjpProcessor<S> extends AbstractProcessor {
     }
 
 
+    @SuppressWarnings("unused")
+    public SocketState event(SocketStatus status) throws IOException {
+        // Should never reach this code but in case we do...
+        throw new IOException(
+                sm.getString("ajpprocessor.comet.notsupported"));
+    }
+
     /**
      * Recycle the processor, ready for the next request which may be on the
      * same connection or a different connection.
index f59b45e..c31d47d 100644 (file)
@@ -104,10 +104,14 @@ public abstract class AbstractAjpProtocol extends AbstractProtocol {
                     processor = createProcessor();
                 }
 
+                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);
                     }
@@ -119,9 +123,9 @@ public abstract class AbstractAjpProtocol extends AbstractProtocol {
 
                 if (state == SocketState.LONG) {
                     // In the middle of processing a request/response. Keep the
-                    // socket associated with the processor.
-                    connections.put(socket, processor);
-                    socket.setAsync(true);
+                    // socket associated with the processor. Exact requirements
+                    // depend on type of long poll
+                    longPoll(socket, processor);
                 } else if (state == SocketState.OPEN){
                     // In keep-alive but between requests. OK to recycle
                     // processor. Continue to poll for the next request.
@@ -155,6 +159,16 @@ public abstract class AbstractAjpProtocol extends AbstractProtocol {
         }
         
         protected abstract P createProcessor();
+        @SuppressWarnings("unused")
+        protected void initSsl(SocketWrapper<S> socket, P processor) {
+            // NOOP for AJP
+        }
+        protected void longPoll(SocketWrapper<S> socket, P processor) {
+            // Same requirements for all AJP connectors
+            connections.put(socket, processor);
+            socket.setAsync(true);
+            
+        }
         protected abstract void release(SocketWrapper<S> socket, P processor,
                 boolean socketClosing, boolean addToPoller);
     }
index a9149d6..0e42906 100644 (file)
@@ -39,6 +39,7 @@ ajpprocessor.request.prepare=Error preparing request
 ajpprocessor.request.process=Error processing request
 ajpprocessor.certs.fail=Certificate conversion failed
 ajpprocessor.socket.info=Exception getting socket information
+ajpprocessor.comet.notsupported=The Comet protocol is not supported by this connector
 
 ajpmessage.null=Cannot append null value
 ajpmessage.overflow=Overflow error for buffer adding {0} bytes at position {1}