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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org