Author: remm
Date: Fri Dec 5 08:42:50 2014
New Revision: 1643194
URL: http://svn.apache.org/viewvc?rev=1643194&view=rev
Log:
Add configuration options for extensions, the origin header, periodic check and
buffer size. This restores the previous behavior, but adds some flexibility.
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java
tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java
tomcat/trunk/java/org/apache/tomcat/websocket/Util.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
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=1643194&r1=1643193&r2=1643194&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java Fri Dec 5
08:42:50 2014
@@ -43,7 +43,8 @@ public class Constants {
static final byte INTERNAL_OPCODE_FLUSH = 0x18;
// Buffers
- static final int DEFAULT_BUFFER_SIZE = 8 * 1024;
+ static final int DEFAULT_BUFFER_SIZE =
+
Integer.getInteger("org.apache.tomcat.websocket.DEFAULT_BUFFER_SIZE", 8 * 1024);
// Client connection
public static final String HOST_HEADER_NAME = "Host";
@@ -60,6 +61,24 @@ public class Constants {
public static final String WS_EXTENSIONS_HEADER_NAME =
"Sec-WebSocket-Extensions";
+ // Configuration for Origin header in client
+ static final boolean ALWAYS_ADD_ORIGIN_HEADER =
+
Boolean.getBoolean("org.apache.tomcat.websocket.ALWAYS_ADD_ORIGIN_HEADER");
+ static final boolean SET_TARGET_AS_ORIGIN_HEADER =
+
Boolean.getBoolean("org.apache.tomcat.websocket.SET_TARGET_AS_ORIGIN_HEADER");
+ static final String DEFAULT_ORIGIN_HEADER_VALUE =
+
System.getProperty("org.apache.tomcat.websocket.DEFAULT_ORIGIN_HEADER_VALUE",
"null");
+
+ // Configuration for background processing checks intervals
+ static final int DEFAULT_PROCESS_PERIOD =
+
Integer.getInteger("org.apache.tomcat.websocket.DEFAULT_PROCESS_PERIOD", 10);
+
+ // Configuration for extensions
+ static final boolean DISABLE_BUILTIN_EXTENSIONS =
+
Boolean.getBoolean("org.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS");
+ static final boolean ALLOW_UNSUPPORTED_EXTENSIONS =
+
Boolean.getBoolean("org.apache.tomcat.websocket.ALLOW_UNSUPPORTED_EXTENSIONS");
+
public static final boolean STRICT_SPEC_COMPLIANCE =
Boolean.getBoolean(
"org.apache.tomcat.websocket.STRICT_SPEC_COMPLIANCE");
@@ -67,9 +86,13 @@ public class Constants {
public static final List<Extension> INSTALLED_EXTENSIONS;
static {
- List<Extension> installed = new ArrayList<>(1);
- installed.add(new WsExtension("permessage-deflate"));
- INSTALLED_EXTENSIONS = Collections.unmodifiableList(installed);
+ if (DISABLE_BUILTIN_EXTENSIONS) {
+ INSTALLED_EXTENSIONS = Collections.unmodifiableList(new
ArrayList<Extension>());
+ } else {
+ List<Extension> installed = new ArrayList<>(1);
+ installed.add(new WsExtension("permessage-deflate"));
+ INSTALLED_EXTENSIONS = Collections.unmodifiableList(installed);
+ }
}
private Constants() {
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties?rev=1643194&r1=1643193&r2=1643194&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Fri
Dec 5 08:42:50 2014
@@ -35,6 +35,8 @@ perMessageDeflate.duplicateParameter=Dup
perMessageDeflate.invalidWindowSize=An invalid windows of [{1}] size was
specified for [{0}]. Valid values are whole numbers from 8 to 15 inclusive.
perMessageDeflate.unknownParameter=An unknown extension parameter [{0}] was
defined
+transformerFactory.unsupportedExtension=The extension [{0}] is not supported
+
util.notToken=An illegal extension parameter was specified with name [{0}] and
value [{1}]
util.invalidMessageHandler=The message handler provided does not have an
onMessage(Object) method
util.invalidType=Unable to coerce value [{0}] to type [{1}]. That type is not
supported.
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java?rev=1643194&r1=1643193&r2=1643194&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java
Fri Dec 5 08:42:50 2014
@@ -20,8 +20,12 @@ import java.util.List;
import javax.websocket.Extension;
+import org.apache.tomcat.util.res.StringManager;
+
public class TransformationFactory {
+ private static final StringManager sm =
StringManager.getManager(Constants.PACKAGE_NAME);
+
private static final TransformationFactory factory = new
TransformationFactory();
private TransformationFactory() {
@@ -37,6 +41,11 @@ public class TransformationFactory {
if (PerMessageDeflate.NAME.equals(name)) {
return PerMessageDeflate.negotiate(preferences, isServer);
}
- return null;
+ if (Constants.ALLOW_UNSUPPORTED_EXTENSIONS) {
+ return null;
+ } else {
+ throw new IllegalArgumentException(
+ sm.getString("transformerFactory.unsupportedExtension",
name));
+ }
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Util.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Util.java?rev=1643194&r1=1643193&r2=1643194&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Util.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Util.java Fri Dec 5 08:42:50
2014
@@ -308,8 +308,7 @@ public class Util {
return Boolean.valueOf(value);
} else if (type.equals(byte.class) || type.equals(Byte.class)) {
return Byte.valueOf(value);
- } else if (value.length() == 1 &&
- (type.equals(char.class) || type.equals(Character.class))) {
+ } else if (type.equals(char.class) || type.equals(Character.class)) {
return Character.valueOf(value.charAt(0));
} else if (type.equals(double.class) || type.equals(Double.class)) {
return Double.valueOf(value);
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=1643194&r1=1643193&r2=1643194&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri
Dec 5 08:42:50 2014
@@ -119,7 +119,7 @@ public class WsWebSocketContainer
private int maxTextMessageBufferSize = Constants.DEFAULT_BUFFER_SIZE;
private volatile long defaultMaxSessionIdleTimeout = 0;
private int backgroundProcessCount = 0;
- private int processPeriod = 10;
+ private int processPeriod = Constants.DEFAULT_PROCESS_PERIOD;
@Override
@@ -242,6 +242,23 @@ public class WsWebSocketContainer
sa = new InetSocketAddress(host, port);
}
+ // Origin header
+ if (Constants.ALWAYS_ADD_ORIGIN_HEADER &&
+ !reqHeaders.containsKey(Constants.ORIGIN_HEADER_NAME)) {
+ List<String> originValues = new ArrayList<>(1);
+ if (Constants.SET_TARGET_AS_ORIGIN_HEADER) {
+ StringBuilder originValue = new StringBuilder();
+ originValue.append(path.getHost());
+ if (port != -1) {
+ originValue.append(':').append(port);
+ }
+ originValues.add(originValue.toString());
+ } else {
+ originValues.add(Constants.DEFAULT_ORIGIN_HEADER_VALUE);
+ }
+ reqHeaders.put(Constants.ORIGIN_HEADER_NAME, originValues);
+ }
+
ByteBuffer request = createRequest(path, reqHeaders);
AsynchronousSocketChannel socketChannel;
@@ -838,7 +855,6 @@ public class WsWebSocketContainer
public void backgroundProcess() {
// This method gets called once a second.
backgroundProcessCount ++;
-
if (backgroundProcessCount >= processPeriod) {
backgroundProcessCount = 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]