You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/08/16 14:04:36 UTC
svn commit: r1514668 - in /tomcat/tc7.0.x/trunk/java/org/apache:
catalina/connector/ coyote/ coyote/ajp/ coyote/http11/
coyote/http11/upgrade/ coyote/http11/upgrade/servlet31/
Author: markt
Date: Fri Aug 16 12:04:35 2013
New Revision: 1514668
URL: http://svn.apache.org/r1514668
Log:
Back-porting JSR-356
Add the Servlet 3.1 based HTTP upgrade mechanism. The aim at this point is to enable the back-ported JSR-356 code to compile. I'm not worried (right now) about whether the added code works or not as long as it doesn't break any existing Tomcat 7 functionality.
Added:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
- copied, changed from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java
- copied, changed from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java
- copied, changed from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java
- copied, changed from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java
- copied unchanged from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletInputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java
- copied unchanged from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprServletOutputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java
- copied, changed from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioServletInputStream.java
- copied unchanged from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/BioServletInputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioServletOutputStream.java
- copied unchanged from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/BioServletOutputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java
- copied, changed from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioServletInputStream.java
- copied unchanged from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletInputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java
- copied unchanged from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioServletOutputStream.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/ (with props)
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/HttpUpgradeHandler.java
- copied, changed from r1514523, tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/ReadListener.java
- copied, changed from r1514523, tomcat/trunk/java/javax/servlet/ReadListener.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WebConnection.java
- copied, changed from r1514523, tomcat/trunk/java/javax/servlet/http/WebConnection.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WriteListener.java
- copied, changed from r1514523, tomcat/trunk/java/javax/servlet/WriteListener.java
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/Processor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java?rev=1514668&r1=1514667&r2=1514668&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Request.java Fri Aug 16 12:04:35 2013
@@ -22,6 +22,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
import java.nio.charset.Charset;
import java.security.Principal;
import java.text.SimpleDateFormat;
@@ -40,6 +41,7 @@ import java.util.TimeZone;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicBoolean;
+import javax.naming.NamingException;
import javax.security.auth.Subject;
import javax.servlet.AsyncContext;
import javax.servlet.DispatcherType;
@@ -75,6 +77,7 @@ import org.apache.catalina.util.Paramete
import org.apache.catalina.util.StringParser;
import org.apache.coyote.ActionCode;
import org.apache.coyote.http11.upgrade.UpgradeInbound;
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.ExceptionUtils;
@@ -2819,7 +2822,7 @@ public class Request
}
- // --------------------------------------------------------- Upgrade Methods
+ // --------------------------------- Tomcat proprietary HTTP upgrade methods
public void doUpgrade(UpgradeInbound inbound)
throws IOException {
@@ -2833,6 +2836,35 @@ public class Request
}
+ // ---------------------------------- Servlet 3.1 based HTTP upgrade methods
+
+ @SuppressWarnings("unchecked")
+ public <T extends HttpUpgradeHandler> T upgrade(
+ Class<T> httpUpgradeHandlerClass) throws ServletException {
+
+ T handler;
+ try {
+ handler = (T) context.getInstanceManager().newInstance(httpUpgradeHandlerClass);
+ } catch (InstantiationException e) {
+ throw new ServletException(e);
+ } catch (IllegalAccessException e) {
+ throw new ServletException(e);
+ } catch (InvocationTargetException e) {
+ throw new ServletException(e);
+ } catch (NamingException e) {
+ throw new ServletException(e);
+ }
+
+ coyoteRequest.action(ActionCode.UPGRADE, handler);
+
+ // Output required by RFC2616. Protocol specific headers should have
+ // already been set.
+ response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
+
+ return handler;
+ }
+
+
// ------------------------------------------------------ Protected Methods
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/Processor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/Processor.java?rev=1514668&r1=1514667&r2=1514668&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/Processor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/Processor.java Fri Aug 16 12:04:35 2013
@@ -21,6 +21,7 @@ import java.io.IOException;
import java.util.concurrent.Executor;
import org.apache.coyote.http11.upgrade.UpgradeInbound;
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SocketStatus;
@@ -43,6 +44,9 @@ public interface Processor<S> {
UpgradeInbound getUpgradeInbound();
SocketState upgradeDispatch() throws IOException;
+ HttpUpgradeHandler getHttpUpgradeHandler();
+ SocketState upgradeDispatch(SocketStatus status) throws IOException;
+
boolean isComet();
boolean isAsync();
boolean isUpgrade();
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1514668&r1=1514667&r2=1514668&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Fri Aug 16 12:04:35 2013
@@ -34,6 +34,7 @@ import org.apache.coyote.Request;
import org.apache.coyote.RequestInfo;
import org.apache.coyote.Response;
import org.apache.coyote.http11.upgrade.UpgradeInbound;
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.ByteChunk;
@@ -541,6 +542,22 @@ public abstract class AbstractAjpProcess
}
+ @Override
+ public SocketState upgradeDispatch(SocketStatus status) throws IOException {
+ // Should never reach this code but in case we do...
+ throw new IOException(
+ sm.getString("ajpprocessor.httpupgrade.notsupported"));
+ }
+
+
+ @Override
+ public HttpUpgradeHandler getHttpUpgradeHandler() {
+ // Should never reach this code but in case we do...
+ throw new IllegalStateException(
+ sm.getString("ajpprocessor.httpupgrade.notsupported"));
+ }
+
+
/**
* Recycle the processor, ready for the next request which may be on the
* same connection or a different connection.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1514668&r1=1514667&r2=1514668&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Fri Aug 16 12:04:35 2013
@@ -37,6 +37,7 @@ import org.apache.coyote.http11.filters.
import org.apache.coyote.http11.filters.VoidInputFilter;
import org.apache.coyote.http11.filters.VoidOutputFilter;
import org.apache.coyote.http11.upgrade.UpgradeInbound;
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.Ascii;
@@ -258,11 +259,18 @@ public abstract class AbstractHttp11Proc
/**
* Listener to which data available events are passed once the associated
- * connection has completed the HTTP upgrade process.
+ * connection has completed the proprietary Tomcat HTTP upgrade process.
*/
protected UpgradeInbound upgradeInbound = null;
+ /**
+ * Instance of the new protocol to use after the HTTP connection has been
+ * upgraded using the Servlet 3.1 based upgrade process.
+ */
+ protected HttpUpgradeHandler httpUpgradeHandler = null;
+
+
public AbstractHttp11Processor(AbstractEndpoint endpoint) {
super(endpoint);
userDataHelper = new UserDataHelper(getLog());
@@ -848,6 +856,10 @@ public abstract class AbstractHttp11Proc
upgradeInbound = (UpgradeInbound) param;
// Stop further HTTP output
getOutputBuffer().finished = true;
+ } else if (actionCode == ActionCode.UPGRADE) {
+ httpUpgradeHandler = (HttpUpgradeHandler) param;
+ // Stop further HTTP output
+ getOutputBuffer().finished = true;
} else {
actionInternal(actionCode, param);
}
@@ -923,7 +935,8 @@ public abstract class AbstractHttp11Proc
}
while (!error && keepAlive && !comet && !isAsync() &&
- upgradeInbound == null && !endpoint.isPaused()) {
+ upgradeInbound == null &&
+ httpUpgradeHandler == null && !endpoint.isPaused()) {
// Parsing the request header
try {
@@ -1630,13 +1643,6 @@ public abstract class AbstractHttp11Proc
@Override
- public boolean isUpgrade() {
- return upgradeInbound != null;
- }
-
-
-
- @Override
public SocketState upgradeDispatch() throws IOException {
// Should never reach this code but in case we do...
// TODO
@@ -1651,6 +1657,26 @@ public abstract class AbstractHttp11Proc
}
+ @Override
+ public boolean isUpgrade() {
+ return httpUpgradeHandler != null;
+ }
+
+
+ @Override
+ public SocketState upgradeDispatch(SocketStatus status) throws IOException {
+ // Should never reach this code but in case we do...
+ throw new IOException(
+ sm.getString("ajpprocessor.httpupgrade.notsupported"));
+ }
+
+
+ @Override
+ public HttpUpgradeHandler getHttpUpgradeHandler() {
+ return httpUpgradeHandler;
+ }
+
+
/**
* Provides a mechanism for those connector implementations (currently only
* NIO) that need to reset timeouts from Async timeouts to standard HTTP
@@ -1717,6 +1743,7 @@ public abstract class AbstractHttp11Proc
asyncStateMachine.recycle();
}
upgradeInbound = null;
+ httpUpgradeHandler = null;
remoteAddr = null;
remoteHost = null;
localAddr = null;
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java (from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java&p1=tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java Fri Aug 16 12:04:35 2013
@@ -19,13 +19,10 @@ package org.apache.coyote.http11.upgrade
import java.io.IOException;
import java.util.concurrent.Executor;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.WebConnection;
-
import org.apache.coyote.Processor;
import org.apache.coyote.Request;
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
+import org.apache.coyote.http11.upgrade.servlet31.WebConnection;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLSupport;
@@ -65,12 +62,12 @@ public abstract class AbstractProcessor<
// --------------------------------------------------- WebConnection methods
@Override
- public ServletInputStream getInputStream() throws IOException {
+ public AbstractServletInputStream getInputStream() throws IOException {
return upgradeServletInputStream;
}
@Override
- public ServletOutputStream getOutputStream() throws IOException {
+ public AbstractServletOutputStream getOutputStream() throws IOException {
return upgradeServletOutputStream;
}
@@ -125,6 +122,19 @@ public abstract class AbstractProcessor<
// Currently a NO-OP as upgrade processors are not recycled.
}
+
+ // ------------------ Processor methods for Inbound/Outbound based mechanism
+
+ @Override
+ public UpgradeInbound getUpgradeInbound() {
+ return null;
+ }
+
+ @Override
+ public SocketState upgradeDispatch() throws IOException {
+ return null;
+ }
+
// ---------------------------- Processor methods that are NO-OP for upgrade
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java (from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java&p1=tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletInputStream.java Fri Aug 16 12:04:35 2013
@@ -18,11 +18,14 @@ package org.apache.coyote.http11.upgrade
import java.io.IOException;
-import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
+import org.apache.coyote.http11.upgrade.servlet31.ReadListener;
import org.apache.tomcat.util.res.StringManager;
+/**
+ * Implements the new Servlet 3.1 methods for {@link ServletInputStream}.
+ */
public abstract class AbstractServletInputStream extends ServletInputStream {
protected static final StringManager sm =
@@ -34,7 +37,9 @@ public abstract class AbstractServletInp
private volatile ReadListener listener = null;
- @Override
+ /**
+ * New Servlet 3.1 method.
+ */
public final boolean isFinished() {
if (listener == null) {
throw new IllegalStateException(
@@ -46,7 +51,9 @@ public abstract class AbstractServletInp
}
- @Override
+ /**
+ * New Servlet 3.1 method.
+ */
public final boolean isReady() {
if (listener == null) {
throw new IllegalStateException(
@@ -68,7 +75,9 @@ public abstract class AbstractServletInp
}
- @Override
+ /**
+ * New Servlet 3.1 method.
+ */
public final void setReadListener(ReadListener listener) {
if (listener == null) {
throw new IllegalArgumentException(
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java (from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java&p1=tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AbstractServletOutputStream.java Fri Aug 16 12:04:35 2013
@@ -19,11 +19,14 @@ package org.apache.coyote.http11.upgrade
import java.io.IOException;
import javax.servlet.ServletOutputStream;
-import javax.servlet.WriteListener;
+import org.apache.coyote.http11.upgrade.servlet31.WriteListener;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.res.StringManager;
+/**
+ * Implements the new Servlet 3.1 methods for {@link ServletOutputStream}.
+ */
public abstract class AbstractServletOutputStream extends ServletOutputStream {
protected static final StringManager sm =
@@ -38,7 +41,9 @@ public abstract class AbstractServletOut
private volatile boolean fireListener = false;
private volatile byte[] buffer;
- @Override
+ /**
+ * New Servlet 3.1 method.
+ */
public final boolean isReady() {
if (listener == null) {
throw new IllegalStateException(
@@ -54,7 +59,9 @@ public abstract class AbstractServletOut
}
}
- @Override
+ /**
+ * New Servlet 3.1 method.
+ */
public final void setWriteListener(WriteListener listener) {
if (listener == null) {
throw new IllegalArgumentException(
@@ -134,7 +141,7 @@ public abstract class AbstractServletOut
ExceptionUtils.handleThrowable(t);
listener.onError(t);
if (t instanceof IOException) {
- throw t;
+ throw (IOException) t;
} else {
throw new IOException(t);
}
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java (from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java&p1=tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/AprProcessor.java Fri Aug 16 12:04:35 2013
@@ -16,8 +16,7 @@
*/
package org.apache.coyote.http11.upgrade;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.jni.Socket;
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java (from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java&p1=tomcat/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/BioProcessor.java Fri Aug 16 12:04:35 2013
@@ -19,8 +19,7 @@ package org.apache.coyote.http11.upgrade
import java.io.IOException;
import java.net.Socket;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.net.SocketWrapper;
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties?rev=1514668&r1=1514667&r2=1514668&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/LocalStrings.properties Fri Aug 16 12:04:35 2013
@@ -13,8 +13,19 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-apr.read.error=Error [{0}] reading data from the APR/native socket.
-apr.write.error=Error [{0}] writing data to the APR/native socket.
+abstractProcessor.isCloseFail=Failed to close input stream associated with upgraded connection
+abstractProcessor.osCloseFail=Failed to close output stream associated with upgraded connection
-nio.eof.error=Unexpected EOF read on the socket
+upgrade.sis.isFinished.ise=It is illegal to call isFinished() when the ServletInputStream is not in non-blocking mode (i.e. setReadListener() must be called first)
+upgrade.sis.isReady.ise=It is illegal to call isReady() when the ServletInputStream is not in non-blocking mode (i.e. setReadListener() must be called first)
+upgrade.sis.readListener.null=It is illegal to pass null to setReadListener()
+upgrade.sis.read.ise=It is illegal to call any of the read() methods in non-blocking mode without first checking that there is data available by calling isReady()
+upgrade.sos.canWrite.ise=It is illegal to call canWrite() when the ServletOutputStream is not in non-blocking mode (i.e. setWriteListener() must be called first)
+upgrade.sos.writeListener.null=It is illegal to pass null to setWriteListener()
+upgrade.sis.write.ise=It is illegal to call any of the write() methods in non-blocking mode without first checking that there is space available by calling isReady()
+
+apr.read.error=Unexpected error [{0}] reading data from the APR/native socket.
+apr.write.error=Unexpected error [{0}] writing data to the APR/native socket.
+apr.closed=The socket associated with this connection has been closed.
+nio.eof.error=Unexpected EOF read on the socket
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java (from r1514523, tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java&p1=tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/NioProcessor.java Fri Aug 16 12:04:35 2013
@@ -16,8 +16,7 @@
*/
package org.apache.coyote.http11.upgrade;
-import javax.servlet.http.HttpUpgradeHandler;
-
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.net.NioChannel;
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java?rev=1514668&r1=1514667&r2=1514668&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/UpgradeProcessor.java Fri Aug 16 12:04:35 2013
@@ -21,6 +21,7 @@ import java.util.concurrent.Executor;
import org.apache.coyote.Processor;
import org.apache.coyote.Request;
+import org.apache.coyote.http11.upgrade.servlet31.HttpUpgradeHandler;
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
import org.apache.tomcat.util.net.SSLSupport;
import org.apache.tomcat.util.net.SocketStatus;
@@ -84,15 +85,29 @@ public abstract class UpgradeProcessor<S
}
@Override
- public final boolean isUpgrade() {
- return true;
+ public final void recycle(boolean socketClosing) {
+ // Currently a NO-OP as upgrade processors are not recycled.
}
+
+ // Servlet 3.1 based HTTP upgrade mechanism. NO-OPs for the proprietary
+ // Tomcat upgrade mechanism.
@Override
- public final void recycle(boolean socketClosing) {
- // Currently a NO-OP as upgrade processors are not recycled.
+ public HttpUpgradeHandler getHttpUpgradeHandler() {
+ return null;
+ }
+
+ @Override
+ public SocketState upgradeDispatch(SocketStatus status) throws IOException {
+ return null;
}
+ @Override
+ public boolean isUpgrade() {
+ return false;
+ }
+
+
// NO-OP methods for upgrade
@Override
public final Executor getExecutor() {
Propchange: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/
------------------------------------------------------------------------------
bugtraq:append = false
Propchange: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/
------------------------------------------------------------------------------
bugtraq:label = Bugzilla ID (optional)
Propchange: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/
------------------------------------------------------------------------------
--- bugtraq:message (added)
+++ bugtraq:message Fri Aug 16 12:04:35 2013
@@ -0,0 +1 @@
+Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/
------------------------------------------------------------------------------
bugtraq:url = https://issues.apache.org/bugzilla/show_bug.cgi?id=%BUGID%
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/HttpUpgradeHandler.java (from r1514523, tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/HttpUpgradeHandler.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/HttpUpgradeHandler.java&p1=tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/HttpUpgradeHandler.java Fri Aug 16 12:04:35 2013
@@ -14,12 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package javax.servlet.http;
+package org.apache.coyote.http11.upgrade.servlet31;
/**
* Interface between the HTTP upgrade process and the new protocol.
- *
- * @since Servlet 3.1
*/
public interface HttpUpgradeHandler {
@@ -30,8 +28,6 @@ public interface HttpUpgradeHandler {
* the container to the {@link HttpUpgradeHandler}.
*
* @param connection The connection that has been upgraded
- *
- * @since Servlet 3.1
*/
void init(WebConnection connection);
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/ReadListener.java (from r1514523, tomcat/trunk/java/javax/servlet/ReadListener.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/ReadListener.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/ReadListener.java&p1=tomcat/trunk/java/javax/servlet/ReadListener.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/ReadListener.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/ReadListener.java Fri Aug 16 12:04:35 2013
@@ -14,23 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package javax.servlet;
+package org.apache.coyote.http11.upgrade.servlet31;
import java.io.IOException;
/**
* Receives notification of read events when using non-blocking IO.
- *
- * @since Servlet 3.1
*/
public interface ReadListener extends java.util.EventListener{
/**
* Invoked when data is available to read. The container will invoke this
* method the first time for a request as soon as there is data to read.
- * Subsequent invocations will only occur if a call to
- * {@link ServletInputStream#isReady()} has returned false and data has
- * subsequently become available to read.
+ * Subsequent invocations will only occur if a call to {@link
+ * org.apache.coyote.http11.upgrade.AbstractServletInputStream#isReady()}
+ * has returned false and data has subsequently become available to read.
*
* @throws IOException
*/
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WebConnection.java (from r1514523, tomcat/trunk/java/javax/servlet/http/WebConnection.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WebConnection.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WebConnection.java&p1=tomcat/trunk/java/javax/servlet/http/WebConnection.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/WebConnection.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WebConnection.java Fri Aug 16 12:04:35 2013
@@ -14,34 +14,34 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package javax.servlet.http;
+package org.apache.coyote.http11.upgrade.servlet31;
import java.io.IOException;
-import javax.servlet.ServletInputStream;
-import javax.servlet.ServletOutputStream;
+import org.apache.coyote.http11.upgrade.AbstractServletInputStream;
+import org.apache.coyote.http11.upgrade.AbstractServletOutputStream;
/**
* The interface used by a {@link HttpUpgradeHandler} to interact with an upgraded
* HTTP connection.
- *
- * @since Servlet 3.1
*/
-public interface WebConnection extends AutoCloseable {
+public interface WebConnection {
/**
- * Provides access to the {@link ServletInputStream} for reading data from
- * the client.
- *
- * @since Servlet 3.1
+ * Provides access to the {@link AbstractServletInputStream} for reading
+ * data from the client.
*/
- ServletInputStream getInputStream() throws IOException;
+ AbstractServletInputStream getInputStream() throws IOException;
/**
- * Provides access to the {@link ServletOutputStream} for writing data to
- * the client.
- *
- * @since Servlet 3.1
+ * Provides access to the {@link AbstractServletOutputStream} for writing
+ * data to the client.
*/
- ServletOutputStream getOutputStream() throws IOException;
+ AbstractServletOutputStream getOutputStream() throws IOException;
+
+ /**
+ * The Servlet 3.1 interface extends AutoCloseable but that is not available
+ * in Java 6 so this is the single method from that interface.
+ */
+ void close() throws Exception;
}
\ No newline at end of file
Copied: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WriteListener.java (from r1514523, tomcat/trunk/java/javax/servlet/WriteListener.java)
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WriteListener.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WriteListener.java&p1=tomcat/trunk/java/javax/servlet/WriteListener.java&r1=1514523&r2=1514668&rev=1514668&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/WriteListener.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/upgrade/servlet31/WriteListener.java Fri Aug 16 12:04:35 2013
@@ -14,23 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package javax.servlet;
+package org.apache.coyote.http11.upgrade.servlet31;
import java.io.IOException;
/**
* Receives notification of write events when using non-blocking IO.
- *
- * @since Servlet 3.1
*/
public interface WriteListener extends java.util.EventListener{
/**
* Invoked when it it possible to write data without blocking. The container
* will invoke this method the first time for a request as soon as data can
- * be written. Subsequent invocations will only occur if a call to
- * {@link ServletOutputStream#isReady()} has returned false and it has since
- * become possible to write data.
+ * be written. Subsequent invocations will only occur if a call to {@link
+ * org.apache.coyote.http11.upgrade.AbstractServletOutputStream#isReady()}
+ * has returned false and it has since become possible to write data.
*
* @throws IOException
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org