I originally did this but it caused issues with the ordering of events (i.e. the next inbound handler starts getting raw bytes before the `ProxyProtocolMessage` is sent.) We discussed before here https://github.com/netty/netty/pull/2418#discussion-diff-11914389. 

It has to do with the way `ByteToMessageDecoder` invokes the `HAProxyProtocolDecoder.decode` method from `ByteToMessageDecoder.channelRead`. Basically, it buffers the output from `HAProxyProtocolDecoder.decode` and sends the results down the pipeline in batch *after* `HAProxyProtocolDecoder.decode` has returned. So if I remove the `HAProxyProtocolDecoder` from the pipeline inside the `HAProxyProtocolDecoder.decode` method then `ByteToMessageDecoder.handlerRemoved` is called before the `ByteToMessageDecoder.decode` method returns. `ByteToMessageDecoder.handlerRemoved` fires the next `ctx.fireChannelRead` before `ByteToMessageDecoder.channelRead` has finished which means the decoded proxy protocol message has not yet been sent.