[jbossweb-commits] JBossWeb SVN: r2295 - branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server.

jbossweb-commits at lists.jboss.org jbossweb-commits at lists.jboss.org
Mon Oct 28 09:12:02 EDT 2013


Author: remy.maucherat at jboss.com
Date: 2013-10-28 09:12:01 -0400 (Mon, 28 Oct 2013)
New Revision: 2295

Added:
   branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/WsPerSessionServerEndpointConfig.java
Modified:
   branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
Log:
Port patch adding per session view of user properties.

Modified: branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/UpgradeUtil.java
===================================================================
--- branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/UpgradeUtil.java	2013-10-25 20:46:37 UTC (rev 2294)
+++ branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/UpgradeUtil.java	2013-10-28 13:12:01 UTC (rev 2295)
@@ -164,7 +164,10 @@
 
         WsHandshakeRequest wsRequest = new WsHandshakeRequest(req);
         WsHandshakeResponse wsResponse = new WsHandshakeResponse();
-        sec.getConfigurator().modifyHandshake(sec, wsRequest, wsResponse);
+        WsPerSessionServerEndpointConfig perSessionServerEndpointConfig =
+                new WsPerSessionServerEndpointConfig(sec);
+        sec.getConfigurator().modifyHandshake(perSessionServerEndpointConfig,
+                wsRequest, wsResponse);
         wsRequest.finished();
 
         // Add any additional headers
@@ -184,8 +187,8 @@
         if (inner instanceof RequestFacade) {
             WsHttpUpgradeHandler wsHandler =
                     ((RequestFacade) inner).upgrade(WsHttpUpgradeHandler.class);
-            wsHandler.preInit(ep, sec, sc, wsRequest, subProtocol,
-                    pathParams, req.isSecure());
+            wsHandler.preInit(ep, perSessionServerEndpointConfig, sc, wsRequest,
+                    subProtocol, pathParams, req.isSecure());
         } else {
             throw new ServletException(MESSAGES.upgradeFailed());
         }

Added: branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/WsPerSessionServerEndpointConfig.java
===================================================================
--- branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/WsPerSessionServerEndpointConfig.java	                        (rev 0)
+++ branches/7.4.x/src/main/java/org/apache/tomcat/websocket/server/WsPerSessionServerEndpointConfig.java	2013-10-28 13:12:01 UTC (rev 2295)
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomcat.websocket.server;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.websocket.Decoder;
+import javax.websocket.Encoder;
+import javax.websocket.Extension;
+import javax.websocket.server.ServerEndpointConfig;
+
+/**
+ * Wraps the provided {@link ServerEndpointConfig} and provides a per session
+ * view - the difference being that the map returned by {@link
+ * #getUserProperties()} is unique to this instance rather than shared with the
+ * wrapped {@link ServerEndpointConfig}.
+ */
+class WsPerSessionServerEndpointConfig implements ServerEndpointConfig {
+
+    private final ServerEndpointConfig perEndpointConfig;
+    private final Map<String,Object> perSessionUserProperties =
+            new ConcurrentHashMap<String,Object>();
+
+    WsPerSessionServerEndpointConfig(ServerEndpointConfig perEndpointConfig) {
+        this.perEndpointConfig = perEndpointConfig;
+        perSessionUserProperties.putAll(perEndpointConfig.getUserProperties());
+    }
+
+    @Override
+    public List<Class<? extends Encoder>> getEncoders() {
+        return perEndpointConfig.getEncoders();
+    }
+
+    @Override
+    public List<Class<? extends Decoder>> getDecoders() {
+        return perEndpointConfig.getDecoders();
+    }
+
+    @Override
+    public Map<String,Object> getUserProperties() {
+        return perSessionUserProperties;
+    }
+
+    @Override
+    public Class<?> getEndpointClass() {
+        return perEndpointConfig.getEndpointClass();
+    }
+
+    @Override
+    public String getPath() {
+        return perEndpointConfig.getPath();
+    }
+
+    @Override
+    public List<String> getSubprotocols() {
+        return perEndpointConfig.getSubprotocols();
+    }
+
+    @Override
+    public List<Extension> getExtensions() {
+        return perEndpointConfig.getExtensions();
+    }
+
+    @Override
+    public Configurator getConfigurator() {
+        return perEndpointConfig.getConfigurator();
+    }
+}



More information about the jbossweb-commits mailing list