From d31730d53384209ac11eec6307bb8cb6a9669021 Mon Sep 17 00:00:00 2001 From: fhanik Date: Tue, 29 May 2007 10:44:51 +0000 Subject: [PATCH] Add the additional SocketStatus event types, its up to the connector implementation to send the correct one. Currently the functionality is backwards compatible as OPEN changed to OPEN_READ git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@542482 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/connector/CoyoteAdapter.java | 24 ++++++++++++++++++++-- java/org/apache/tomcat/util/net/AprEndpoint.java | 2 +- java/org/apache/tomcat/util/net/NioEndpoint.java | 2 +- java/org/apache/tomcat/util/net/SocketStatus.java | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java b/java/org/apache/catalina/connector/CoyoteAdapter.java index a17f0c7b6..d74672d4a 100644 --- a/java/org/apache/catalina/connector/CoyoteAdapter.java +++ b/java/org/apache/catalina/connector/CoyoteAdapter.java @@ -123,7 +123,27 @@ public class CoyoteAdapter try { if ( event!=null && (event instanceof CometEventImpl)) ((CometEventImpl)event).setWorkerThread(); - if (status == SocketStatus.OPEN) { + if (status == SocketStatus.OPEN_CALLBACK) { + if (response.isClosed()) { + // The event has been closed asynchronously, so call end instead of + // read to cleanup the pipeline + request.getEvent().setEventType(CometEvent.EventType.END); + request.getEvent().setEventSubType(null); + } else { + request.getEvent().setEventType(CometEvent.EventType.CALLBACK); + request.getEvent().setEventSubType(null); + } + } else if (status == SocketStatus.OPEN_WRITE) { + if (response.isClosed()) { + // The event has been closed asynchronously, so call end instead of + // read to cleanup the pipeline + request.getEvent().setEventType(CometEvent.EventType.END); + request.getEvent().setEventSubType(null); + } else { + request.getEvent().setEventType(CometEvent.EventType.WRITE); + request.getEvent().setEventSubType(null); + } + } else if (status == SocketStatus.OPEN_READ) { if (response.isClosed()) { // The event has been closed asynchronously, so call end instead of // read to cleanup the pipeline @@ -274,7 +294,7 @@ public class CoyoteAdapter if (!response.isClosed() && !response.isError()) { if (request.getAvailable()) { // Invoke a read event right away if there are available bytes - if (event(req, res, SocketStatus.OPEN)) { + if (event(req, res, SocketStatus.OPEN_READ)) { comet = true; res.action(ActionCode.ACTION_COMET_BEGIN, null); } diff --git a/java/org/apache/tomcat/util/net/AprEndpoint.java b/java/org/apache/tomcat/util/net/AprEndpoint.java index b23a9ef5d..f8d8d82d8 100644 --- a/java/org/apache/tomcat/util/net/AprEndpoint.java +++ b/java/org/apache/tomcat/util/net/AprEndpoint.java @@ -1301,7 +1301,7 @@ public class AprEndpoint { // Check for failed sockets and hand this socket off to a worker if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) || ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR) - || (comet && (!processSocket(desc[n*2+1], SocketStatus.OPEN))) + || (comet && (!processSocket(desc[n*2+1], SocketStatus.OPEN_READ))) || (!comet && (!processSocket(desc[n*2+1])))) { // Close socket and clear pool if (comet) { diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index 3f8fbd744..e122a00aa 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -1501,7 +1501,7 @@ public class NioEndpoint { //check if thread is available if ( isWorkerAvailable() ) { unreg(sk, attachment, sk.readyOps()); - if (!processSocket(channel, SocketStatus.OPEN)) + if (!processSocket(channel, SocketStatus.OPEN_READ)) processSocket(channel, SocketStatus.DISCONNECT); } else { result = false; diff --git a/java/org/apache/tomcat/util/net/SocketStatus.java b/java/org/apache/tomcat/util/net/SocketStatus.java index 58ee7f11f..bd98080e1 100644 --- a/java/org/apache/tomcat/util/net/SocketStatus.java +++ b/java/org/apache/tomcat/util/net/SocketStatus.java @@ -23,5 +23,5 @@ package org.apache.tomcat.util.net; * @author remm */ public enum SocketStatus { - OPEN, STOP, TIMEOUT, DISCONNECT, ERROR + OPEN_READ, OPEN_WRITE, OPEN_CALLBACK, STOP, TIMEOUT, DISCONNECT, ERROR } -- 2.11.0