@@ -0,0 +1,1246 @@
+/*%0A * Copyright 2012 The Netty Project%0A *%0A * The Netty Project licenses this file to you under the Apache License,%0A * version 2.0 (the %22License%22); you may not use this file except in compliance%0A * with the License. You may obtain a copy of the License at:%0A *%0A *   http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS, WITHOUT%0A * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the%0A * License for the specific language governing permissions and limitations%0A * under the License.%0A */%0Apackage io.netty.channel;%0A%0A/**%0A * ChannelFutureListener implementation which takes another ChannelFuture and notifies it%0A * once the operationComplete method was called.%0A */%0Apublic final class ChannelFutureNotifier implements ChannelFutureListener %7B%0A    private final ChannelFuture future;%0A%0A    public ChannelFutureNotifier(ChannelFuture future) %7B%0A        this.future = future;%0A    %7D%0A%0A    @Override%0A    public void operationComplete(ChannelFuture cf) throws Exception %7B%0A        if (cf.isSuccess()) %7B%0A            future.setSuccess();%0A        %7D else %7B%0A            future.setFailure(cf.cause());%0A        %7D%0A    %7D%0A%7D%0A

Make sure the handshake ChannelFuture is notified after the right encoder is present in the ChannelPipeline