public ChannelConnector(Request request, ProxyServer proxy, boolean useProxy, AsyncHandler<?> asyncHandler) throws UnknownHostException {
this.asyncHandlerExtensions = asyncHandler instanceof AsyncHandlerExtensions ? (AsyncHandlerExtensions) asyncHandler : null;
NameResolution[] resolutions;
Uri uri = request.getUri();
int port = uri.getExplicitPort();
if (request.getInetAddress() != null) {
resolutions = new NameResolution[] { new NameResolution(request.getInetAddress()) };
} else if (!useProxy || ignoreProxy(proxy, uri.getHost())) {
resolutions = request.getNameResolver().resolve(uri.getHost());
} else {
resolutions = request.getNameResolver().resolve(proxy.getHost());
port = uri.isSecured() ? proxy.getSecuredPort(): proxy.getPort();
}
if (asyncHandlerExtensions != null)
asyncHandlerExtensions.onDnsResolved(resolutions);
remoteAddresses = new InetSocketAddress[resolutions.length];
for (int i = 0; i < resolutions.length; i ++) {
remoteAddresses[i] = new InetSocketAddress(resolutions[i].address, port);
}
if (request.getLocalAddress() != null) {
localAddress = new InetSocketAddress(request.getLocalAddress(), 0);
} else {
localAddress = null;
}
}