}
final Set<Integer> finalExpectedStatuses = expectedStatuses;
try {
HttpClientRequest request = client.request(method, url, new Handler<HttpClientResponse>() {
@Override
public void handle(final HttpClientResponse response) {
// Short circuit, no need to wait for response end
if (writeStream == null) {
if (finalExpectedStatuses.contains(response.statusCode())) {
d.getResolver().resolve(response);
} else {
d.getResolver().reject(response);
}
return;
}
Pump.createPump(response, writeStream).start();
response.endHandler(new Handler<Void>() {
@Override
public void handle(Void event) {
if (finalExpectedStatuses.contains(response.statusCode())) {
d.getResolver().resolve(response);
} else {
d.getResolver().reject(response);
}
}
});
}
});
request.exceptionHandler(new Handler<Throwable>() {
@Override
public void handle(Throwable t) {
d.getResolver().reject(t);
}
});
if (setupHandler != null) {
setupHandler.handle(request);
} else {
request.end();
}
} catch (Throwable t) {
d.getResolver().reject(t);
}