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/07/31 16:17:09 UTC

svn commit: r1508872 - in /tomcat/trunk: java/org/apache/tomcat/websocket/ java/org/apache/tomcat/websocket/server/ webapps/docs/ webapps/docs/config/

Author: markt
Date: Wed Jul 31 14:17:08 2013
New Revision: 1508872

URL: http://svn.apache.org/r1508872
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55314
Provide a configuration option to bypass the specification restriction on not being able to add endpoints prgrammatically once the first endpoint has started a handshake.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/Constants.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
    tomcat/trunk/webapps/docs/config/systemprops.xml
    tomcat/trunk/webapps/docs/web-socket-howto.xml

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java?rev=1508872&r1=1508871&r2=1508872&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java Wed Jul 31 14:17:08 2013
@@ -57,6 +57,9 @@ public class Constants {
     public static final String WS_EXTENSIONS_HEADER_NAME =
             "Sec-WebSocket-Extensions";
 
+    public static final boolean STRICT_SPEC_COMPLIANCE =
+            Boolean.getBoolean(
+                    "org.apache.tomcat.websocket.STRICT_SPEC_COMPLIANCE");
 
     private Constants() {
         // Hide default constructor

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/Constants.java?rev=1508872&r1=1508871&r2=1508872&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/Constants.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/Constants.java Wed Jul 31 14:17:08 2013
@@ -28,6 +28,8 @@ public class Constants {
             "org.apache.tomcat.websocket.binaryBufferSize";
     public static final String TEXT_BUFFER_SIZE_SERVLET_CONTEXT_INIT_PARAM =
             "org.apache.tomcat.websocket.textBufferSize";
+    public static final String ENFORCE_NO_ADD_AFTER_HANDSHAKE_CONTEXT_INIT_PARAM =
+            "org.apache.tomcat.websocket.noAddAfterHandshake";
 
     public static final String SERVER_CONTAINER_SERVLET_CONTEXT_ATTRIBUTE =
             "javax.websocket.server.ServerContainer";

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java?rev=1508872&r1=1508871&r2=1508872&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServerContainer.java Wed Jul 31 14:17:08 2013
@@ -73,6 +73,8 @@ public class WsServerContainer extends W
             new ConcurrentHashMap<>();
     private final ConcurrentHashMap<Integer,SortedSet<TemplatePathMatch>>
             configTemplateMatchMap = new ConcurrentHashMap<>();
+    private volatile boolean enforceNoAddAfterHandshake =
+            org.apache.tomcat.websocket.Constants.STRICT_SPEC_COMPLIANCE;
     private volatile boolean addAllowed = true;
     private final ConcurrentHashMap<String,Set<WsSession>> authenticatedSessions =
             new ConcurrentHashMap<>();
@@ -94,6 +96,12 @@ public class WsServerContainer extends W
             setDefaultMaxTextMessageBufferSize(Integer.parseInt(value));
         }
 
+        value = servletContext.getInitParameter(
+                Constants.ENFORCE_NO_ADD_AFTER_HANDSHAKE_CONTEXT_INIT_PARAM);
+        if (value != null) {
+            setEnforceNoAddAfterHandshake(Boolean.parseBoolean(value));
+        }
+
         FilterRegistration fr = servletContext.addFilter(
                 WsFilter.class.getName(), new WsFilter(this));
 
@@ -116,7 +124,7 @@ public class WsServerContainer extends W
     public void addEndpoint(ServerEndpointConfig sec)
             throws DeploymentException {
 
-        if (!addAllowed) {
+        if (enforceNoAddAfterHandshake && !addAllowed) {
             throw new DeploymentException(
                     sm.getString("serverContainer.addNotAllowed"));
         }
@@ -272,6 +280,18 @@ public class WsServerContainer extends W
     }
 
 
+
+    public boolean isEnforceNoAddAfterHandshake() {
+        return enforceNoAddAfterHandshake;
+    }
+
+
+    public void setEnforceNoAddAfterHandshake(
+            boolean enforceNoAddAfterHandshake) {
+        this.enforceNoAddAfterHandshake = enforceNoAddAfterHandshake;
+    }
+
+
     protected WsWriteTimeout getTimeout() {
         return wsWriteTimeout;
     }

Modified: tomcat/trunk/webapps/docs/config/systemprops.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/systemprops.xml?rev=1508872&r1=1508871&r2=1508872&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/systemprops.xml (original)
+++ tomcat/trunk/webapps/docs/config/systemprops.xml Wed Jul 31 14:17:08 2013
@@ -272,7 +272,7 @@
 </section>
 
 
-<section name="Specification">
+<section name="Specifications">
 
   <properties>
 
@@ -341,6 +341,16 @@
       else the default value will be <code>false</code>.</p>
     </property>
 
+    <property name="org.apache.tomcat.websocket. STRICT_SPEC_COMPLIANCE">
+      <p>The default value of this system property is <code>false</code>.</p>
+      <p>If this is <code>true</code> the default values will be changed for:
+      <ul>
+        <li><code>org.apache.tomcat.websocket.server#isEnforceNoAddAfterHandshake</code>
+        (default changes from <code>false</code> to <code>true</code>)</li>
+      </ul>
+      </p>
+    </property>
+    
     <property
     name="org.apache.tomcat.util.http. ServerCookie.ALLOW_EQUALS_IN_VALUE">
       <p>If this is <code>true</code> Tomcat will allow '<code>=</code>'

Modified: tomcat/trunk/webapps/docs/web-socket-howto.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/web-socket-howto.xml?rev=1508872&r1=1508871&r2=1508872&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/web-socket-howto.xml (original)
+++ tomcat/trunk/webapps/docs/web-socket-howto.xml Wed Jul 31 14:17:08 2013
@@ -72,6 +72,15 @@
    parameter <code>org.apache.tomcat.websocket.textBufferSize</code> to the
    desired value in bytes.</p>
    
+<p>The Java WebSocket specification 1.0 does not permit programmatic deployment
+   after the first endpoint has started a WebSocket handshake. By default,
+   Tomcat continues to permit additional programmatic deployment. This
+   behavior is controlled by the
+   <code>org.apache.tomcat.websocket.noAddAfterHandshake</code> servlet context
+   initialization parameter. The default may be changed by setting the
+   <code>org.apache.tomcat.websocket.STRICT_SPEC_COMPLIANCE</code> system
+   property to <code>true</code> but any explict setting on the servlet context
+   will always take priority.</p>
 </section>
 
 </body>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org