/*
 * 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 io.netty.buffer.MessageBuf;
import io.netty.buffer.Unpooled;

public abstract class ChannelInboundMessageHandlerAdapter<I>
        extends ChannelInboundHandlerAdapter implements ChannelInboundMessageHandler<I> {

    @Override
    public MessageBuf<I> newInboundBuffer(ChannelHandlerContext ctx) throws Exception {
        return Unpooled.messageBuffer();
    }

    @Override
    public final void inboundBufferUpdated(ChannelHandlerContext ctx) throws Exception {
        beginMessageReceived(ctx);

        MessageBuf<I> in = ctx.inboundMessageBuffer();
        for (;;) {
            I msg = in.poll();
            if (msg == null) {
                break;
            }
            try {
                messageReceived(ctx, msg);
            } catch (Throwable t) {
                ctx.fireExceptionCaught(t);
            }
        }

        endMessageReceived(ctx);
    }

    public void beginMessageReceived(ChannelHandlerContext ctx) throws Exception { }
    public abstract void messageReceived(ChannelHandlerContext ctx, I msg) throws Exception;
    public void endMessageReceived(ChannelHandlerContext ctx) throws Exception { }
}

@@ -1137,16 +1137,21 @@
         
+if (!
 beginMes
@@ -1167,17 +1167,49 @@
 ved(ctx)
-;
+) %7B%0A            return;%0A        %7D
 %0A%0A      
@@ -1585,27 +1585,469 @@
  %7D%0A%0A    
-public void
+/**%0A     * Will get notified once %7B@link #inboundBufferUpdated(ChannelHandlerContext)%7D was called.%0A     *%0A     * If this method returns %3Ccode%3Efalse%3C/code%3E no further processing of the %7B@link MessageBuf%7D%0A     * will be done until the next call of %7B@link #inboundBufferUpdated(ChannelHandlerContext)%7D.%0A     *%0A     * This will return %3Ccode%3Etrue%3C/code%3E by default, and may get overriden by sub-classes for%0A     * special handling.%0A     */%0A    public boolean
  beginMe
@@ -2105,19 +2105,45 @@
 eption %7B
+%0A        return true;%0A   
  %7D%0A
+%0A
     publ

Change ChannelInboundMessageHandlerAdapter.beginMessageReceived(..) to return a boolean that will be used to check if data should be processed. See #674