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

Reply via email to