Author: markt Date: Sat Nov 24 18:48:59 2012 New Revision: 1413237 URL: http://svn.apache.org/viewvc?rev=1413237&view=rev Log: Simplify as there are some things that can't happen with HTTP upgrade than can with a normal HTTP connection (because the protocol tells you where the end of the request is).
Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java?rev=1413237&r1=1413236&r2=1413237&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletInputStream.java Sat Nov 24 18:48:59 2012 @@ -23,8 +23,6 @@ import javax.servlet.ServletInputStream; public abstract class UpgradeServletInputStream extends ServletInputStream { - private volatile boolean finished = false; - // Start in blocking-mode private volatile Boolean ready = Boolean.TRUE; private volatile ReadListener listener = null; @@ -32,12 +30,14 @@ public abstract class UpgradeServletInpu @Override public final boolean isFinished() { - return finished; + // The only way to finish an HTTP Upgrade connection is to close the + // socket. + return false; } @Override - public boolean isReady() { + public final boolean isReady() { // If we already know the current state, return it. if (ready != null) { return ready.booleanValue(); @@ -53,7 +53,7 @@ public abstract class UpgradeServletInpu @Override - public void setReadListener(ReadListener listener) { + public final void setReadListener(ReadListener listener) { if (listener == null) { // TODO i18n throw new IllegalArgumentException(); @@ -73,7 +73,7 @@ public abstract class UpgradeServletInpu @Override - public int readLine(byte[] b, int off, int len) throws IOException { + public final int readLine(byte[] b, int off, int len) throws IOException { preReadChecks(); if (len <= 0) { @@ -93,7 +93,7 @@ public abstract class UpgradeServletInpu @Override - public int read(byte[] b, int off, int len) throws IOException { + public final int read(byte[] b, int off, int len) throws IOException { preReadChecks(); return doRead(listener == null, b, off, len); @@ -111,17 +111,17 @@ public abstract class UpgradeServletInpu private int readInternal() throws IOException { - // Handles difference between EOF and NO DATA when reading a single byte + // Single byte reads for non-blocking need special handling so all + // single byte reads run through this method. ReadListener readListener = this.listener; byte[] b = new byte[1]; int result = doRead(readListener == null, b, 0, 1); if (result == 0) { return -1; } else if (result == -1) { - finished = true; - if (readListener != null) { - readListener.onAllDataRead(); - } + // Will never happen with a network socket. An IOException will be + // thrown when the client closes the connection. + // Echo back the -1 to be safe. return -1; } else { return b[0] & 0xFF; @@ -129,7 +129,7 @@ public abstract class UpgradeServletInpu } - protected void onDataAvailable() { + protected final void onDataAvailable() { ready = Boolean.TRUE; listener.onDataAvailable(); } Modified: tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java?rev=1413237&r1=1413236&r2=1413237&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/UpgradeServletOutputStream.java Sat Nov 24 18:48:59 2012 @@ -28,12 +28,12 @@ public abstract class UpgradeServletOutp private byte[] buffer; @Override - public boolean canWrite() { + public final boolean canWrite() { return buffer == null; } @Override - public void setWriteListener(WriteListener listener) { + public final void setWriteListener(WriteListener listener) { if (listener == null) { // TODO i18n throw new IllegalArgumentException(); @@ -84,7 +84,7 @@ public abstract class UpgradeServletOutp } - protected void onWritePossible() { + protected final void onWritePossible() { try { writeInternal(buffer, 0, buffer.length); } catch (IOException ioe) { Modified: tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java?rev=1413237&r1=1413236&r2=1413237&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java (original) +++ tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java Sat Nov 24 18:48:59 2012 @@ -92,7 +92,10 @@ public class TestUpgrade extends TomcatB // Note: BufferedReader.readLine() strips new lines // ServletInputStream.readLine() does not strip new lines - Assert.assertEquals(MESSAGE, response ); + Assert.assertEquals(MESSAGE, response); + Assert.assertEquals(MESSAGE, response); + + pw.close(); } @@ -245,7 +248,7 @@ public class TestUpgrade extends TomcatB @Override public void onAllDataRead() { - System.out.println("All data read"); + // NO-OP for HTTP Upgrade } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org