diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientCodec.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientCodec.java index 020460b51d..65f6d04828 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientCodec.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpClientCodec.java @@ -18,6 +18,7 @@ package io.netty.handler.codec.http; import io.netty.buffer.ChannelBuffer; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.CombinedChannelHandler; import io.netty.handler.codec.PrematureChannelClosureException; import io.netty.util.internal.QueueFactory; diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java index 8eed9f4509..a930cc172a 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpServerCodec.java @@ -15,6 +15,10 @@ */ package io.netty.handler.codec.http; +import io.netty.channel.CombinedChannelHandler; + +import io.netty.channel.CombinedChannelHandler; + /** * A combination of {@link HttpRequestDecoder} and {@link HttpResponseEncoder} diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameCodec.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameCodec.java index 8a981ca3ea..12be388a53 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameCodec.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameCodec.java @@ -15,6 +15,10 @@ */ package io.netty.handler.codec.spdy; +import io.netty.channel.CombinedChannelHandler; + +import io.netty.channel.CombinedChannelHandler; + /** * A combination of {@link SpdyFrameDecoder} and {@link SpdyFrameEncoder}. diff --git a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpCodec.java b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpCodec.java index 00d0a6dcda..039e538578 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpCodec.java +++ b/codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpCodec.java @@ -15,6 +15,8 @@ */ package io.netty.handler.codec.spdy; +import io.netty.channel.CombinedChannelHandler; + /** * A combination of {@link SpdyHttpDecoder} and {@link SpdyHttpEncoder} 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 b6fc131d9c..14a77dd50d 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageDecoder.java @@ -15,21 +15,12 @@ */ package io.netty.handler.codec; -import io.netty.channel.ChannelBufferHolder; -import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandler; -import io.netty.channel.ChannelStateHandlerAdapter; +import io.netty.channel.ChannelInboundMessageHandlerAdapter; import java.util.Queue; -public abstract class MessageToMessageDecoder extends ChannelStateHandlerAdapter implements ChannelInboundHandler { - - @Override - public ChannelBufferHolder newInboundBuffer( - ChannelHandlerContext ctx) throws Exception { - return ChannelBufferHolders.messageBuffer(); - } +public abstract class MessageToMessageDecoder extends ChannelInboundMessageHandlerAdapter { @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java index a9dda3f891..72e12a8b60 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToMessageEncoder.java @@ -15,23 +15,13 @@ */ package io.netty.handler.codec; -import io.netty.channel.ChannelBufferHolder; -import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOperationHandlerAdapter; -import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelOutboundMessageHandlerAdapter; import java.util.Queue; -public abstract class MessageToMessageEncoder - extends ChannelOperationHandlerAdapter implements ChannelOutboundHandler { - - @Override - public ChannelBufferHolder newOutboundBuffer( - ChannelHandlerContext ctx) throws Exception { - return ChannelBufferHolders.messageBuffer(); - } +public abstract class MessageToMessageEncoder extends ChannelOutboundMessageHandlerAdapter { @Override public void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception { diff --git a/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java b/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java index d18356a278..4a7bfd4b65 100644 --- a/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/MessageToStreamEncoder.java @@ -16,23 +16,13 @@ package io.netty.handler.codec; import io.netty.buffer.ChannelBuffer; -import io.netty.channel.ChannelBufferHolder; -import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOperationHandlerAdapter; -import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelOutboundMessageHandlerAdapter; import java.util.Queue; -public abstract class MessageToStreamEncoder - extends ChannelOperationHandlerAdapter implements ChannelOutboundHandler { - - @Override - public ChannelBufferHolder newOutboundBuffer( - ChannelHandlerContext ctx) throws Exception { - return ChannelBufferHolders.messageBuffer(); - } +public abstract class MessageToStreamEncoder extends ChannelOutboundMessageHandlerAdapter { @Override public void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception { diff --git a/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java b/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java index c210aa6c00..1a6ee16f6a 100644 --- a/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/StreamToMessageDecoder.java @@ -16,23 +16,19 @@ 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.ChannelInboundStreamHandlerAdapter; import io.netty.channel.ChannelPipeline; -import io.netty.channel.ChannelStateHandlerAdapter; -public abstract class StreamToMessageDecoder - extends ChannelStateHandlerAdapter implements ChannelInboundHandler { +public abstract class StreamToMessageDecoder extends ChannelInboundStreamHandlerAdapter { private ChannelHandlerContext ctx; @Override - public ChannelBufferHolder newInboundBuffer( - ChannelHandlerContext ctx) throws Exception { + public void beforeAdd(ChannelHandlerContext ctx) throws Exception { this.ctx = ctx; - return ChannelBufferHolders.byteBuffer(); + super.beforeAdd(ctx); } @Override diff --git a/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java b/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java index 837e3f62ca..0226dfe277 100644 --- a/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/StreamToStreamDecoder.java @@ -16,20 +16,10 @@ 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.ChannelStateHandlerAdapter; +import io.netty.channel.ChannelInboundStreamHandlerAdapter; -public abstract class StreamToStreamDecoder - extends ChannelStateHandlerAdapter implements ChannelInboundHandler { - - @Override - public ChannelBufferHolder newInboundBuffer( - ChannelHandlerContext ctx) throws Exception { - return ChannelBufferHolders.byteBuffer(); - } +public abstract class StreamToStreamDecoder extends ChannelInboundStreamHandlerAdapter { @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { diff --git a/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java b/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java index 95da778f14..eb864f634b 100644 --- a/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java +++ b/codec/src/main/java/io/netty/handler/codec/StreamToStreamEncoder.java @@ -16,21 +16,11 @@ package io.netty.handler.codec; import io.netty.buffer.ChannelBuffer; -import io.netty.channel.ChannelBufferHolder; -import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOperationHandlerAdapter; -import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelOutboundStreamHandlerAdapter; -public abstract class StreamToStreamEncoder - extends ChannelOperationHandlerAdapter implements ChannelOutboundHandler { - - @Override - public ChannelBufferHolder newOutboundBuffer( - ChannelHandlerContext ctx) throws Exception { - return ChannelBufferHolders.byteBuffer(); - } +public abstract class StreamToStreamEncoder extends ChannelOutboundStreamHandlerAdapter { @Override public void flush(ChannelHandlerContext ctx, ChannelFuture future) throws Exception { 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 438e93938b..eab415f24e 100644 --- a/handler/src/main/java/io/netty/handler/queue/BlockingReadHandler.java +++ b/handler/src/main/java/io/netty/handler/queue/BlockingReadHandler.java @@ -21,9 +21,8 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelBufferHolder; import io.netty.channel.ChannelBufferHolders; import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandler; +import io.netty.channel.ChannelInboundMessageHandlerAdapter; import io.netty.channel.ChannelPipeline; -import io.netty.channel.ChannelStateHandlerAdapter; import io.netty.util.internal.QueueFactory; import java.io.IOException; @@ -70,8 +69,7 @@ import java.util.concurrent.TimeUnit; * * @param the type of the received messages */ -public class BlockingReadHandler - extends ChannelStateHandlerAdapter implements ChannelInboundHandler { +public class BlockingReadHandler extends ChannelInboundMessageHandlerAdapter { private static final Object INACTIVE = new Object(); diff --git a/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java b/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java index 36043b4e8a..cbbe04af9f 100644 --- a/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java +++ b/transport/src/main/java/io/netty/bootstrap/ServerBootstrap.java @@ -16,18 +16,15 @@ 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.ChannelInboundHandler; +import io.netty.channel.ChannelInboundMessageHandlerAdapter; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; -import io.netty.channel.ChannelStateHandlerAdapter; import io.netty.channel.EventLoop; import io.netty.channel.ServerChannel; import io.netty.logging.InternalLogger; @@ -231,13 +228,7 @@ public class ServerBootstrap { validate(); } - private class Acceptor extends ChannelStateHandlerAdapter implements ChannelInboundHandler { - - @Override - public ChannelBufferHolder newInboundBuffer( - ChannelHandlerContext ctx) throws Exception { - return ChannelBufferHolders.messageBuffer(); - } + private class Acceptor extends ChannelInboundMessageHandlerAdapter { @Override public void inboundBufferUpdated(ChannelHandlerContext ctx) { diff --git a/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java new file mode 100644 index 0000000000..f6f3cf36b2 --- /dev/null +++ b/transport/src/main/java/io/netty/channel/ChannelInboundHandlerAdapter.java @@ -0,0 +1,22 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project 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 io.netty.channel; + + +public abstract class ChannelInboundHandlerAdapter extends ChannelStateHandlerAdapter + implements ChannelInboundHandler { + // Useful when you have to create an anonymous class +} diff --git a/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java index ad5dbce1dd..08ac4d3d7d 100644 --- a/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelInboundMessageHandlerAdapter.java @@ -17,8 +17,7 @@ package io.netty.channel; import java.util.Queue; -public class ChannelInboundMessageHandlerAdapter - extends ChannelStateHandlerAdapter implements ChannelInboundHandler { +public class ChannelInboundMessageHandlerAdapter extends ChannelInboundHandlerAdapter { @Override public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { diff --git a/transport/src/main/java/io/netty/channel/ChannelInboundStreamHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelInboundStreamHandlerAdapter.java index 9e515075f6..048475b635 100644 --- a/transport/src/main/java/io/netty/channel/ChannelInboundStreamHandlerAdapter.java +++ b/transport/src/main/java/io/netty/channel/ChannelInboundStreamHandlerAdapter.java @@ -18,8 +18,7 @@ package io.netty.channel; import io.netty.buffer.ChannelBuffer; -public class ChannelInboundStreamHandlerAdapter - extends ChannelStateHandlerAdapter implements ChannelInboundHandler { +public class ChannelInboundStreamHandlerAdapter extends ChannelInboundHandlerAdapter { @Override public ChannelBufferHolder newInboundBuffer(ChannelHandlerContext ctx) throws Exception { diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java new file mode 100644 index 0000000000..810fc98e78 --- /dev/null +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundHandlerAdapter.java @@ -0,0 +1,22 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project 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 io.netty.channel; + + +public abstract class ChannelOutboundHandlerAdapter + extends ChannelOperationHandlerAdapter implements ChannelOutboundHandler { + // Useful when you have to create an anonymous class +} diff --git a/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java new file mode 100644 index 0000000000..941e256a23 --- /dev/null +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundMessageHandlerAdapter.java @@ -0,0 +1,24 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project 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 io.netty.channel; + + +public 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/ChannelOutboundStreamHandlerAdapter.java b/transport/src/main/java/io/netty/channel/ChannelOutboundStreamHandlerAdapter.java new file mode 100644 index 0000000000..77409cec69 --- /dev/null +++ b/transport/src/main/java/io/netty/channel/ChannelOutboundStreamHandlerAdapter.java @@ -0,0 +1,23 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project 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 io.netty.channel; + +public class ChannelOutboundStreamHandlerAdapter extends ChannelOutboundHandlerAdapter { + @Override + public ChannelBufferHolder newOutboundBuffer(ChannelHandlerContext ctx) throws Exception { + return ChannelBufferHolders.byteBuffer(); + } +} diff --git a/transport/src/main/java/io/netty/channel/CombinedChannelHandler.java b/transport/src/main/java/io/netty/channel/CombinedChannelHandler.java new file mode 100644 index 0000000000..ca5c1ecd8c --- /dev/null +++ b/transport/src/main/java/io/netty/channel/CombinedChannelHandler.java @@ -0,0 +1,191 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project 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 io.netty.channel; + +import java.net.SocketAddress; + +public class CombinedChannelHandler + extends ChannelHandlerAdapter + implements ChannelInboundHandler, ChannelOutboundHandler { + + private ChannelOutboundHandler out; + private ChannelInboundHandler in; + + protected CombinedChannelHandler() { + // User will call init in the subclass constructor. + } + + public CombinedChannelHandler( + ChannelInboundHandler inboundHandler, ChannelOutboundHandler outboundHandler) { + init(inboundHandler, outboundHandler); + } + + @SuppressWarnings("unchecked") + protected void init(ChannelInboundHandler inboundHandler, + ChannelOutboundHandler outboundHandler) { + if (inboundHandler == null) { + throw new NullPointerException("inboundHandler"); + } + if (outboundHandler == null) { + throw new NullPointerException("outboundHandler"); + } + if (inboundHandler instanceof ChannelOperationHandler) { + throw new IllegalArgumentException( + "inboundHandler must not implement " + + ChannelOperationHandler.class.getSimpleName() + " to get combined."); + } + if (outboundHandler instanceof ChannelStateHandler) { + throw new IllegalArgumentException( + "outboundHandler must not implement " + + ChannelStateHandler.class.getSimpleName() + " to get combined."); + } + + + if (in != null) { + throw new IllegalStateException("init() cannot be called more than once."); + } + + in = (ChannelInboundHandler) inboundHandler; + out = (ChannelOutboundHandler) outboundHandler; + } + + @Override + public ChannelBufferHolder newInboundBuffer( + ChannelHandlerContext ctx) throws Exception { + return in.newInboundBuffer(ctx); + } + + @Override + public ChannelBufferHolder newOutboundBuffer( + ChannelHandlerContext ctx) throws Exception { + return out.newOutboundBuffer(ctx); + } + + @Override + public void beforeAdd(ChannelHandlerContext ctx) throws Exception { + if (in == null) { + throw new IllegalStateException( + "not initialized yet - call init() in the constructor of the subclass"); + } + + try { + in.beforeAdd(ctx); + } finally { + out.beforeAdd(ctx); + } + } + + @Override + public void afterAdd(ChannelHandlerContext ctx) throws Exception { + try { + in.afterAdd(ctx); + } finally { + out.afterAdd(ctx); + } + } + + @Override + public void beforeRemove(ChannelHandlerContext ctx) throws Exception { + try { + in.beforeRemove(ctx); + } finally { + out.beforeRemove(ctx); + } + } + + @Override + public void afterRemove(ChannelHandlerContext ctx) throws Exception { + try { + in.afterRemove(ctx); + } finally { + out.afterRemove(ctx); + } + } + + @Override + public void channelRegistered(ChannelHandlerContext ctx) throws Exception { + in.channelRegistered(ctx); + } + + @Override + public void channelUnregistered(ChannelHandlerContext ctx) throws Exception { + in.channelUnregistered(ctx); + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + in.channelActive(ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + in.channelInactive(ctx); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + in.exceptionCaught(ctx, cause); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + in.userEventTriggered(ctx, evt); + } + + @Override + public void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception { + in.inboundBufferUpdated(ctx); + } + + @Override + public void bind( + ChannelHandlerContext ctx, + SocketAddress localAddress, ChannelFuture future) throws Exception { + out.bind(ctx, localAddress, future); + } + + @Override + public void connect( + ChannelHandlerContext ctx, + SocketAddress remoteAddress, SocketAddress localAddress, + ChannelFuture future) throws Exception { + out.connect(ctx, remoteAddress, localAddress, future); + } + + @Override + public void disconnect( + ChannelHandlerContext ctx, ChannelFuture future) throws Exception { + out.disconnect(ctx, future); + } + + @Override + public void close( + ChannelHandlerContext ctx, ChannelFuture future) throws Exception { + out.close(ctx, future); + } + + @Override + public void deregister( + ChannelHandlerContext ctx, ChannelFuture future) throws Exception { + out.deregister(ctx, future); + } + + @Override + public void flush( + ChannelHandlerContext ctx, ChannelFuture future) throws Exception { + out.flush(ctx, future); + } +}