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