Author: markt
Date: Mon Jun 24 20:30:04 2013
New Revision: 1496200
URL: http://svn.apache.org/r1496200
Log:
Clients need to send extension information
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/Constants.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=1496200&r1=1496199&r2=1496200&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java Mon Jun 24
20:30:04 2013
@@ -50,6 +50,8 @@ public class Constants {
public static final String WS_KEY_HEADER_NAME = "Sec-WebSocket-Key";
public static final String WS_PROTOCOL_HEADER_NAME =
"Sec-WebSocket-Protocol";
+ public static final String WS_EXTENSIONS_HEADER_NAME =
+ "Sec-WebSocket-Extensions";
private Constants() {
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=1496200&r1=1496199&r2=1496200&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Mon
Jun 24 20:30:04 2013
@@ -250,7 +250,8 @@ public class WsWebSocketContainer
}
int port = path.getPort();
Map<String,List<String>> reqHeaders = createRequestHeaders(host, port,
- clientEndpointConfiguration.getPreferredSubprotocols());
+ clientEndpointConfiguration.getPreferredSubprotocols(),
+ clientEndpointConfiguration.getExtensions());
clientEndpointConfiguration.getConfigurator().
beforeRequest(reqHeaders);
@@ -408,7 +409,7 @@ public class WsWebSocketContainer
}
private Map<String,List<String>> createRequestHeaders(String host,
- int port, List<String> subProtocols) {
+ int port, List<String> subProtocols, List<Extension> extensions) {
Map<String,List<String>> headers = new HashMap<>();
@@ -446,10 +447,36 @@ public class WsWebSocketContainer
if (subProtocols != null && subProtocols.size() > 0) {
headers.put(Constants.WS_PROTOCOL_HEADER_NAME, subProtocols);
}
+
+ // WebSocket extensions
+ if (extensions != null && extensions.size() > 0) {
+ headers.put(Constants.WS_EXTENSIONS_HEADER_NAME,
+ generateExtensionHeaders(extensions));
+ }
+
return headers;
}
+ private List<String> generateExtensionHeaders(List<Extension> extensions) {
+ List<String> result = new ArrayList<>(extensions.size());
+ for (Extension extension : extensions) {
+ StringBuilder header = new StringBuilder();
+ header.append(extension.getName());
+ for (Extension.Parameter param : extension.getParameters()) {
+ header.append(';');
+ header.append(param.getName());
+ String value = param.getValue();
+ if (value != null && value.length() > 0) {
+ header.append('=');
+ header.append(value);
+ }
+ }
+ }
+ return result;
+ }
+
+
private String generateWsKeyValue() {
byte[] keyBytes = new byte[16];
random.nextBytes(keyBytes);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]