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