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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org