Author: remm
Date: Fri Nov 28 20:33:20 2014
New Revision: 1642360

URL: http://svn.apache.org/r1642360
Log:
- Use the extensions specified by the configuration (and ignore if there are no 
associated transformations).
- Add an origin header on the client.
- Add path params as params too.
- Use the case insensitive map for all headers.

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/WsWebSocketContainer.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHandshakeRequest.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=1642360&r1=1642359&r2=1642360&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Constants.java Fri Nov 28 
20:33:20 2014
@@ -49,6 +49,7 @@ public class Constants {
     public static final String HOST_HEADER_NAME = "Host";
     public static final String UPGRADE_HEADER_NAME = "Upgrade";
     public static final String UPGRADE_HEADER_VALUE = "websocket";
+    public static final String ORIGIN_HEADER_NAME = "Origin";
     public static final String CONNECTION_HEADER_NAME = "Connection";
     public static final String CONNECTION_HEADER_VALUE = "upgrade";
     public static final String WS_VERSION_HEADER_NAME = 
"Sec-WebSocket-Version";

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=1642360&r1=1642359&r2=1642360&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Fri 
Nov 28 20:33:20 2014
@@ -35,8 +35,6 @@ 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=1642360&r1=1642359&r2=1642360&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/TransformationFactory.java 
Fri Nov 28 20:33:20 2014
@@ -20,12 +20,8 @@ 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() {
@@ -41,7 +37,6 @@ public class TransformationFactory {
         if (PerMessageDeflate.NAME.equals(name)) {
             return PerMessageDeflate.negotiate(preferences, isServer);
         }
-        throw new IllegalArgumentException(
-                sm.getString("transformerFactory.unsupportedExtension", name));
+        return null;
     }
 }

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=1642360&r1=1642359&r2=1642360&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Fri 
Nov 28 20:33:20 2014
@@ -218,7 +218,7 @@ public class WsWebSocketContainer
                     sm.getString("wsWebSocketContainer.pathNoHost"));
         }
         int port = path.getPort();
-        Map<String,List<String>> reqHeaders = createRequestHeaders(host, port,
+        Map<String,List<String>> reqHeaders = createRequestHeaders(path, host, 
port,
                 clientEndpointConfiguration.getPreferredSubprotocols(),
                 clientEndpointConfiguration.getExtensions());
         clientEndpointConfiguration.getConfigurator().
@@ -430,7 +430,7 @@ public class WsWebSocketContainer
         return result;
     }
 
-    private Map<String,List<String>> createRequestHeaders(String host,
+    private Map<String,List<String>> createRequestHeaders(URI path, String 
host,
             int port, List<String> subProtocols, List<Extension> extensions) {
 
         Map<String,List<String>> headers = new HashMap<>();
@@ -476,6 +476,11 @@ public class WsWebSocketContainer
                     generateExtensionHeaders(extensions));
         }
 
+        // Origin header
+        List<String> originValues = new ArrayList<>(1);
+        originValues.add(path.toString());
+        headers.put(Constants.ORIGIN_HEADER_NAME, originValues);
+
         return headers;
     }
 
@@ -571,7 +576,7 @@ public class WsWebSocketContainer
             ExecutionException, DeploymentException, EOFException,
             TimeoutException {
 
-        Map<String,List<String>> headers = new HashMap<>();
+        Map<String,List<String>> headers = new CaseInsensitiveKeyMap<>();
 
         boolean readStatus = false;
         boolean readHeaders = false;
@@ -606,7 +611,7 @@ public class WsWebSocketContainer
                 }
             }
         }
-
+System.out.println("Headers: " + headers);
         return new WsHandshakeResponse(headers);
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/UpgradeUtil.java?rev=1642360&r1=1642359&r2=1642360&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/UpgradeUtil.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/UpgradeUtil.java Fri 
Nov 28 20:33:20 2014
@@ -112,7 +112,7 @@ public class UpgradeUtil {
 
 
         // Origin check
-        String origin = req.getHeader("Origin");
+        String origin = req.getHeader(Constants.ORIGIN_HEADER_NAME);
         if (!sec.getConfigurator().checkOrigin(origin)) {
             resp.sendError(HttpServletResponse.SC_FORBIDDEN);
             return;
@@ -134,8 +134,16 @@ public class UpgradeUtil {
         // Negotiation phase 1. By default this simply filters out the
         // extensions that the server does not support but applications could
         // use a custom configurator to do more than this.
+        List<Extension> installedExtensions = null;
+        if (sec.getExtensions().size() == 0) {
+            installedExtensions = Constants.INSTALLED_EXTENSIONS;
+        } else {
+            installedExtensions = new ArrayList<>();
+            installedExtensions.addAll(sec.getExtensions());
+            installedExtensions.addAll(Constants.INSTALLED_EXTENSIONS);
+        }
         List<Extension> negotiatedExtensionsPhase1 = 
sec.getConfigurator().getNegotiatedExtensions(
-                Constants.INSTALLED_EXTENSIONS, extensionsRequested);
+                installedExtensions, extensionsRequested);
 
         // Negotiation phase 2. Create the Transformations that will be applied
         // to this connection. Note than an extension may be dropped at this
@@ -191,7 +199,7 @@ public class UpgradeUtil {
             resp.setHeader(Constants.WS_EXTENSIONS_HEADER_NAME, 
responseHeaderExtensions.toString());
         }
 
-        WsHandshakeRequest wsRequest = new WsHandshakeRequest(req);
+        WsHandshakeRequest wsRequest = new WsHandshakeRequest(req, pathParams);
         WsHandshakeResponse wsResponse = new WsHandshakeResponse();
         WsPerSessionServerEndpointConfig perSessionServerEndpointConfig =
                 new WsPerSessionServerEndpointConfig(sec);

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHandshakeRequest.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHandshakeRequest.java?rev=1642360&r1=1642359&r2=1642360&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHandshakeRequest.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHandshakeRequest.java 
Fri Nov 28 20:33:20 2014
@@ -30,6 +30,8 @@ import java.util.Map.Entry;
 import javax.servlet.http.HttpServletRequest;
 import javax.websocket.server.HandshakeRequest;
 
+import org.apache.tomcat.websocket.CaseInsensitiveKeyMap;
+
 /**
  * Represents the request that this session was opened under.
  */
@@ -45,7 +47,7 @@ public class WsHandshakeRequest implemen
     private volatile HttpServletRequest request;
 
 
-    public WsHandshakeRequest(HttpServletRequest request) {
+    public WsHandshakeRequest(HttpServletRequest request, Map<String,String> 
pathParams) {
 
         this.request = request;
 
@@ -74,10 +76,15 @@ public class WsHandshakeRequest implemen
                     Collections.unmodifiableList(
                             Arrays.asList(entry.getValue())));
         }
+        for (String pathName : pathParams.keySet()) {
+            newParameters.put(pathName,
+                    Collections.unmodifiableList(
+                            Arrays.asList(pathParams.get(pathName))));
+        }
         parameterMap = Collections.unmodifiableMap(newParameters);
 
         // Headers
-        Map<String,List<String>> newHeaders = new HashMap<>();
+        Map<String,List<String>> newHeaders = new CaseInsensitiveKeyMap<>();
 
         Enumeration<String> headerNames = request.getHeaderNames();
         while (headerNames.hasMoreElements()) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to