Author: markt
Date: Wed Jun 26 14:15:08 2013
New Revision: 1496942
URL: http://svn.apache.org/r1496942
Log:
Add message size limit support for message handlers
Added:
tomcat/trunk/java/org/apache/tomcat/websocket/WrappedMessageHandler.java
(with props)
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
tomcat/trunk/java/org/apache/tomcat/websocket/Util.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBinary.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialText.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
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=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/LocalStrings.properties Wed
Jun 26 14:15:08 2013
@@ -43,6 +43,7 @@ wsFrame.controlNoFin=A control frame was
wsFrame.invalidOpCode= A WebSocket frame was sent with an unrecognised opCode
of [{0}]
wsFrame.invalidUtf8=A WebSocket text frame was received that could not be
decoded to UTF-8 because it contained invalid byte sequences
wsFrame.invalidUtf8Close=A WebSocket close frame was received with a close
reason that contained invalid UTF-8 byte sequences
+wsFrame.messageTooBig=The message was [{0}] bytes long but the MessageHandler
has a limit of [{1}] bytes
wsFrame.noContinuation=A new message was started when a continuation frame was
expected
wsFrame.notMasked=The client frame was not masked but all client frames must
be masked
wsFrame.oneByteCloseCode=The client sent a close frame with a single byte
payload which is not valid
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/Util.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/Util.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/Util.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/Util.java Wed Jun 26 14:15:08
2013
@@ -343,7 +343,7 @@ public class Util {
new PojoMessageHandlerWholeBinary(listener,
getOnMessageMethod(listener), null,
endpointConfig, null, new Object[1], 0, true, -1,
- false),
+ false, -1),
MessageHandlerResultType.BINARY);
results.add(result);
} else if (InputStream.class.isAssignableFrom(target)) {
@@ -351,14 +351,15 @@ public class Util {
new PojoMessageHandlerWholeBinary(listener,
getOnMessageMethod(listener), null,
endpointConfig, null, new Object[1], 0, true, -1,
- true),
+ true, -1),
MessageHandlerResultType.BINARY);
results.add(result);
} else if (Reader.class.isAssignableFrom(target)) {
MessageHandlerResult result = new MessageHandlerResult(
new PojoMessageHandlerWholeText(listener,
getOnMessageMethod(listener), null,
- endpointConfig, null, new Object[1], 0, true, -1),
+ endpointConfig, null, new Object[1], 0, true, -1,
+ -1),
MessageHandlerResultType.BINARY);
results.add(result);
} else {
@@ -376,7 +377,7 @@ public class Util {
new PojoMessageHandlerWholeBinary(listener, m, null,
endpointConfig,
decoderMatch.getBinaryDecoders(), new
Object[1],
- 0, false, -1, false),
+ 0, false, -1, false, -1),
MessageHandlerResultType.BINARY);
results.add(result);
}
@@ -385,7 +386,7 @@ public class Util {
new PojoMessageHandlerWholeText(listener, m, null,
endpointConfig,
decoderMatch.getTextDecoders(), new Object[1],
- 0, false, -1),
+ 0, false, -1, -1),
MessageHandlerResultType.TEXT);
results.add(result);
}
Added: tomcat/trunk/java/org/apache/tomcat/websocket/WrappedMessageHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WrappedMessageHandler.java?rev=1496942&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WrappedMessageHandler.java
(added)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WrappedMessageHandler.java
Wed Jun 26 14:15:08 2013
@@ -0,0 +1,25 @@
+/*
+ * 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;
+
+import javax.websocket.MessageHandler;
+
+public interface WrappedMessageHandler {
+ long getMaxMessageSize();
+
+ MessageHandler getWrappedHandler();
+}
Propchange:
tomcat/trunk/java/org/apache/tomcat/websocket/WrappedMessageHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Wed Jun 26
14:15:08 2013
@@ -329,9 +329,21 @@ public abstract class WsFrameBase {
@SuppressWarnings("unchecked")
- private void sendMessageText(boolean last) {
+ private void sendMessageText(boolean last) throws WsIOException {
MessageHandler mh = wsSession.getTextMessageHandler();
if (mh != null) {
+ if (mh instanceof WrappedMessageHandler) {
+ long maxMessageSize =
+ ((WrappedMessageHandler) mh).getMaxMessageSize();
+ if (maxMessageSize > -1 &&
+ messageBufferText.remaining() > maxMessageSize) {
+ throw new WsIOException(new CloseReason(CloseCodes.TOO_BIG,
+ sm.getString("wsFrame.messageTooBig",
+
Long.valueOf(messageBufferText.remaining()),
+ Long.valueOf(maxMessageSize))));
+ }
+ }
+
if (mh instanceof MessageHandler.Partial<?>) {
((MessageHandler.Partial<String>) mh).onMessage(
messageBufferText.toString(), last);
@@ -494,9 +506,20 @@ public abstract class WsFrameBase {
@SuppressWarnings("unchecked")
- private void sendMessageBinary(ByteBuffer msg, boolean last) {
+ private void sendMessageBinary(ByteBuffer msg, boolean last)
+ throws WsIOException {
MessageHandler mh = wsSession.getBinaryMessageHandler();
if (mh != null) {
+ if (mh instanceof WrappedMessageHandler) {
+ long maxMessageSize =
+ ((WrappedMessageHandler) mh).getMaxMessageSize();
+ if (maxMessageSize > -1 && msg.remaining() > maxMessageSize) {
+ throw new WsIOException(new CloseReason(CloseCodes.TOO_BIG,
+ sm.getString("wsFrame.messageTooBig",
+ Long.valueOf(msg.remaining()),
+ Long.valueOf(maxMessageSize))));
+ }
+ }
if (mh instanceof MessageHandler.Partial<?>) {
((MessageHandler.Partial<ByteBuffer>) mh).onMessage(msg, last);
} else {
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Wed Jun 26
14:15:08 2013
@@ -44,7 +44,6 @@ import javax.websocket.WebSocketContaine
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.res.StringManager;
-import org.apache.tomcat.websocket.pojo.PojoMessageHandlerBase;
public class WsSession implements Session {
@@ -239,9 +238,8 @@ public class WsSession implements Sessio
MessageHandler wrapped = null;
- if (listener instanceof PojoMessageHandlerBase) {
- wrapped =
- ((PojoMessageHandlerBase<?>) listener).getWrappedHandler();
+ if (listener instanceof WrappedMessageHandler) {
+ wrapped = ((WrappedMessageHandler) listener).getWrappedHandler();
}
if (wrapped == null) {
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerBase.java
Wed Jun 26 14:15:08 2013
@@ -25,12 +25,15 @@ import javax.websocket.MessageHandler;
import javax.websocket.RemoteEndpoint;
import javax.websocket.Session;
+import org.apache.tomcat.websocket.WrappedMessageHandler;
+
/**
* Common implementation code for the POJO message handlers.
*
* @param <T> The type of message to handle
*/
-public abstract class PojoMessageHandlerBase<T> {
+public abstract class PojoMessageHandlerBase<T>
+ implements WrappedMessageHandler {
protected final Object pojo;
protected final Method method;
@@ -39,11 +42,11 @@ public abstract class PojoMessageHandler
protected final int indexPayload;
protected final boolean convert;
protected final int indexSession;
-
+ protected final long maxMessageSize;
public PojoMessageHandlerBase(Object pojo, Method method,
Session session, Object[] params, int indexPayload, boolean
convert,
- int indexSession) {
+ int indexSession, long maxMessageSize) {
this.pojo = pojo;
this.method = method;
this.session = session;
@@ -51,6 +54,7 @@ public abstract class PojoMessageHandler
this.indexPayload = indexPayload;
this.convert = convert;
this.indexSession = indexSession;
+ this.maxMessageSize = maxMessageSize;
}
@@ -81,11 +85,18 @@ public abstract class PojoMessageHandler
* match requests to remove handlers if the original handler has been
* wrapped.
*/
- public MessageHandler getWrappedHandler() {
+ @Override
+ public final MessageHandler getWrappedHandler() {
if (pojo instanceof MessageHandler) {
return (MessageHandler) pojo;
} else {
return null;
}
}
+
+
+ @Override
+ public final long getMaxMessageSize() {
+ return maxMessageSize;
+ }
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBase.java
Wed Jun 26 14:15:08 2013
@@ -39,9 +39,10 @@ public abstract class PojoMessageHandler
public PojoMessageHandlerPartialBase(Object pojo, Method method,
Session session, Object[] params, int indexPayload,
- boolean convert, int indexBoolean, int indexSession) {
+ boolean convert, int indexBoolean, int indexSession,
+ long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
- indexSession);
+ indexSession, maxMessageSize);
this.indexBoolean = indexBoolean;
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBinary.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBinary.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBinary.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialBinary.java
Wed Jun 26 14:15:08 2013
@@ -29,8 +29,8 @@ public class PojoMessageHandlerPartialBi
public PojoMessageHandlerPartialBinary(Object pojo, Method method,
Session session, Object[] params, int indexPayload, boolean
convert,
- int indexBoolean, int indexSession) {
+ int indexBoolean, int indexSession, long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
indexBoolean,
- indexSession);
+ indexSession, maxMessageSize);
}
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialText.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialText.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialText.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerPartialText.java
Wed Jun 26 14:15:08 2013
@@ -28,8 +28,8 @@ public class PojoMessageHandlerPartialTe
public PojoMessageHandlerPartialText(Object pojo, Method method,
Session session, Object[] params, int indexPayload, boolean
convert,
- int indexBoolean, int indexSession) {
+ int indexBoolean, int indexSession, long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
indexBoolean,
- indexSession);
+ indexSession, maxMessageSize);
}
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBase.java
Wed Jun 26 14:15:08 2013
@@ -36,9 +36,9 @@ public abstract class PojoMessageHandler
public PojoMessageHandlerWholeBase(Object pojo, Method method,
Session session, Object[] params, int indexPayload,
- boolean convert, int indexSession) {
+ boolean convert, int indexSession, long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
- indexSession);
+ indexSession, maxMessageSize);
}
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=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeBinary.java
Wed Jun 26 14:15:08 2013
@@ -49,9 +49,9 @@ public class PojoMessageHandlerWholeBina
Session session, EndpointConfig config,
List<Class<? extends Decoder>> decoderClazzes, Object[] params,
int indexPayload, boolean convert, int indexSession,
- boolean isForInputStream) {
+ boolean isForInputStream, long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
- indexSession);
+ indexSession, maxMessageSize);
try {
if (decoderClazzes != null) {
for (Class<? extends Decoder> decoderClazz : decoderClazzes) {
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholePong.java
Wed Jun 26 14:15:08 2013
@@ -30,7 +30,8 @@ public class PojoMessageHandlerWholePong
public PojoMessageHandlerWholePong(Object pojo, Method method,
Session session, Object[] params, int indexPayload, boolean
convert,
int indexSession) {
- super(pojo, method, session, params, indexPayload, convert,
indexSession);
+ super(pojo, method, session, params, indexPayload, convert,
+ indexSession, -1);
}
@Override
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=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMessageHandlerWholeText.java
Wed Jun 26 14:15:08 2013
@@ -48,9 +48,10 @@ public class PojoMessageHandlerWholeText
public PojoMessageHandlerWholeText(Object pojo, Method method,
Session session, EndpointConfig config,
List<Class<? extends Decoder>> decoderClazzes, Object[] params,
- int indexPayload, boolean convert, int indexSession) {
+ int indexPayload, boolean convert, int indexSession,
+ long maxMessageSize) {
super(pojo, method, session, params, indexPayload, convert,
- indexSession);
+ indexSession, maxMessageSize);
// Check for primitives
Class<?> type = method.getParameterTypes()[indexPayload];
@@ -61,21 +62,23 @@ public class PojoMessageHandlerWholeText
primitiveType = null;
}
- try {
- for (Class<? extends Decoder> decoderClazz : decoderClazzes) {
- if (Text.class.isAssignableFrom(decoderClazz)) {
- Text<?> decoder = (Text<?>) decoderClazz.newInstance();
- decoder.init(config);
- decoders.add(decoder);
- } else if (TextStream.class.isAssignableFrom(decoderClazz)) {
- TextStream<?> decoder =
- (TextStream<?>) decoderClazz.newInstance();
- decoder.init(config);
- decoders.add(decoder);
- } else {
- // Binary decoder - ignore it
+ try {if (decoderClazzes != null) {
+ for (Class<? extends Decoder> decoderClazz : decoderClazzes) {
+ if (Text.class.isAssignableFrom(decoderClazz)) {
+ Text<?> decoder = (Text<?>) decoderClazz.newInstance();
+ decoder.init(config);
+ decoders.add(decoder);
+ } else if (TextStream.class.isAssignableFrom(
+ decoderClazz)) {
+ TextStream<?> decoder =
+ (TextStream<?>) decoderClazz.newInstance();
+ decoder.init(config);
+ decoders.add(decoder);
+ } else {
+ // Binary decoder - ignore it
+ }
}
- }
+ }
} catch (IllegalAccessException | InstantiationException e) {
throw new IllegalArgumentException(e);
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java?rev=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/pojo/PojoMethodMapping.java
Wed Jun 26 14:15:08 2013
@@ -268,6 +268,7 @@ public class PojoMethodMapping {
private Map<Integer,PojoPathParam> indexPathParams = new HashMap<>();
private int indexPayload = -1;
private boolean useDecoder = false;
+ private long maxMessageSize = -1;
public MessageMethod(Method m, List<DecoderEntry> decoderEntries) {
this.m = m;
@@ -491,6 +492,8 @@ public class PojoMethodMapping {
"pojoMethodMapping.partialObject",
m.getName(), m.getDeclaringClass().getName()));
}
+
+ maxMessageSize = m.getAnnotation(OnMessage.class).maxMessageSize();
}
@@ -526,27 +529,27 @@ public class PojoMethodMapping {
if (indexString != -1) {
mh = new PojoMessageHandlerWholeText(pojo, m, session,
config, decoders, params, indexString, false,
- indexSession);
+ indexSession, maxMessageSize);
} else if (indexPrimitive != -1) {
mh = new PojoMessageHandlerWholeText(pojo, m, session,
config, decoders, params, indexPrimitive, false,
- indexSession);
+ indexSession, maxMessageSize);
} else if (indexByteArray != -1) {
mh = new PojoMessageHandlerWholeBinary(pojo, m, session,
config, decoders, params, indexByteArray, true,
- indexSession, false);
+ indexSession, false, maxMessageSize);
} else if (indexByteBuffer != -1) {
mh = new PojoMessageHandlerWholeBinary(pojo, m, session,
config, decoders, params, indexByteBuffer, false,
- indexSession, false);
+ indexSession, false, maxMessageSize);
} else if (indexInputStream != -1) {
mh = new PojoMessageHandlerWholeBinary(pojo, m, session,
config, decoders, params, indexInputStream, true,
- indexSession, true);
+ indexSession, true, maxMessageSize);
} else if (indexReader != -1) {
mh = new PojoMessageHandlerWholeText(pojo, m, session,
config, decoders, params, indexReader, true,
- indexSession);
+ indexSession, maxMessageSize);
} else {
mh = new PojoMessageHandlerWholePong(pojo, m, session,
params, indexPong, false, indexSession);
@@ -556,15 +559,15 @@ public class PojoMethodMapping {
if (indexString != -1) {
mh = new PojoMessageHandlerPartialText(pojo, m, session,
params, indexString, false, indexBoolean,
- indexSession);
+ indexSession, maxMessageSize);
} else if (indexByteArray != -1) {
mh = new PojoMessageHandlerPartialBinary(pojo, m, session,
params, indexByteArray, true, indexBoolean,
- indexSession);
+ indexSession, maxMessageSize);
} else {
mh = new PojoMessageHandlerPartialBinary(pojo, m, session,
params, indexByteBuffer, false, indexBoolean,
- indexSession);
+ indexSession, maxMessageSize);
}
}
return mh;
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=1496942&r1=1496941&r2=1496942&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
(original)
+++ tomcat/trunk/test/org/apache/tomcat/websocket/TestWsWebSocketContainer.java
Wed Jun 26 14:15:08 2013
@@ -588,12 +588,17 @@ public class TestWsWebSocketContainer ex
WebSocketContainer wsContainer =
ContainerProvider.getWebSocketContainer();
- Session s1a = connectToEchoServerBasic(wsContainer, EndpointA.class);
- Session s2a = connectToEchoServerBasic(wsContainer, EndpointA.class);
- Session s3a = connectToEchoServerBasic(wsContainer, EndpointA.class);
-
- Session s1b = connectToEchoServerBasic(wsContainer, EndpointB.class);
- Session s2b = connectToEchoServerBasic(wsContainer, EndpointB.class);
+ Session s1a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
+ Session s2a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
+ Session s3a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
+
+ Session s1b = connectToEchoServer(wsContainer, EndpointB.class,
+ TesterEchoServer.Config.PATH_BASIC);
+ Session s2b = connectToEchoServer(wsContainer, EndpointB.class,
+ TesterEchoServer.Config.PATH_BASIC);
Set<Session> setA = s3a.getOpenSessions();
Assert.assertEquals(3, setA.size());
@@ -638,9 +643,12 @@ public class TestWsWebSocketContainer ex
wsContainer.setDefaultMaxSessionIdleTimeout(5000);
wsContainer.setProcessPeriod(1);
- connectToEchoServerBasic(wsContainer, EndpointA.class);
- connectToEchoServerBasic(wsContainer, EndpointA.class);
- Session s3a = connectToEchoServerBasic(wsContainer, EndpointA.class);
+ connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
+ connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
+ Session s3a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
// Check all three sessions are open
Set<Session> setA = s3a.getOpenSessions();
@@ -694,11 +702,14 @@ public class TestWsWebSocketContainer ex
wsContainer.setDefaultMaxSessionIdleTimeout(5000);
wsContainer.setProcessPeriod(1);
- Session s1a = connectToEchoServerBasic(wsContainer, EndpointA.class);
+ Session s1a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
s1a.setMaxIdleTimeout(3000);
- Session s2a = connectToEchoServerBasic(wsContainer, EndpointA.class);
+ Session s2a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
s2a.setMaxIdleTimeout(6000);
- Session s3a = connectToEchoServerBasic(wsContainer, EndpointA.class);
+ Session s3a = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC);
s3a.setMaxIdleTimeout(9000);
// Check all three sessions are open
@@ -731,12 +742,11 @@ public class TestWsWebSocketContainer ex
return result;
}
- private Session connectToEchoServerBasic(WebSocketContainer wsContainer,
- Class<? extends Endpoint> clazz) throws Exception {
+ private Session connectToEchoServer(WebSocketContainer wsContainer,
+ Class<? extends Endpoint> clazz, String path) throws Exception {
return wsContainer.connectToServer(clazz,
ClientEndpointConfig.Builder.create().build(),
- new URI("ws://localhost:" + getPort() +
- TesterEchoServer.Config.PATH_BASIC));
+ new URI("ws://localhost:" + getPort() + path));
}
public static final class EndpointA extends Endpoint {
@@ -835,9 +845,9 @@ public class TestWsWebSocketContainer ex
WebSocketContainer wsContainer =
ContainerProvider.getWebSocketContainer();
- Session s = connectToEchoServerBasic(wsContainer, EndpointA.class);
+ Session s = connectToEchoServer(wsContainer, EndpointA.class,
+ TesterEchoServer.Config.PATH_BASIC_LIMIT);
- // 9 bytes
StringBuilder msg = new StringBuilder();
for (long i = 0; i < size; i++) {
msg.append('x');
@@ -845,6 +855,15 @@ public class TestWsWebSocketContainer ex
s.getBasicRemote().sendText(msg.toString());
+ // Wait for up to 5 seconds for session to close
+ boolean open = s.isOpen();
+ int count = 0;
+ while (open != expectOpen && count < 50) {
+ Thread.sleep(100);
+ count++;
+ open = s.isOpen();
+ }
+
Assert.assertEquals(Boolean.valueOf(expectOpen),
Boolean.valueOf(s.isOpen()));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]