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