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: [email protected]
For additional commands, e-mail: [email protected]