Author: markt
Date: Sat Nov 24 17:37:31 2012
New Revision: 1413214
URL: http://svn.apache.org/viewvc?rev=1413214&view=rev
Log:
First cut for WebSockets (untested)
Added:
tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java
- copied, changed from r1413212,
tomcat/trunk/java/org/apache/catalina/websocket/StreamInbound.java
Removed:
tomcat/trunk/java/org/apache/catalina/websocket/StreamInbound.java
Modified:
tomcat/trunk/java/org/apache/catalina/websocket/LocalStrings.properties
tomcat/trunk/java/org/apache/catalina/websocket/MessageInbound.java
tomcat/trunk/java/org/apache/catalina/websocket/WebSocketServlet.java
tomcat/trunk/java/org/apache/catalina/websocket/WsFrame.java
tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java
tomcat/trunk/java/org/apache/catalina/websocket/WsOutbound.java
tomcat/trunk/test/org/apache/catalina/websocket/TestWebSocket.java
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java
Modified:
tomcat/trunk/java/org/apache/catalina/websocket/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/LocalStrings.properties?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/LocalStrings.properties Sat
Nov 24 17:37:31 2012
@@ -24,8 +24,6 @@ is.unknownOpCode=A frame with the unreco
message.bufferTooSmall=The buffer is not big enough to contain the message
currently being processed
-servlet.reqUpgradeFail=Unable to cast to the Tomcat internal request class in
order to complete HTTP upgrade
-
outbound.closed=The WebSocket connection has been closed
wrapper.invalid=An attempt was made to access the request object passed to
WebSocketServlet.createWebSocketInbound() outside of that method
\ No newline at end of file
Modified: tomcat/trunk/java/org/apache/catalina/websocket/MessageInbound.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/MessageInbound.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/MessageInbound.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/MessageInbound.java Sat Nov
24 17:37:31 2012
@@ -28,9 +28,9 @@ import org.apache.tomcat.util.res.String
* Base implementation of the class used to process WebSocket connections based
* on messages. Applications should extend this class to provide application
* specific functionality. Applications that wish to operate on a stream basis
- * rather than a message basis should use {@link StreamInbound}.
+ * rather than a message basis should use {@link StreamHandler}.
*/
-public abstract class MessageInbound extends StreamInbound {
+public abstract class MessageInbound extends StreamHandler {
private static final StringManager sm =
StringManager.getManager(Constants.Package);
Copied: tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java
(from r1413212,
tomcat/trunk/java/org/apache/catalina/websocket/StreamInbound.java)
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java?p2=tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java&p1=tomcat/trunk/java/org/apache/catalina/websocket/StreamInbound.java&r1=1413212&r2=1413214&rev=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/StreamInbound.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/StreamHandler.java Sat Nov
24 17:37:31 2012
@@ -24,9 +24,9 @@ import java.nio.ByteBuffer;
import java.nio.charset.MalformedInputException;
import java.nio.charset.UnmappableCharacterException;
-import org.apache.coyote.http11.upgrade.UpgradeInbound;
-import org.apache.coyote.http11.upgrade.UpgradeOutbound;
-import org.apache.coyote.http11.upgrade.UpgradeProcessor;
+import javax.servlet.http.ProtocolHandler;
+import javax.servlet.http.WebConnection;
+
import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
/**
@@ -35,16 +35,16 @@ import org.apache.tomcat.util.net.Abstra
* specific functionality. Applications that wish to operate on a message basis
* rather than a stream basis should use {@link MessageInbound}.
*/
-public abstract class StreamInbound implements UpgradeInbound {
+public abstract class StreamHandler implements ProtocolHandler {
private final ClassLoader applicationClassLoader;
- private UpgradeProcessor<?> processor = null;
private WsOutbound outbound;
+ private InputStream inputStream;
private int outboundByteBufferSize = WsOutbound.DEFAULT_BUFFER_SIZE;
private int outboundCharBufferSize = WsOutbound.DEFAULT_BUFFER_SIZE;
- public StreamInbound() {
+ public StreamHandler() {
applicationClassLoader =
Thread.currentThread().getContextClassLoader();
}
@@ -54,51 +54,12 @@ public abstract class StreamInbound impl
}
- /**
- * This only applies to the {@link WsOutbound} instance returned from
- * {@link #getWsOutbound()} created by a subsequent call to
- * {@link #setUpgradeOutbound(UpgradeOutbound)}. The current
- * {@link WsOutbound} instance, if any, is not affected.
- *
- * @param outboundByteBufferSize
- */
- public void setOutboundByteBufferSize(int outboundByteBufferSize) {
- this.outboundByteBufferSize = outboundByteBufferSize;
- }
-
-
public int getOutboundCharBufferSize() {
return outboundCharBufferSize;
}
/**
- * This only applies to the {@link WsOutbound} instance returned from
- * {@link #getWsOutbound()} created by a subsequent call to
- * {@link #setUpgradeOutbound(UpgradeOutbound)}. The current
- * {@link WsOutbound} instance, if any, is not affected.
- *
- * @param outboundCharBufferSize
- */
- public void setOutboundCharBufferSize(int outboundCharBufferSize) {
- this.outboundCharBufferSize = outboundCharBufferSize;
- }
-
-
- @Override
- public final void setUpgradeOutbound(UpgradeOutbound upgradeOutbound) {
- outbound = new WsOutbound(upgradeOutbound, outboundByteBufferSize,
- outboundCharBufferSize);
- }
-
-
- @Override
- public final void setUpgradeProcessor(UpgradeProcessor<?> processor) {
- this.processor = processor;
- }
-
-
- /**
* Obtain the outbound side of this WebSocket connection used for writing
* data to the client.
*/
@@ -107,11 +68,10 @@ public abstract class StreamInbound impl
}
- @Override
- public final SocketState onData() throws IOException {
+ public final SocketState onData() {
// Must be start the start of a message (which may consist of multiple
// frames)
- WsInputStream wsIs = new WsInputStream(processor, getWsOutbound());
+ WsInputStream wsIs = new WsInputStream(inputStream, getWsOutbound());
try {
WsFrame frame = wsIs.nextFrame(true);
@@ -149,16 +109,28 @@ public abstract class StreamInbound impl
}
} catch (MalformedInputException mie) {
// Invalid UTF-8
- closeOutboundConnection(Constants.STATUS_BAD_DATA, null);
+ try {
+ closeOutboundConnection(Constants.STATUS_BAD_DATA, null);
+ } catch (IOException e) {
+ // TODO
+ }
return SocketState.CLOSED;
} catch (UnmappableCharacterException uce) {
// Invalid UTF-8
- closeOutboundConnection(Constants.STATUS_BAD_DATA, null);
+ try {
+ closeOutboundConnection(Constants.STATUS_BAD_DATA, null);
+ } catch (IOException e) {
+ // TODO
+ }
return SocketState.CLOSED;
} catch (IOException ioe) {
// Given something must have gone to reach this point, this
// might not work but try it anyway.
- closeOutboundConnection(Constants.STATUS_PROTOCOL_ERROR, null);
+ try {
+ closeOutboundConnection(Constants.STATUS_PROTOCOL_ERROR, null);
+ } catch (IOException e) {
+ // TODO
+ }
return SocketState.CLOSED;
}
return SocketState.UPGRADED;
@@ -219,7 +191,18 @@ public abstract class StreamInbound impl
}
@Override
- public final void onUpgradeComplete() {
+ public final void init(WebConnection webConnection) {
+
+ // TODO Make these buffer sizes configurable via the constructor
+ try {
+ inputStream = webConnection.getInputStream();
+ outbound = new WsOutbound(webConnection.getOutputStream(),
+ outboundByteBufferSize, outboundCharBufferSize);
+ } catch (IOException ioe) {
+ // TODO i18n
+ throw new IllegalStateException(ioe);
+ }
+
// Need to call onOpen using the web application's class loader
Thread t = Thread.currentThread();
ClassLoader cl = t.getContextClassLoader();
@@ -229,6 +212,8 @@ public abstract class StreamInbound impl
} finally {
t.setContextClassLoader(cl);
}
+
+ onData();
}
/**
@@ -282,17 +267,4 @@ public abstract class StreamInbound impl
* connection.
*/
protected abstract void onTextData(Reader r) throws IOException;
-
- /**
- * This default implementation sets the read timeout to infinite and
expects
- * the WebSocket application to close the connection when it is no longer
- * required. Applications wishing to set an explicit timeout may override
- * this method and return a value of their choice.
- *
- * @return The read timeout in milliseconds or -1 for infinite
- */
- @Override
- public int getReadTimeout() {
- return -1;
- }
}
Modified: tomcat/trunk/java/org/apache/catalina/websocket/WebSocketServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/WebSocketServlet.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/WebSocketServlet.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/WebSocketServlet.java Sat
Nov 24 17:37:31 2012
@@ -27,16 +27,13 @@ import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletRequestWrapper;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.ProtocolHandler;
-import org.apache.catalina.connector.RequestFacade;
import org.apache.catalina.util.Base64;
import org.apache.tomcat.util.buf.B2CConverter;
-import org.apache.tomcat.util.res.StringManager;
/**
* Provides the base implementation of a Servlet for processing WebSocket
@@ -49,8 +46,6 @@ public abstract class WebSocketServlet e
private static final byte[] WS_ACCEPT =
"258EAFA5-E914-47DA-95CA-C5AB0DC85B11".getBytes(
B2CConverter.ISO_8859_1);
- private static final StringManager sm =
- StringManager.getManager(Constants.Package);
private final Queue<MessageDigest> sha1Helpers =
new ConcurrentLinkedQueue<>();
@@ -118,21 +113,11 @@ public abstract class WebSocketServlet e
}
WsHttpServletRequestWrapper wrapper = new
WsHttpServletRequestWrapper(req);
- StreamInbound inbound = createWebSocketInbound(subProtocol, wrapper);
+ ProtocolHandler wsHandler =
+ createWebSocketHandler(subProtocol, wrapper);
wrapper.invalidate();
- // Small hack until the Servlet API provides a way to do this.
- ServletRequest inner = req;
- // Unwrap the request
- while (inner instanceof ServletRequestWrapper) {
- inner = ((ServletRequestWrapper) inner).getRequest();
- }
- if (inner instanceof RequestFacade) {
- ((RequestFacade) inner).doUpgrade(inbound);
- } else {
- resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
- sm.getString("servlet.reqUpgradeFail"));
- }
+ req.upgrade(wsHandler);
}
@@ -243,6 +228,6 @@ public abstract class WebSocketServlet e
* method. If Tomcat detects such access, it will
throw
* an IllegalStateException
*/
- protected abstract StreamInbound createWebSocketInbound(String subProtocol,
- HttpServletRequest request);
+ protected abstract ProtocolHandler createWebSocketHandler(
+ String subProtocol, HttpServletRequest request);
}
Modified: tomcat/trunk/java/org/apache/catalina/websocket/WsFrame.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/WsFrame.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/WsFrame.java (original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/WsFrame.java Sat Nov 24
17:37:31 2012
@@ -18,12 +18,12 @@ package org.apache.catalina.websocket;
import java.io.EOFException;
import java.io.IOException;
+import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CoderResult;
import org.apache.catalina.util.Conversions;
-import org.apache.coyote.http11.upgrade.UpgradeProcessor;
import org.apache.tomcat.util.res.StringManager;
/**
@@ -56,14 +56,14 @@ public class WsFrame {
* connection.
*/
private WsFrame(byte first,
- UpgradeProcessor<?> processor) throws IOException {
+ InputStream is) throws IOException {
int b = first & 0xFF;
fin = (b & 0x80) > 0;
rsv = (b & 0x70) >>> 4;
opCode = (byte) (b & 0x0F);
- b = blockingRead(processor);
+ b = blockingRead(is);
// Client data must be masked
if ((b & 0x80) == 0) {
throw new IOException(sm.getString("frame.notMasked"));
@@ -72,11 +72,11 @@ public class WsFrame {
payloadLength = b & 0x7F;
if (payloadLength == 126) {
byte[] extended = new byte[2];
- blockingRead(processor, extended);
+ blockingRead(is, extended);
payloadLength = Conversions.byteArrayToLong(extended);
} else if (payloadLength == 127) {
byte[] extended = new byte[8];
- blockingRead(processor, extended);
+ blockingRead(is, extended);
payloadLength = Conversions.byteArrayToLong(extended);
}
@@ -89,12 +89,12 @@ public class WsFrame {
}
}
- blockingRead(processor, mask);
+ blockingRead(is, mask);
if (isControl()) {
// Note: Payload limited to <= 125 bytes by test above
payload = ByteBuffer.allocate((int) payloadLength);
- blockingRead(processor, payload);
+ blockingRead(is, payload);
if (opCode == Constants.OPCODE_CLOSE && payloadLength > 2) {
// Check close payload - if present - is valid UTF-8
@@ -144,9 +144,9 @@ public class WsFrame {
/*
* Blocks until a aingle byte has been read
*/
- private int blockingRead(UpgradeProcessor<?> processor)
+ private int blockingRead(InputStream is)
throws IOException {
- int result = processor.read();
+ int result = is.read();
if (result == -1) {
throw new IOException(sm.getString("frame.eos"));
}
@@ -157,12 +157,13 @@ public class WsFrame {
/*
* Blocks until the byte array has been filled.
*/
- private void blockingRead(UpgradeProcessor<?> processor, byte[] bytes)
+ private void blockingRead(InputStream is, byte[] bytes)
throws IOException {
int read = 0;
int last = 0;
while (read < bytes.length) {
- last = processor.read(true, bytes, read, bytes.length - read);
+ // TODO Must block ????
+ last = is.read(bytes, read, bytes.length - read);
if (last == -1) {
throw new IOException(sm.getString("frame.eos"));
}
@@ -175,11 +176,11 @@ public class WsFrame {
* Intended to read whole payload and blocks until it has. Therefore able
to
* unmask the payload data.
*/
- private void blockingRead(UpgradeProcessor<?> processor, ByteBuffer bb)
+ private void blockingRead(InputStream is, ByteBuffer bb)
throws IOException {
int last = 0;
while (bb.hasRemaining()) {
- last = processor.read();
+ last = is.read();
if (last == -1) {
throw new IOException(sm.getString("frame.eos"));
}
@@ -206,13 +207,14 @@ public class WsFrame {
* exception will trigger the closing of the WebSocket
* connection.
*/
- public static WsFrame nextFrame(UpgradeProcessor<?> processor,
+ public static WsFrame nextFrame(InputStream is,
boolean block) throws IOException {
byte[] first = new byte[1];
- int read = processor.read(block, first, 0, 1);
+ // TODO Must block ?????
+ int read = is.read(first, 0, 1);
if (read == 1) {
- return new WsFrame(first[0], processor);
+ return new WsFrame(first[0], is);
} else if (read == 0) {
return null;
} else if (read == -1) {
Modified: tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/WsInputStream.java Sat Nov
24 17:37:31 2012
@@ -19,7 +19,6 @@ package org.apache.catalina.websocket;
import java.io.IOException;
import java.io.InputStream;
-import org.apache.coyote.http11.upgrade.UpgradeProcessor;
import org.apache.tomcat.util.res.StringManager;
/**
@@ -34,7 +33,7 @@ public class WsInputStream extends Input
StringManager.getManager(Constants.Package);
- private final UpgradeProcessor<?> processor;
+ private final InputStream is;
private final WsOutbound outbound;
private WsFrame frame;
@@ -44,8 +43,8 @@ public class WsInputStream extends Input
private String error = null;
- public WsInputStream(UpgradeProcessor<?> processor, WsOutbound outbound) {
- this.processor = processor;
+ public WsInputStream(InputStream is, WsOutbound outbound) {
+ this.is = is;
this.outbound = outbound;
}
@@ -65,7 +64,7 @@ public class WsInputStream extends Input
* @throws IOException If a problem occurs reading the data for the frame.
*/
public WsFrame nextFrame(boolean block) throws IOException {
- frame = WsFrame.nextFrame(processor, block);
+ frame = WsFrame.nextFrame(is, block);
if (frame != null) {
readThisFragment = 0;
remaining = frame.getPayLoadLength();
@@ -88,7 +87,7 @@ public class WsInputStream extends Input
remaining--;
readThisFragment++;
- int masked = processor.read();
+ int masked = is.read();
if(masked == -1) {
return -1;
}
@@ -109,7 +108,8 @@ public class WsInputStream extends Input
if (len > remaining) {
len = (int) remaining;
}
- int result = processor.read(true, b, off, len);
+ // TODO Must block????
+ int result = is.read(b, off, len);
if(result == -1) {
return -1;
}
Modified: tomcat/trunk/java/org/apache/catalina/websocket/WsOutbound.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/websocket/WsOutbound.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/websocket/WsOutbound.java (original)
+++ tomcat/trunk/java/org/apache/catalina/websocket/WsOutbound.java Sat Nov 24
17:37:31 2012
@@ -17,12 +17,12 @@
package org.apache.catalina.websocket;
import java.io.IOException;
+import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
-import org.apache.coyote.http11.upgrade.UpgradeOutbound;
import org.apache.tomcat.util.buf.B2CConverter;
import org.apache.tomcat.util.res.StringManager;
@@ -38,7 +38,7 @@ public class WsOutbound {
StringManager.getManager(Constants.Package);
public static final int DEFAULT_BUFFER_SIZE = 8192;
- private UpgradeOutbound upgradeOutbound;
+ private OutputStream outputStream;
private ByteBuffer bb;
private CharBuffer cb;
private boolean closed = false;
@@ -46,14 +46,14 @@ public class WsOutbound {
private boolean firstFrame = true;
- public WsOutbound(UpgradeOutbound upgradeOutbound) {
- this(upgradeOutbound, DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE);
+ public WsOutbound(OutputStream outputStream) {
+ this(outputStream, DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE);
}
- public WsOutbound(UpgradeOutbound upgradeOutbound, int byteBufferSize,
+ public WsOutbound(OutputStream outputStream, int byteBufferSize,
int charBufferSize) {
- this.upgradeOutbound = upgradeOutbound;
+ this.outputStream = outputStream;
this.bb = ByteBuffer.allocate(byteBufferSize);
this.cb = CharBuffer.allocate(charBufferSize);
}
@@ -271,25 +271,25 @@ public class WsOutbound {
}
closed = true;
- upgradeOutbound.write(0x88);
+ outputStream.write(0x88);
if (status == 0) {
- upgradeOutbound.write(0);
+ outputStream.write(0);
} else if (data == null || data.position() == data.limit()) {
- upgradeOutbound.write(2);
- upgradeOutbound.write(status >>> 8);
- upgradeOutbound.write(status);
+ outputStream.write(2);
+ outputStream.write(status >>> 8);
+ outputStream.write(status);
} else {
- upgradeOutbound.write(2 + data.limit() - data.position());
- upgradeOutbound.write(status >>> 8);
- upgradeOutbound.write(status);
- upgradeOutbound.write(data.array(), data.position(),
+ outputStream.write(2 + data.limit() - data.position());
+ outputStream.write(status >>> 8);
+ outputStream.write(status);
+ outputStream.write(data.array(), data.position(),
data.limit() - data.position());
}
- upgradeOutbound.flush();
+ outputStream.flush();
bb = null;
cb = null;
- upgradeOutbound = null;
+ outputStream = null;
}
@@ -331,16 +331,16 @@ public class WsOutbound {
doFlush(true);
- upgradeOutbound.write(0x80 | opcode);
+ outputStream.write(0x80 | opcode);
if (data == null) {
- upgradeOutbound.write(0);
+ outputStream.write(0);
} else {
- upgradeOutbound.write(data.limit() - data.position());
- upgradeOutbound.write(data.array(), data.position(),
+ outputStream.write(data.limit() - data.position());
+ outputStream.write(data.array(), data.position(),
data.limit() - data.position());
}
- upgradeOutbound.flush();
+ outputStream.flush();
}
@@ -368,31 +368,30 @@ public class WsOutbound {
}
}
// Continuation frame is OpCode 0
- upgradeOutbound.write(first);
+ outputStream.write(first);
if (buffer.limit() < 126) {
- upgradeOutbound.write(buffer.limit());
+ outputStream.write(buffer.limit());
} else if (buffer.limit() < 65536) {
- upgradeOutbound.write(126);
- upgradeOutbound.write(buffer.limit() >>> 8);
- upgradeOutbound.write(buffer.limit() & 0xFF);
+ outputStream.write(126);
+ outputStream.write(buffer.limit() >>> 8);
+ outputStream.write(buffer.limit() & 0xFF);
} else {
// Will never be more than 2^31-1
- upgradeOutbound.write(127);
- upgradeOutbound.write(0);
- upgradeOutbound.write(0);
- upgradeOutbound.write(0);
- upgradeOutbound.write(0);
- upgradeOutbound.write(buffer.limit() >>> 24);
- upgradeOutbound.write(buffer.limit() >>> 16);
- upgradeOutbound.write(buffer.limit() >>> 8);
- upgradeOutbound.write(buffer.limit() & 0xFF);
-
+ outputStream.write(127);
+ outputStream.write(0);
+ outputStream.write(0);
+ outputStream.write(0);
+ outputStream.write(0);
+ outputStream.write(buffer.limit() >>> 24);
+ outputStream.write(buffer.limit() >>> 16);
+ outputStream.write(buffer.limit() >>> 8);
+ outputStream.write(buffer.limit() & 0xFF);
}
// Write the content
- upgradeOutbound.write(buffer.array(), 0, buffer.limit());
- upgradeOutbound.flush();
+ outputStream.write(buffer.array(), 0, buffer.limit());
+ outputStream.flush();
// Reset
if (finalFragment) {
Modified: tomcat/trunk/test/org/apache/catalina/websocket/TestWebSocket.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/websocket/TestWebSocket.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/websocket/TestWebSocket.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/websocket/TestWebSocket.java Sat Nov
24 17:37:31 2012
@@ -300,7 +300,7 @@ public class TestWebSocket extends Tomca
private static final long serialVersionUID = 1L;
@Override
- protected StreamInbound createWebSocketInbound(String subProtocol,
+ protected StreamHandler createWebSocketInbound(String subProtocol,
HttpServletRequest request) {
return new Bug53339WsInbound();
}
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
---
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java
(original)
+++
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/chat/ChatWebSocketServlet.java
Sat Nov 24 17:37:31 2012
@@ -26,7 +26,7 @@ import java.util.concurrent.atomic.Atomi
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.MessageInbound;
-import org.apache.catalina.websocket.StreamInbound;
+import org.apache.catalina.websocket.StreamHandler;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
@@ -46,7 +46,7 @@ public class ChatWebSocketServlet extend
new CopyOnWriteArraySet<>();
@Override
- protected StreamInbound createWebSocketInbound(String subProtocol,
+ protected StreamHandler createWebSocketHandler(String subProtocol,
HttpServletRequest request) {
return new ChatMessageInbound(connectionIds.incrementAndGet());
}
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
---
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java
(original)
+++
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoMessage.java
Sat Nov 24 17:37:31 2012
@@ -24,7 +24,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.MessageInbound;
-import org.apache.catalina.websocket.StreamInbound;
+import org.apache.catalina.websocket.StreamHandler;
import org.apache.catalina.websocket.WebSocketServlet;
@@ -60,14 +60,14 @@ public class EchoMessage extends WebSock
@Override
- protected StreamInbound createWebSocketInbound(String subProtocol,
+ protected StreamHandler createWebSocketHandler(String subProtocol,
HttpServletRequest request) {
- return new EchoMessageInbound(byteBufSize,charBufSize);
+ return new EchoMessageHandler(byteBufSize,charBufSize);
}
- private static final class EchoMessageInbound extends MessageInbound {
+ private static final class EchoMessageHandler extends MessageInbound {
- public EchoMessageInbound(int byteBufferMaxSize, int
charBufferMaxSize) {
+ public EchoMessageHandler(int byteBufferMaxSize, int
charBufferMaxSize) {
super();
setByteBufferMaxSize(byteBufferMaxSize);
setCharBufferMaxSize(charBufferMaxSize);
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
---
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java
(original)
+++
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/echo/EchoStream.java
Sat Nov 24 17:37:31 2012
@@ -22,7 +22,7 @@ import java.io.Reader;
import javax.servlet.http.HttpServletRequest;
-import org.apache.catalina.websocket.StreamInbound;
+import org.apache.catalina.websocket.StreamHandler;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
@@ -32,12 +32,12 @@ public class EchoStream extends WebSocke
private static final long serialVersionUID = 1L;
@Override
- protected StreamInbound createWebSocketInbound(String subProtocol,
+ protected StreamHandler createWebSocketHandler(String subProtocol,
HttpServletRequest request) {
return new EchoStreamInbound();
}
- private static final class EchoStreamInbound extends StreamInbound {
+ private static final class EchoStreamInbound extends StreamHandler {
@Override
protected void onBinaryData(InputStream is) throws IOException {
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java?rev=1413214&r1=1413213&r2=1413214&view=diff
==============================================================================
---
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java
(original)
+++
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/snake/SnakeWebSocketServlet.java
Sat Nov 24 17:37:31 2012
@@ -33,7 +33,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.apache.catalina.websocket.MessageInbound;
-import org.apache.catalina.websocket.StreamInbound;
+import org.apache.catalina.websocket.StreamHandler;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
import org.apache.juli.logging.Log;
@@ -149,7 +149,7 @@ public class SnakeWebSocketServlet exten
}
@Override
- protected StreamInbound createWebSocketInbound(String subProtocol,
+ protected StreamHandler createWebSocketHandler(String subProtocol,
HttpServletRequest request) {
return new SnakeMessageInbound(connectionIds.incrementAndGet());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]