diff --git a/codec/src/main/java/io/netty/handler/codec/ByteToByteDecoder.java b/codec/src/main/java/io/netty/handler/codec/ByteToByteDecoder.java index 9d0e8cc8bf..249201ae39 100644 --- a/codec/src/main/java/io/netty/handler/codec/ByteToByteDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ByteToByteDecoder.java @@ -22,18 +22,18 @@ import io.netty.channel.ChannelInboundByteHandlerAdapter; public abstract class ByteToByteDecoder extends ChannelInboundByteHandlerAdapter { @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - callDecode(ctx); + public void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception { + callDecode(ctx, in, ctx.nextOutboundByteBuffer()); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { ChannelBuffer in = ctx.inboundByteBuffer(); + ChannelBuffer out = ctx.nextInboundByteBuffer(); if (!in.readable()) { - callDecode(ctx); + callDecode(ctx, in, out); } - ChannelBuffer out = ctx.nextInboundByteBuffer(); int oldOutSize = out.readableBytes(); try { decodeLast(ctx, in, out); @@ -53,10 +53,7 @@ public abstract class ByteToByteDecoder extends ChannelInboundByteHandlerAdapter ctx.fireChannelInactive(); } - private void callDecode(ChannelHandlerContext ctx) { - ChannelBuffer in = ctx.inboundByteBuffer(); - ChannelBuffer out = ctx.nextInboundByteBuffer(); - + private void callDecode(ChannelHandlerContext ctx, ChannelBuffer in, ChannelBuffer out) { int oldOutSize = out.readableBytes(); while (in.readable()) { int oldInSize = in.readableBytes(); diff --git a/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java index 58e660e41c..2461eec416 100644 --- a/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java @@ -16,12 +16,14 @@ package io.netty.handler.codec; import io.netty.buffer.ChannelBuffer; +import io.netty.channel.ChannelBufferHolder; +import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandler; -import io.netty.channel.ChannelInboundByteHandlerAdapter; +import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelPipeline; -public abstract class ByteToMessageDecoder extends ChannelInboundByteHandlerAdapter { +public abstract class ByteToMessageDecoder extends ChannelInboundHandlerAdapter { private ChannelHandlerContext ctx; @@ -31,6 +33,11 @@ public abstract class ByteToMessageDecoder extends ChannelInboundByteHandlerA super.beforeAdd(ctx); } + @Override + public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { + return ChannelBufferHolders.byteBuffer(); + } + @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { callDecode(ctx); diff --git a/codec/src/main/java/io/netty/handler/codec/CodecUtil.java b/codec/src/main/java/io/netty/handler/codec/CodecUtil.java index 98494dc6d3..527b796d38 100644 --- a/codec/src/main/java/io/netty/handler/codec/CodecUtil.java +++ b/codec/src/main/java/io/netty/handler/codec/CodecUtil.java @@ -47,28 +47,28 @@ final class CodecUtil { } if (inbound) { - try { + if (ctx.hasNextInboundMessageBuffer()) { ctx.nextInboundMessageBuffer().add(msg); return true; - } catch (NoSuchBufferException e) { - if (msg instanceof ChannelBuffer) { - ChannelBuffer altDst = ctx.nextInboundByteBuffer(); - ChannelBuffer src = (ChannelBuffer) msg; - altDst.writeBytes(src, src.readerIndex(), src.readableBytes()); - return true; - } + } + + if (msg instanceof ChannelBuffer && ctx.hasNextInboundByteBuffer()) { + ChannelBuffer altDst = ctx.nextInboundByteBuffer(); + ChannelBuffer src = (ChannelBuffer) msg; + altDst.writeBytes(src, src.readerIndex(), src.readableBytes()); + return true; } } else { - try { + if (ctx.hasNextOutboundMessageBuffer()) { ctx.nextOutboundMessageBuffer().add(msg); return true; - } catch (NoSuchBufferException e) { - if (msg instanceof ChannelBuffer) { - ChannelBuffer altDst = ctx.nextOutboundByteBuffer(); - ChannelBuffer src = (ChannelBuffer) msg; - altDst.writeBytes(src, src.readerIndex(), src.readableBytes()); - return true; - } + } + + if (msg instanceof ChannelBuffer && ctx.hasNextOutboundByteBuffer()) { + ChannelBuffer altDst = ctx.nextOutboundByteBuffer(); + ChannelBuffer src = (ChannelBuffer) msg; + altDst.writeBytes(src, src.readerIndex(), src.readableBytes()); + return true; } } diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java index 14a77dd50d..2950d1faf3 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java @@ -15,12 +15,19 @@ */ package io.netty.handler.codec; +import io.netty.channel.ChannelBufferHolder; +import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundMessageHandlerAdapter; +import io.netty.channel.ChannelInboundHandlerAdapter; import java.util.Queue; -public abstract class MessageToMessageDecoder extends ChannelInboundMessageHandlerAdapter { +public abstract class MessageToMessageDecoder extends ChannelInboundHandlerAdapter { + + @Override + public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { + return ChannelBufferHolders.messageBuffer(); + } @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) diff --git a/example/src/main/java/io/netty/example/portunification/PortUnificationServerHandler.java b/example/src/main/java/io/netty/example/portunification/PortUnificationServerHandler.java index 842ef52a11..8e2396c0a1 100644 --- a/example/src/main/java/io/netty/example/portunification/PortUnificationServerHandler.java +++ b/example/src/main/java/io/netty/example/portunification/PortUnificationServerHandler.java @@ -53,16 +53,14 @@ public class PortUnificationServerHandler extends ChannelInboundByteHandlerAdapt } @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - ChannelBuffer buffer = ctx.inboundByteBuffer(); - + public void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception { // Will use the first two bytes to detect a protocol. - if (buffer.readableBytes() < 2) { + if (in.readableBytes() < 2) { return; } - final int magic1 = buffer.getUnsignedByte(buffer.readerIndex()); - final int magic2 = buffer.getUnsignedByte(buffer.readerIndex() + 1); + final int magic1 = in.getUnsignedByte(in.readerIndex()); + final int magic2 = in.getUnsignedByte(in.readerIndex() + 1); if (isSsl(magic1)) { enableSsl(ctx); @@ -74,13 +72,13 @@ public class PortUnificationServerHandler extends ChannelInboundByteHandlerAdapt switchToFactorial(ctx); } else { // Unknown protocol; discard everything and close the connection. - buffer.clear(); + in.clear(); ctx.close(); return; } // Forward the current read buffer as is to the new handlers. - ctx.nextInboundByteBuffer().writeBytes(buffer); + ctx.nextInboundByteBuffer().writeBytes(in); ctx.fireInboundBufferUpdated(); } diff --git a/example/src/main/java/io/netty/example/proxy/HexDumpProxyBackendHandler.java b/example/src/main/java/io/netty/example/proxy/HexDumpProxyBackendHandler.java index 59ea1ec605..66c39a1e62 100644 --- a/example/src/main/java/io/netty/example/proxy/HexDumpProxyBackendHandler.java +++ b/example/src/main/java/io/netty/example/proxy/HexDumpProxyBackendHandler.java @@ -34,8 +34,7 @@ public class HexDumpProxyBackendHandler extends ChannelInboundByteHandlerAdapter } @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - ChannelBuffer in = ctx.inboundByteBuffer(); + public void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception { ChannelBuffer out = inboundChannel.outboundByteBuffer(); out.discardReadBytes(); out.writeBytes(in); diff --git a/example/src/main/java/io/netty/example/proxy/HexDumpProxyFrontendHandler.java b/example/src/main/java/io/netty/example/proxy/HexDumpProxyFrontendHandler.java index a26110ef7e..3c46a6543b 100644 --- a/example/src/main/java/io/netty/example/proxy/HexDumpProxyFrontendHandler.java +++ b/example/src/main/java/io/netty/example/proxy/HexDumpProxyFrontendHandler.java @@ -66,8 +66,7 @@ public class HexDumpProxyFrontendHandler extends ChannelInboundByteHandlerAdapte } @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - ChannelBuffer in = ctx.inboundByteBuffer(); + public void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception { ChannelBuffer out = outboundChannel.outboundByteBuffer(); out.discardReadBytes(); out.writeBytes(in); diff --git a/handler/src/main/java/io/netty/handler/queue/BlockingReadHandler.java b/handler/src/main/java/io/netty/handler/queue/BlockingReadHandler.java index 8aefd34e6b..a8c2363845 100644 --- a/handler/src/main/java/io/netty/handler/queue/BlockingReadHandler.java +++ b/handler/src/main/java/io/netty/handler/queue/BlockingReadHandler.java @@ -218,4 +218,10 @@ public class BlockingReadHandler extends ChannelInboundMessageHandlerAdapter< queue.add(e); } } + + @Override + public void messageReceived(ChannelHandlerContext ctx, Object msg) throws Exception { + // TODO Auto-generated method stub + + } } diff --git a/handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTest.java b/handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTest.java index 50210559d3..cee466a3e4 100644 --- a/handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTest.java +++ b/handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTest.java @@ -144,11 +144,8 @@ public class ChunkedWriteHandlerTest { @Override public void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception { - super.flush(ctx, future); - future.setSuccess(); } - }; EmbeddedMessageChannel ch = new EmbeddedMessageChannel(new ChunkedWriteHandler(), testHandler); diff --git a/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketSpdyEchoTest.java b/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketSpdyEchoTest.java index 0fc176cc5e..2f3a655075 100644 --- a/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketSpdyEchoTest.java +++ b/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketSpdyEchoTest.java @@ -22,8 +22,8 @@ import io.netty.buffer.ChannelBuffer; import io.netty.buffer.ChannelBuffers; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundMessageHandlerAdapter; import io.netty.channel.ChannelInboundByteHandlerAdapter; +import io.netty.channel.ChannelInboundMessageHandlerAdapter; import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.spdy.SpdyConstants; @@ -255,10 +255,9 @@ public class SocketSpdyEchoTest extends AbstractSocketTest { } @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - ChannelBuffer m = ctx.inboundByteBuffer(); - byte[] actual = new byte[m.readableBytes()]; - m.readBytes(actual); + public void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception { + byte[] actual = new byte[in.readableBytes()]; + in.readBytes(actual); int lastIdx = counter; for (int i = 0; i < actual.length; i ++) { diff --git a/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java b/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java index c1c4bed262..50c3a86c41 100644 --- a/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java +++ b/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java @@ -16,12 +16,14 @@ package io.netty.bootstrap; import io.netty.channel.Channel; +import io.netty.channel.ChannelBufferHolder; +import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelException; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundMessageHandlerAdapter; +import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; @@ -228,7 +230,11 @@ public class ServerBootstrap { validate(); } - private class Acceptor extends ChannelInboundMessageHandlerAdapter { + private class Acceptor extends ChannelInboundHandlerAdapter { + @Override + public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { + return ChannelBufferHolders.messageBuffer(); + } @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) { diff --git a/transport/src/main/java/io/netty/channel/ChannelHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelHandlerAdapter.java index c75fa73624..6949e4f587 100644 --- a/transport/src/main/java/io/netty/channel/ChannelHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelHandlerAdapter.java @@ -15,10 +15,7 @@ */ package io.netty.channel; -import io.netty.buffer.ChannelBuffer; - import java.net.SocketAddress; -import java.util.Queue; public class ChannelHandlerAdapter extends ChannelStateHandlerAdapter implements ChannelOperationHandler { @@ -51,27 +48,11 @@ public class ChannelHandlerAdapter extends ChannelStateHandlerAdapter implements @Override public void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception { - flush0(ctx, future); - } - - static void flush0(ChannelHandlerContext ctx, ChannelFuture future) { - if (ctx.hasOutboundMessageBuffer()) { - Queue out = ctx.outboundMessageBuffer(); - Queue nextOut = ctx.nextOutboundMessageBuffer(); - for (;;) { - O msg = out.poll(); - if (msg == null) { - break; - } - nextOut.add(msg); - } - } else if (ctx.hasOutboundByteBuffer()) { - ChannelBuffer out = ctx.outboundByteBuffer(); - ChannelBuffer nextOut = ctx.nextOutboundByteBuffer(); - nextOut.writeBytes(out); - out.discardReadBytes(); + if (this instanceof ChannelOutboundHandler) { + throw new IllegalStateException( + "flush(...) must be overridden by " + getClass().getName() + + ", which implements " + ChannelOutboundHandler.class.getSimpleName()); } - ctx.flush(future); } } diff --git a/transport/src/main/java/io/netty/channel/ChannelInboundByteHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelInboundByteHandlerAdapter.java index 9d732f9466..22d4fe21b2 100644 --- a/transport/src/main/java/io/netty/channel/ChannelInboundByteHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelInboundByteHandlerAdapter.java @@ -18,7 +18,7 @@ package io.netty.channel; import io.netty.buffer.ChannelBuffer; -public class ChannelInboundByteHandlerAdapter extends ChannelInboundHandlerAdapter { +public abstract class ChannelInboundByteHandlerAdapter extends ChannelInboundHandlerAdapter { @Override public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { @@ -26,12 +26,16 @@ public class ChannelInboundByteHandlerAdapter extends ChannelInboundHandlerAdapt } @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - inboundBufferUpdated(ctx, ctx.inboundByteBuffer()); + public final void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + ChannelBuffer in = ctx.inboundByteBuffer(); + try { + inboundBufferUpdated(ctx, in); + } finally { + if (!in.readable()) { + in.discardReadBytes(); + } + } } - public void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception { - ctx.nextInboundByteBuffer().writeBytes(in); - in.discardReadBytes(); - } + public abstract void inboundBufferUpdated(ChannelHandlerContext ctx, ChannelBuffer in) throws Exception; } diff --git a/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java index f6f3cf36b2..40daf9e156 100644 --- a/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java @@ -18,5 +18,6 @@ package io.netty.channel; public abstract class ChannelInboundHandlerAdapter extends ChannelStateHandlerAdapter implements ChannelInboundHandler { - // Useful when you have to create an anonymous class + @Override + public abstract void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception; } diff --git a/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java index 08ac4d3d7d..dd9476d574 100644 --- a/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java @@ -17,7 +17,7 @@ package io.netty.channel; import java.util.Queue; -public class ChannelInboundMessageHandlerAdapter extends ChannelInboundHandlerAdapter { +public abstract class ChannelInboundMessageHandlerAdapter extends ChannelInboundHandlerAdapter { @Override public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { @@ -25,7 +25,7 @@ public class ChannelInboundMessageHandlerAdapter extends ChannelInboundHandle } @Override - public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + public final void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { Queue in = ctx.inboundMessageBuffer(); for (;;) { I msg = in.poll(); @@ -34,14 +34,11 @@ public class ChannelInboundMessageHandlerAdapter extends ChannelInboundHandle } try { messageReceived(ctx, msg); - ctx.fireInboundBufferUpdated(); } catch (Throwable t) { ctx.fireExceptionCaught(t); } } } - public void messageReceived(ChannelHandlerContext ctx, I msg) throws Exception { - ctx.nextInboundMessageBuffer().add(msg); - } + public abstract void messageReceived(ChannelHandlerContext ctx, I msg) throws Exception; } diff --git a/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java index ef663795e3..6a394fc0c7 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelOperationHandlerAdapter.java @@ -84,6 +84,11 @@ public class ChannelOperationHandlerAdapter implements ChannelOperationHandler { @Override public void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception { - ChannelHandlerAdapter.flush0(ctx, future); + if (this instanceof ChannelOutboundHandler) { + throw new IllegalStateException( + "flush(...) must be overridden by " + getClass().getName() + + ", which implements " + ChannelOutboundHandler.class.getSimpleName()); + } + ctx.flush(future); } } diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundByteHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOutboundByteHandlerAdapter.java index b972651253..3aa2612bde 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOutboundByteHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundByteHandlerAdapter.java @@ -15,7 +15,7 @@ */ package io.netty.channel; -public class ChannelOutboundByteHandlerAdapter extends ChannelOutboundHandlerAdapter { +public abstract class ChannelOutboundByteHandlerAdapter extends ChannelOutboundHandlerAdapter { @Override public ChannelBufferHolder newOutboundBuffer(ChannelHandlerContext ctx) throws Exception { return ChannelBufferHolders.byteBuffer(); diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java index 810fc98e78..bbac445ba6 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java @@ -15,8 +15,8 @@ */ package io.netty.channel; - public abstract class ChannelOutboundHandlerAdapter extends ChannelOperationHandlerAdapter implements ChannelOutboundHandler { - // Useful when you have to create an anonymous class + @Override + public abstract void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception; } diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java index 941e256a23..c35055d068 100644 --- a/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java @@ -16,7 +16,7 @@ package io.netty.channel; -public class ChannelOutboundMessageHandlerAdapter extends ChannelOutboundHandlerAdapter { +public abstract class ChannelOutboundMessageHandlerAdapter extends ChannelOutboundHandlerAdapter { @Override public ChannelBufferHolder newOutboundBuffer(ChannelHandlerContext ctx) throws Exception { return ChannelBufferHolders.messageBuffer(); diff --git a/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java index 34afe90eaa..f9d79df0bc 100644 --- a/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelStateHandlerAdapter.java @@ -15,9 +15,6 @@ */ package io.netty.channel; -import io.netty.buffer.ChannelBuffer; - -import java.util.Queue; public class ChannelStateHandlerAdapter implements ChannelStateHandler { @@ -82,28 +79,11 @@ public class ChannelStateHandlerAdapter implements ChannelStateHandler { @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { - inboundBufferUpdated0(ctx); - } - - static void inboundBufferUpdated0(ChannelHandlerContext ctx) { - if (ctx.hasInboundMessageBuffer()) { - Queue in = ctx.inboundMessageBuffer(); - Queue nextIn = ctx.nextInboundMessageBuffer(); - for (;;) { - I msg = in.poll(); - if (msg == null) { - break; - } - nextIn.add(msg); - } - } else if (ctx.hasInboundByteBuffer()) { - ChannelBuffer in = ctx.inboundByteBuffer(); - ChannelBuffer nextIn = ctx.nextInboundByteBuffer(); - nextIn.writeBytes(in); - in.discardReadBytes(); + if (this instanceof ChannelInboundHandler) { + throw new IllegalStateException( + "inboundBufferUpdated(...) must be overridden by " + getClass().getName() + + ", which implements " + ChannelInboundHandler.class.getSimpleName()); } - ctx.fireInboundBufferUpdated(); } - }