//set read and write timeouts
if (channel.supportsOption(Options.READ_TIMEOUT)) {
readChannel = new ReadTimeoutStreamSourceChannel(readChannel);
}
if (channel.supportsOption(Options.WRITE_TIMEOUT)) {
writeChannel = new WriteTimeoutStreamSinkChannel(writeChannel);
}
final PushBackStreamChannel pushBackStreamChannel = new PushBackStreamChannel(readChannel);
final AssembledConnectedStreamChannel assembledChannel;
if (channel instanceof SslChannel) {
assembledChannel = new AssembledConnectedSslStreamChannel((SslChannel) channel, readChannel, writeChannel);