diff --git a/src/main/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoder.java b/src/main/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoder.java
index 6f4dd99963..c7ea5d3a8c 100644
--- a/src/main/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoder.java
+++ b/src/main/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoder.java
@@ -69,7 +69,7 @@ public class DelimiterBasedFrameDecoder extends FrameDecoder {
private final boolean stripDelimiter;
private boolean discardingTooLongFrame;
private int tooLongFrameLength;
- private boolean failImmediatelyOnTooLongFrame = false;
+ private final boolean failImmediatelyOnTooLongFrame;
/**
* Creates a new instance.
@@ -103,6 +103,7 @@ public class DelimiterBasedFrameDecoder extends FrameDecoder {
};
this.maxFrameLength = maxFrameLength;
this.stripDelimiter = stripDelimiter;
+ this.failImmediatelyOnTooLongFrame = false;
}
/**
@@ -117,6 +118,14 @@ public class DelimiterBasedFrameDecoder extends FrameDecoder {
this(maxFrameLength, true, delimiters);
}
+ /**
+ * Calls {@link #DelimiterBasedFrameDecoder(int, boolean, boolean, ChannelBuffer...)} with failImmediatelyOnTooLongFrame set to false
+ */
+ public DelimiterBasedFrameDecoder(
+ int maxFrameLength, boolean stripDelimiter, ChannelBuffer... delimiters) {
+ this(maxFrameLength, stripDelimiter, false, delimiters);
+ }
+
/**
* Creates a new instance.
*
@@ -125,10 +134,16 @@ public class DelimiterBasedFrameDecoder extends FrameDecoder {
* the length of the frame exceeds this value.
* @param stripDelimiter whether the decoded frame should strip out the
* delimiter or not
+ * @param failImmediatelyOnTooLongFrame If false (the default) a {@link TooLongFrameException}
+ * is thrown if the length of the frame exceeds maxFrameLength,
+ * after the delimiter has been read.
+ * If true a {@link TooLongFrameException} is thrown immediately
+ * when the length of the frame exceeds maxFrameLength,
+ * regardless of whether a delimiter has been found yet.
* @param delimiters the delimiters
*/
public DelimiterBasedFrameDecoder(
- int maxFrameLength, boolean stripDelimiter, ChannelBuffer... delimiters) {
+ int maxFrameLength, boolean stripDelimiter, boolean failImmediatelyOnTooLongFrame, ChannelBuffer... delimiters) {
validateMaxFrameLength(maxFrameLength);
if (delimiters == null) {
throw new NullPointerException("delimiters");
@@ -144,8 +159,9 @@ public class DelimiterBasedFrameDecoder extends FrameDecoder {
}
this.maxFrameLength = maxFrameLength;
this.stripDelimiter = stripDelimiter;
+ this.failImmediatelyOnTooLongFrame = failImmediatelyOnTooLongFrame;
}
-
+
@Override
protected Object decode(
ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
@@ -213,23 +229,6 @@ public class DelimiterBasedFrameDecoder extends FrameDecoder {
}
}
- /**
- * Set the behavior when a frame longer than maxFrameLength is encountered.
- *
- * @param failImmediatelyOnTooLongFrame If false (the default) a {@link TooLongFrameException}
- * is thrown if the length of the frame exceeds maxFrameLength,
- * after the delimiter has been read.
- * If true a {@link TooLongFrameException} is thrown immediately
- * when the length of the frame exceeds maxFrameLength,
- * regardless of whether a delimiter has been found yet.
- */
- public DelimiterBasedFrameDecoder setFailImmediatelyOnTooLongFrame(
- boolean failImmediatelyOnTooLongFrame)
- {
- this.failImmediatelyOnTooLongFrame = failImmediatelyOnTooLongFrame;
- return this;
- }
-
private void fail(ChannelHandlerContext ctx, long frameLength) {
if (frameLength > 0) {
Channels.fireExceptionCaught(
diff --git a/src/test/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoderTest.java b/src/test/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoderTest.java
index 6d67acb0e4..13c6506867 100644
--- a/src/test/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoderTest.java
+++ b/src/test/java/org/jboss/netty/handler/codec/frame/DelimiterBasedFrameDecoderTest.java
@@ -50,8 +50,7 @@ public class DelimiterBasedFrameDecoderTest {
@Test
public void testFailImmediatelyTooLongFrameRecovery() throws Exception {
DecoderEmbedder embedder = new DecoderEmbedder(
- new DelimiterBasedFrameDecoder(1, Delimiters.nulDelimiter()).
- setFailImmediatelyOnTooLongFrame(true));
+ new DelimiterBasedFrameDecoder(1, true, true, Delimiters.nulDelimiter()));
for (int i = 0; i < 2; i ++) {
try {