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/02/11 15:57:42 UTC
svn commit: r1444808 - in /tomcat/trunk: java/javax/websocket/
java/org/apache/tomcat/websocket/ java/org/apache/tomcat/websocket/server/
test/org/apache/tomcat/websocket/
Author: markt
Date: Mon Feb 11 14:57:27 2013
New Revision: 1444808
URL: http://svn.apache.org/r1444808
Log:
Update to draft v12 of WebSocket API
Align current implementation with draft
Modified:
tomcat/trunk/java/javax/websocket/CloseReason.java
tomcat/trunk/java/javax/websocket/ContainerProvider.java
tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java
tomcat/trunk/java/javax/websocket/RemoteEndpoint.java
tomcat/trunk/java/javax/websocket/Session.java
tomcat/trunk/java/javax/websocket/WebSocketContainer.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
Modified: tomcat/trunk/java/javax/websocket/CloseReason.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/CloseReason.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/CloseReason.java (original)
+++ tomcat/trunk/java/javax/websocket/CloseReason.java Mon Feb 11 14:57:27 2013
@@ -34,6 +34,12 @@ public class CloseReason {
return reasonPhrase;
}
+ @Override
+ public String toString() {
+ return "CloseReason: code [" + closeCode.getCode() +
+ "], reason [" + reasonPhrase + "]";
+ }
+
public interface CloseCode {
int getCode();
}
@@ -62,6 +68,52 @@ public class CloseReason {
this.code = code;
}
+ public static CloseCode getCloseCode(final int code) {
+ if (code > 2999 && code < 5000) {
+ return new CloseCode() {
+ @Override
+ public int getCode() {
+ return code;
+ }
+ };
+ }
+ switch (code) {
+ case 1000:
+ return CloseCodes.NORMAL_CLOSURE;
+ case 1001:
+ return CloseCodes.GOING_AWAY;
+ case 1002:
+ return CloseCodes.PROTOCOL_ERROR;
+ case 1003:
+ return CloseCodes.CANNOT_ACCEPT;
+ case 1004:
+ return CloseCodes.RESERVED;
+ case 1005:
+ return CloseCodes.NO_STATUS_CODE;
+ case 1006:
+ return CloseCodes.CLOSED_ABNORMALLY;
+ case 1007:
+ return CloseCodes.NOT_CONSISTENT;
+ case 1008:
+ return CloseCodes.VIOLATED_POLICY;
+ case 1009:
+ return CloseCodes.TOO_BIG;
+ case 1010:
+ return CloseCodes.NO_EXTENSION;
+ case 1011:
+ return CloseCodes.UNEXPECTED_CONDITION;
+ case 1012:
+ return CloseCodes.SERVICE_RESTART;
+ case 1013:
+ return CloseCodes.TRY_AGAIN_LATER;
+ case 1015:
+ return CloseCodes.TLS_HANDSHAKE_FAILURE;
+ default:
+ throw new IllegalArgumentException(
+ "Invalid close code: [" + code + "]");
+ }
+ }
+
@Override
public int getCode() {
return code;
Modified: tomcat/trunk/java/javax/websocket/ContainerProvider.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/ContainerProvider.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/ContainerProvider.java (original)
+++ tomcat/trunk/java/javax/websocket/ContainerProvider.java Mon Feb 11 14:57:27 2013
@@ -20,7 +20,7 @@ package javax.websocket;
* Provides access to the implementation. This version of the API is hard-coded
* to use the Apache Tomcat WebSocket implementation.
*/
-public class ContainerProvider {
+public abstract class ContainerProvider {
private static final String DEFAULT_PROVIDER_CLASS_NAME =
"org.apache.tomcat.websocket.WsWebSocketContainer";
@@ -40,7 +40,7 @@ public class ContainerProvider {
* Create a new ClientContainer used to create outgoing WebSocket
* connections.
*/
- public static WebSocketContainer createClientContainer() {
+ public static WebSocketContainer getWebSocketContainer() {
WebSocketContainer result = null;
try {
result = clazz.newInstance();
Modified: tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java (original)
+++ tomcat/trunk/java/javax/websocket/DefaultClientConfiguration.java Mon Feb 11 14:57:27 2013
@@ -42,7 +42,7 @@ public class DefaultClientConfiguration
return extensions;
}
- public ClientEndpointConfiguration setExtensions(
+ public DefaultClientConfiguration setExtensions(
List<Extension> extensions) {
this.extensions = extensions;
return this;
@@ -53,7 +53,7 @@ public class DefaultClientConfiguration
return encoders;
}
- public ClientEndpointConfiguration setEncoders(List<Encoder> encoders) {
+ public DefaultClientConfiguration setEncoders(List<Encoder> encoders) {
this.encoders = encoders;
return this;
}
@@ -63,7 +63,7 @@ public class DefaultClientConfiguration
return decoders;
}
- public ClientEndpointConfiguration setDecoders(List<Decoder> decoders) {
+ public DefaultClientConfiguration setDecoders(List<Decoder> decoders) {
this.decoders = decoders;
return this;
}
Modified: tomcat/trunk/java/javax/websocket/RemoteEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/RemoteEndpoint.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/RemoteEndpoint.java (original)
+++ tomcat/trunk/java/javax/websocket/RemoteEndpoint.java Mon Feb 11 14:57:27 2013
@@ -43,7 +43,7 @@ public interface RemoteEndpoint {
* Flush any currently batched messages to the remote endpoint. This method
* will block until the flush completes.
*/
- void flushBatch();
+ void flushBatch() throws IOException;
/**
* Obtain the timeout (in milliseconds) for sending a message
Modified: tomcat/trunk/java/javax/websocket/Session.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/Session.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/Session.java (original)
+++ tomcat/trunk/java/javax/websocket/Session.java Mon Feb 11 14:57:27 2013
@@ -52,9 +52,25 @@ public interface Session extends Closeab
void setTimeout(long seconds);
- void setMaximumMessageSize(long length);
+ /**
+ * Set the current maximum buffer size (in bytes) for binary messages.
+ */
+ void setMaxBinaryMessageBufferSize(int max);
- long getMaximumMessageSize();
+ /**
+ * Get the current maximum buffer size (in bytes) for binary messages.
+ */
+ int getMaxBinaryMessageBufferSize();
+
+ /**
+ * Set the current maximum buffer size (in characters) for text messages.
+ */
+ void setMaxTextMessageBufferSize(int max);
+
+ /**
+ * Get the current maximum buffer size (in characters) for text messages.
+ */
+ int getMaxTextMessageBufferSize();
RemoteEndpoint getRemote();
@@ -90,4 +106,6 @@ public interface Session extends Closeab
Map<String,Object> getUserProperties();
Principal getUserPrincipal();
+
+ Set<Session> getOpenSessions();
}
Modified: tomcat/trunk/java/javax/websocket/WebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/websocket/WebSocketContainer.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/javax/websocket/WebSocketContainer.java (original)
+++ tomcat/trunk/java/javax/websocket/WebSocketContainer.java Mon Feb 11 14:57:27 2013
@@ -55,31 +55,29 @@ public interface WebSocketContainer {
ClientEndpointConfiguration clientEndpointConfiguration, URI path)
throws DeploymentException;
- Set<Session> getOpenSessions();
-
long getMaxSessionIdleTimeout();
void setMaxSessionIdleTimeout(long timeout);
/**
- * Get the current maximum buffer size (in bytes) for binary messages.
+ * Get the default maximum buffer size (in bytes) for binary messages.
*/
- long getMaxBinaryMessageBufferSize();
+ int getDefaultMaxBinaryMessageBufferSize();
/**
- * Set the current maximum buffer size (in bytes) for binary messages.
+ * Set the default maximum buffer size (in bytes) for binary messages.
*/
- void setMaxBinaryMessageBufferSize(long max);
+ void setDefaultMaxBinaryMessageBufferSize(int max);
/**
- * Get the current maximum buffer size (in characters) for text messages.
+ * Get the default maximum buffer size (in characters) for text messages.
*/
- long getMaxTextMessageBufferSize();
+ int getDefaultMaxTextMessageBufferSize();
/**
- * Set the current maximum buffer size (in characters) for text messages.
+ * Set the default maximum buffer size (in characters) for text messages.
*/
- void setMaxTextMessageBufferSize(long max);
+ void setDefaultMaxTextMessageBufferSize(int max);
Set<Extension> getInstalledExtensions();
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointBase.java Mon Feb 11 14:57:27 2013
@@ -84,7 +84,11 @@ public abstract class WsRemoteEndpointBa
if (oldValue && !batchingAllowed) {
// Just disabled batched. Must flush.
- flushBatch();
+ try {
+ flushBatch();
+ } catch (IOException e) {
+ // TODO Log this? Runtime exception? Something else?
+ }
}
}
@@ -96,12 +100,8 @@ public abstract class WsRemoteEndpointBa
@Override
- public void flushBatch() {
- try {
- startMessageBlock(Constants.INTERNAL_OPCODE_FLUSH, null, true);
- } catch (IOException e) {
- // TODO Log this? Runtime exception? Something else?
- }
+ public void flushBatch() throws IOException {
+ startMessageBlock(Constants.INTERNAL_OPCODE_FLUSH, null, true);
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Mon Feb 11 14:57:27 2013
@@ -206,20 +206,44 @@ public class WsSession implements Sessio
}
+
+
@Override
- public void setMaximumMessageSize(long length) {
+ public void setMaxBinaryMessageBufferSize(int max) {
// TODO Auto-generated method stub
+
}
@Override
- public long getMaximumMessageSize() {
+ public int getMaxBinaryMessageBufferSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
+ public void setMaxTextMessageBufferSize(int max) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+ @Override
+ public int getMaxTextMessageBufferSize() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+
+ @Override
+ public Set<Session> getOpenSessions() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+
+ @Override
public RemoteEndpoint getRemote() {
return wsRemoteEndpoint;
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Mon Feb 11 14:57:27 2013
@@ -343,13 +343,6 @@ public class WsWebSocketContainer implem
@Override
- public Set<Session> getOpenSessions() {
- // TODO Auto-generated method stub
- return null;
- }
-
-
- @Override
public long getMaxSessionIdleTimeout() {
// TODO Auto-generated method stub
return 0;
@@ -363,34 +356,26 @@ public class WsWebSocketContainer implem
@Override
- public long getMaxBinaryMessageBufferSize() {
+ public int getDefaultMaxBinaryMessageBufferSize() {
return maxBinaryMessageBufferSize;
}
@Override
- public void setMaxBinaryMessageBufferSize(long max) {
- if (max > Integer.MAX_VALUE) {
- throw new IllegalArgumentException(
- sm.getString("wsWebSocketContainer.maxBuffer"));
- }
- maxBinaryMessageBufferSize = (int) max;
+ public void setDefaultMaxBinaryMessageBufferSize(int max) {
+ maxBinaryMessageBufferSize = max;
}
@Override
- public long getMaxTextMessageBufferSize() {
+ public int getDefaultMaxTextMessageBufferSize() {
return maxTextMessageBufferSize;
}
@Override
- public void setMaxTextMessageBufferSize(long max) {
- if (max > Integer.MAX_VALUE) {
- throw new IllegalArgumentException(
- sm.getString("wsWebSocketContainer.maxBuffer"));
- }
- maxTextMessageBufferSize = (int) max;
+ public void setDefaultMaxTextMessageBufferSize(int max) {
+ maxTextMessageBufferSize = max;
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/ServerContainerImpl.java Mon Feb 11 14:57:27 2013
@@ -100,13 +100,13 @@ public class ServerContainerImpl extends
String value = servletContext.getInitParameter(
Constants.BINARY_BUFFER_SIZE_SERVLET_CONTEXT_INIT_PARAM);
if (value != null) {
- setMaxBinaryMessageBufferSize(Long.parseLong(value));
+ setDefaultMaxBinaryMessageBufferSize(Integer.parseInt(value));
}
value = servletContext.getInitParameter(
Constants.TEXT_BUFFER_SIZE_SERVLET_CONTEXT_INIT_PARAM);
if (value != null) {
- setMaxTextMessageBufferSize(Long.parseLong(value));
+ setDefaultMaxTextMessageBufferSize(Integer.parseInt(value));
}
// Update the timeout thread name
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java Mon Feb 11 14:57:27 2013
@@ -88,8 +88,8 @@ public class WsProtocolHandler implement
ep, wsRemoteEndpointServer, webSocketContainer);
WsFrameServer wsFrame = new WsFrameServer(
sis,
- (int) webSocketContainer.getMaxBinaryMessageBufferSize(),
- (int) webSocketContainer.getMaxTextMessageBufferSize(),
+ webSocketContainer.getDefaultMaxBinaryMessageBufferSize(),
+ webSocketContainer.getDefaultMaxTextMessageBufferSize(),
wsSession);
sis.setReadListener(new WsReadListener(this, wsFrame));
sos.setWriteListener(
Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsRemoteEndpoint.java Mon Feb 11 14:57:27 2013
@@ -60,7 +60,7 @@ public class TestWsRemoteEndpoint extend
ctx.addApplicationListener(TesterEchoServer.Config.class.getName());
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
tomcat.start();
Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1444808&r1=1444807&r2=1444808&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Mon Feb 11 14:57:27 2013
@@ -80,7 +80,7 @@ public class TestWsWebSocketContainer ex
tomcat.start();
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
Session wsSession = wsContainer.connectToServer(TesterEndpoint.class,
new DefaultClientConfiguration(), new URI("http://localhost:" +
getPort() + TesterEchoServer.Config.PATH_ASYNC));
@@ -110,7 +110,7 @@ public class TestWsWebSocketContainer ex
tomcat.start();
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
wsContainer.connectToServer(TesterEndpoint.class,
new DefaultClientConfiguration(), new URI("ftp://localhost:" +
getPort() + TesterEchoServer.Config.PATH_ASYNC));
@@ -128,7 +128,7 @@ public class TestWsWebSocketContainer ex
tomcat.start();
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
wsContainer.connectToServer(TesterEndpoint.class,
new DefaultClientConfiguration(),
new URI("http://" + TesterEchoServer.Config.PATH_ASYNC));
@@ -193,7 +193,7 @@ public class TestWsWebSocketContainer ex
ctx.addApplicationListener(TesterEchoServer.Config.class.getName());
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
if (isServerBuffer) {
if (isTextBuffer) {
@@ -209,9 +209,9 @@ public class TestWsWebSocketContainer ex
}
} else {
if (isTextBuffer) {
- wsContainer.setMaxTextMessageBufferSize(1024);
+ wsContainer.setDefaultMaxTextMessageBufferSize(1024);
} else {
- wsContainer.setMaxBinaryMessageBufferSize(1024);
+ wsContainer.setDefaultMaxBinaryMessageBufferSize(1024);
}
}
@@ -277,7 +277,7 @@ public class TestWsWebSocketContainer ex
ctx.addApplicationListener(BlockingConfig.class.getName());
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
// Set the async timeout
if (setTimeoutOnContainer) {
@@ -365,7 +365,7 @@ public class TestWsWebSocketContainer ex
ctx.addApplicationListener(ConstantTxConfig.class.getName());
WebSocketContainer wsContainer =
- ContainerProvider.createClientContainer();
+ ContainerProvider.getWebSocketContainer();
tomcat.start();
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org