aeron-client/src/main/java/io/aeron/ImageControlledFragmentAssembler.java
public Action onFragment(final DirectBuffer buffer, final int offset, final int length, final Header header)
    {
        final byte flags = header.flags();

        Action action = Action.CONTINUE;

        if ((flags & UNFRAGMENTED) == UNFRAGMENTED)
        {
            action = delegate.onFragment(buffer, offset, length, header);
        }
        else
        {
            if ((flags & BEGIN_FRAG_FLAG) == BEGIN_FRAG_FLAG)
            {
                builder.reset().append(buffer, offset, length);
            }
            else
            {
                final int limit = builder.limit();
                builder.append(buffer, offset, length);

                if ((flags & END_FRAG_FLAG) == END_FRAG_FLAG)
                {
                    final int msgLength = builder.limit();
                    action = delegate.onFragment(builder.buffer(), 0, msgLength, header);

                    if (Action.ABORT == action)
                    {
                        builder.limit(limit);
                    }
                    else
                    {
                        builder.reset();
                    }
                }
            }
        }

        return action;
    }
public Action onFragment(final DirectBuffer buffer, final int offset, final int length, final Header header)
    {
        final byte flags = header.flags();

        Action action = Action.CONTINUE;

        if ((flags & UNFRAGMENTED) == UNFRAGMENTED)
        {
            action = delegate.onFragment(buffer, offset, length, header);
        }
        else
        {
            if ((flags & BEGIN_FRAG_FLAG) == BEGIN_FRAG_FLAG)
            {
                builder.reset().append(buffer, offset, length);
            }
            else
            {
                final int limit = builder.limit();
                builder.append(buffer, offset, length);

                if ((flags & END_FRAG_FLAG) == END_FRAG_FLAG)
                {
                    final int msgLength = builder.limit();
                    action = delegate.onFragment(builder.buffer(), 0, msgLength, header);

                    if (Action.ABORT == action)
                    {
                        builder.limit(limit);
                    }
                    else
                    {
                        builder.reset();
                    }
                }
            }
        }

        return action;
    }
public Action onFragment ( final DirectBuffer buffer , final int offset , final int length , final Header header ) { final byte flags = header . flags ( ) ; Action action = Action . CONTINUE ; if ( ( flags & UNFRAGMENTED ) == UNFRAGMENTED ) { action = delegate . onFragment ( buffer , offset , length , header ) ; } else { if ( ( flags & BEGIN_FRAG_FLAG ) == BEGIN_FRAG_FLAG ) { builder . reset ( ) . append ( buffer , offset , length ) ; } else { final int limit = builder . limit ( ) ; builder . append ( buffer , offset , length ) ; if ( ( flags & END_FRAG_FLAG ) == END_FRAG_FLAG ) { final int msgLength = builder . limit ( ) ; action = delegate . onFragment ( builder . buffer ( ) , 0 , msgLength , header ) ; if ( Action . ABORT == action ) { builder . limit ( limit ) ; } else { builder . reset ( ) ; } } } } return action ; }
The implementation of {@link ControlledFragmentHandler} that reassembles and forwards whole messages.

@param buffer containing the data.
@param offset at which the data begins.
@param length of the data in bytes.
@param header representing the meta data for the data.
@return {@link io.aeron.logbuffer.ControlledFragmentHandler.Action} to be taken after processing fragment.
The implementation of { @link ControlledFragmentHandler } that reassembles and forwards whole messages .