public <T> void writeRequest(NettyResponseFuture<T> future, Channel channel) {
NettyRequest nettyRequest = future.getNettyRequest();
HttpRequest httpRequest = nettyRequest.getHttpRequest();
AsyncHandler<T> handler = future.getAsyncHandler();
if (!Channels.isChannelValid(channel))
return;
try {
if (handler instanceof TransferCompletionHandler)
configureTransferAdapter(handler, httpRequest);
if (!future.isHeadersAlreadyWrittenOnContinue()) {
if (future.getAsyncHandler() instanceof AsyncHandlerExtensions)
AsyncHandlerExtensions.class.cast(future.getAsyncHandler()).onSendRequest(nettyRequest);
channel.write(httpRequest).addListener(new ProgressListener(config, future.getAsyncHandler(), future, true));
}
if (nettyRequest.getBody() != null && !future.isDontWriteBodyBecauseExpectContinue() && httpRequest.getMethod() != HttpMethod.CONNECT)
nettyRequest.getBody().write(channel, future, config);
if (Channels.isChannelValid(channel))
scheduleTimeouts(future);
} catch (Throwable t) {
LOGGER.error("Can't write request", t);
Channels.silentlyCloseChannel(channel);
}
}