From: markt Date: Fri, 8 Jul 2011 17:28:25 +0000 (+0000) Subject: Align AJP and HTTP prior to pulling up Handler.process X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=24a3e04b1203347c0df082153407458d451cf353;p=tomcat7.0 Align AJP and HTTP prior to pulling up Handler.process git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1144393 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/coyote/ajp/AbstractAjpProcessor.java b/java/org/apache/coyote/ajp/AbstractAjpProcessor.java index 7824eba75..cde518ca7 100644 --- a/java/org/apache/coyote/ajp/AbstractAjpProcessor.java +++ b/java/org/apache/coyote/ajp/AbstractAjpProcessor.java @@ -213,6 +213,11 @@ public abstract class AbstractAjpProcessor 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 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. diff --git a/java/org/apache/coyote/ajp/AbstractAjpProtocol.java b/java/org/apache/coyote/ajp/AbstractAjpProtocol.java index f59b45e96..c31d47d17 100644 --- a/java/org/apache/coyote/ajp/AbstractAjpProtocol.java +++ b/java/org/apache/coyote/ajp/AbstractAjpProtocol.java @@ -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 socket, P processor) { + // NOOP for AJP + } + protected void longPoll(SocketWrapper socket, P processor) { + // Same requirements for all AJP connectors + connections.put(socket, processor); + socket.setAsync(true); + + } protected abstract void release(SocketWrapper socket, P processor, boolean socketClosing, boolean addToPoller); } diff --git a/java/org/apache/coyote/ajp/LocalStrings.properties b/java/org/apache/coyote/ajp/LocalStrings.properties index a9149d616..0e42906b9 100644 --- a/java/org/apache/coyote/ajp/LocalStrings.properties +++ b/java/org/apache/coyote/ajp/LocalStrings.properties @@ -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}