You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/12/16 19:35:07 UTC
svn commit: r1551300 - in /tomcat/trunk:
java/org/apache/tomcat/websocket/pojo/ test/org/apache/tomcat/websocket/
Author: markt
Date: Mon Dec 16 18:35:06 2013
New Revision: 1551300
URL: http://svn.apache.org/r1551300
Log:
Need to handle case where message size limits are larger than the default buffer size. (Limits smaller than the buffer size were handled correctly.)
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java?rev=1551300&r1=1551299&r2=1551300&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java Mon Dec 16 18:35:06 2013
@@ -52,6 +52,15 @@ public class PojoMessageHandlerWholeBina
boolean isForInputStream, long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
indexSession, maxMessageSize);
+
+ // Update binary text size handled by session
+ if (maxMessageSize > -1 && maxMessageSize > session.getMaxBinaryMessageBufferSize()) {
+ if (maxMessageSize > Integer.MAX_VALUE) {
+ // IAE
+ }
+ session.setMaxBinaryMessageBufferSize((int) maxMessageSize);
+ }
+
try {
if (decoderClazzes != null) {
for (Class<? extends Decoder> decoderClazz : decoderClazzes) {
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java?rev=1551300&r1=1551299&r2=1551300&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java Mon Dec 16 18:35:06 2013
@@ -53,6 +53,14 @@ public class PojoMessageHandlerWholeText
super(pojo, method, session, params, indexPayload, convert,
indexSession, maxMessageSize);
+ // Update max text size handled by session
+ if (maxMessageSize > -1 && maxMessageSize > session.getMaxTextMessageBufferSize()) {
+ if (maxMessageSize > Integer.MAX_VALUE) {
+ // IAE
+ }
+ session.setMaxTextMessageBufferSize((int) maxMessageSize);
+ }
+
// Check for primitives
Class<?> type = method.getParameterTypes()[indexPayload];
if (Util.isPrimitive(type)) {
Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java?rev=1551300&r1=1551299&r2=1551300&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java Mon Dec 16 18:35:06 2013
@@ -822,23 +822,47 @@ public class TestWsWebSocketContainer ex
@Test
public void testMaxMessageSize01() throws Exception {
- doMaxMessageSize(TesterEchoServer.BasicLimit.MAX_SIZE - 1, true);
+ doMaxMessageSize(TesterEchoServer.Config.PATH_BASIC_LIMIT_LOW,
+ TesterEchoServer.BasicLimitLow.MAX_SIZE - 1, true);
}
@Test
public void testMaxMessageSize02() throws Exception {
- doMaxMessageSize(TesterEchoServer.BasicLimit.MAX_SIZE, true);
+ doMaxMessageSize(TesterEchoServer.Config.PATH_BASIC_LIMIT_LOW,
+ TesterEchoServer.BasicLimitLow.MAX_SIZE, true);
}
@Test
public void testMaxMessageSize03() throws Exception {
- doMaxMessageSize(TesterEchoServer.BasicLimit.MAX_SIZE + 1, false);
+ doMaxMessageSize(TesterEchoServer.Config.PATH_BASIC_LIMIT_LOW,
+ TesterEchoServer.BasicLimitLow.MAX_SIZE + 1, false);
}
- private void doMaxMessageSize(long size, boolean expectOpen)
+ @Test
+ public void testMaxMessageSize04() throws Exception {
+ doMaxMessageSize(TesterEchoServer.Config.PATH_BASIC_LIMIT_HIGH,
+ TesterEchoServer.BasicLimitHigh.MAX_SIZE - 1, true);
+ }
+
+
+ @Test
+ public void testMaxMessageSize05() throws Exception {
+ doMaxMessageSize(TesterEchoServer.Config.PATH_BASIC_LIMIT_HIGH,
+ TesterEchoServer.BasicLimitHigh.MAX_SIZE, true);
+ }
+
+
+ @Test
+ public void testMaxMessageSize06() throws Exception {
+ doMaxMessageSize(TesterEchoServer.Config.PATH_BASIC_LIMIT_HIGH,
+ TesterEchoServer.BasicLimitHigh.MAX_SIZE + 1, false);
+ }
+
+
+ private void doMaxMessageSize(String path, long size, boolean expectOpen)
throws Exception {
Tomcat tomcat = getTomcatInstance();
@@ -855,8 +879,7 @@ public class TestWsWebSocketContainer ex
WebSocketContainer wsContainer =
ContainerProvider.getWebSocketContainer();
- Session s = connectToEchoServer(wsContainer, EndpointA.class,
- TesterEchoServer.Config.PATH_BASIC_LIMIT);
+ Session s = connectToEchoServer(wsContainer, EndpointA.class, path);
StringBuilder msg = new StringBuilder();
for (long i = 0; i < size; i++) {
Modified: tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java?rev=1551300&r1=1551299&r2=1551300&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TesterEchoServer.java Mon Dec 16 18:35:06 2013
@@ -35,7 +35,8 @@ public class TesterEchoServer {
public static final String PATH_ASYNC = "/echoAsync";
public static final String PATH_BASIC = "/echoBasic";
- public static final String PATH_BASIC_LIMIT = "/echoBasicLimit";
+ public static final String PATH_BASIC_LIMIT_LOW = "/echoBasicLimitLow";
+ public static final String PATH_BASIC_LIMIT_HIGH = "/echoBasicLimitHigh";
@Override
public void contextInitialized(ServletContextEvent sce) {
@@ -46,7 +47,8 @@ public class TesterEchoServer {
try {
sc.addEndpoint(Async.class);
sc.addEndpoint(Basic.class);
- sc.addEndpoint(BasicLimit.class);
+ sc.addEndpoint(BasicLimitLow.class);
+ sc.addEndpoint(BasicLimitHigh.class);
} catch (DeploymentException e) {
throw new IllegalStateException(e);
}
@@ -117,8 +119,8 @@ public class TesterEchoServer {
}
- @ServerEndpoint("/echoBasicLimit")
- public static class BasicLimit {
+ @ServerEndpoint("/echoBasicLimitLow")
+ public static class BasicLimitLow {
public static final long MAX_SIZE = 10;
@@ -149,4 +151,39 @@ public class TesterEchoServer {
}
}
}
+
+
+ @ServerEndpoint("/echoBasicLimitHigh")
+ public static class BasicLimitHigh {
+
+ public static final long MAX_SIZE = 32 * 1024;
+
+ @OnMessage(maxMessageSize = MAX_SIZE)
+ public void echoTextMessage(Session session, String msg) {
+ try {
+ session.getBasicRemote().sendText(msg);
+ } catch (IOException e) {
+ try {
+ session.close();
+ } catch (IOException e1) {
+ // Ignore
+ }
+ }
+ }
+
+
+ @OnMessage(maxMessageSize = MAX_SIZE)
+ public void echoBinaryMessage(Session session, ByteBuffer msg) {
+ try {
+ session.getBasicRemote().sendBinary(msg);
+ } catch (IOException e) {
+ try {
+ session.close();
+ } catch (IOException e1) {
+ // Ignore
+ }
+ }
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org