private static void internalSendContinueResponse(final HttpServerExchange exchange, final IoCallback callback) {
HttpServerExchange newExchange = exchange.getConnection().sendOutOfBandResponse(exchange);
newExchange.setResponseCode(100);
newExchange.getResponseHeaders().put(Headers.CONTENT_LENGTH, 0);
final StreamSinkChannel responseChannel = newExchange.getResponseChannel();
try {
responseChannel.shutdownWrites();
if (!responseChannel.flush()) {
responseChannel.getWriteSetter().set(ChannelListeners.flushingChannelListener(
new ChannelListener<StreamSinkChannel>() {
@Override
public void handleEvent(StreamSinkChannel channel) {
channel.suspendWrites();
callback.onComplete(exchange, null);
}
}, new ChannelExceptionHandler<Channel>() {
@Override
public void handleException(Channel channel, IOException e) {
callback.onException(exchange, null, e);
}
}
));
responseChannel.resumeWrites();
} else {
callback.onComplete(exchange, null);
}
} catch (IOException e) {
callback.onException(exchange, null, e);