private static int guessServerPort(SessionProtocol sessionProtocol, @Nullable String authority) { if (authority == null) { return sessionProtocol.defaultPort(); } final int lastColonPos = authority.lastIndexOf(':'); if (lastColonPos < 0) { return sessionProtocol.defaultPort(); } final int port; try { port = Integer.parseInt(authority.substring(lastColonPos + 1)); } catch (NumberFormatException e) { return sessionProtocol.defaultPort(); } if (port <= 0 || port >= 65536) { return sessionProtocol.defaultPort(); } return port; }
remoteAddress.getHostString(), remoteAddress.getPort(), H1C.defaultPort());
if (port == sessionProtocol.defaultPort()) { authority = hostname; } else {
final int port = ((InetSocketAddress) sCtx.remoteAddress()).getPort(); final String hostname = sCtx.virtualHost().defaultHostname(); if (port == ctx.sessionProtocol().defaultPort()) { authority = hostname; } else { authority = endpoint.authority(); } else { final int defaultPort = cCtx.sessionProtocol().defaultPort(); final int port = endpoint.port(defaultPort); if (port == defaultPort) {
private HttpEndpointHealthChecker( ClientFactory clientFactory, Endpoint endpoint, SessionProtocol protocol, String healthCheckPath, int healthCheckPort, Function<? super ClientOptionsBuilder, ClientOptionsBuilder> configurator) { final String scheme = protocol.uriText(); final String ipAddr = endpoint.ipAddr(); final HttpClientBuilder builder; if (ipAddr == null) { builder = new HttpClientBuilder(scheme + "://" + endpoint.authority()); } else { final int port = healthCheckPort > 0 ? healthCheckPort : endpoint.port(protocol.defaultPort()); if (endpoint.ipFamily() == StandardProtocolFamily.INET) { builder = new HttpClientBuilder(scheme + "://" + ipAddr + ':' + port); } else { builder = new HttpClientBuilder(scheme + "://[" + ipAddr + "]:" + port); } builder.setHttpHeader(HttpHeaderNames.AUTHORITY, endpoint.authority()); } httpClient = builder.factory(clientFactory) .options(configurator.apply(new ClientOptionsBuilder()).build()) .build(); this.healthCheckPath = healthCheckPath; }
@Override public HttpResponse execute(ClientRequestContext ctx, HttpRequest req) throws Exception { if (!isValidPath(req)) { final IllegalArgumentException cause = new IllegalArgumentException("invalid path: " + req.path()); handleEarlyRequestException(ctx, req, cause); return HttpResponse.ofFailure(cause); } final Endpoint endpoint = ctx.endpoint().resolve(ctx) .withDefaultPort(ctx.sessionProtocol().defaultPort()); final EventLoop eventLoop = ctx.eventLoop(); final DecodedHttpResponse res = new DecodedHttpResponse(eventLoop); if (endpoint.hasIpAddr()) { // IP address has been resolved already. acquireConnectionAndExecute(ctx, endpoint, endpoint.ipAddr(), req, res); } else { // IP address has not been resolved yet. final Future<InetSocketAddress> resolveFuture = addressResolverGroup.getResolver(eventLoop) .resolve(InetSocketAddress.createUnresolved(endpoint.host(), endpoint.port())); if (resolveFuture.isDone()) { finishResolve(ctx, endpoint, resolveFuture, req, res); } else { resolveFuture.addListener( (FutureListener<InetSocketAddress>) future -> finishResolve(ctx, endpoint, future, req, res)); } } return res; }
final int port = ((InetSocketAddress) sCtx.remoteAddress()).getPort(); final String hostname = sCtx.virtualHost().defaultHostname(); if (port == ctx.sessionProtocol().defaultPort()) { authority = hostname; } else { authority = endpoint.authority(); } else { final int defaultPort = cCtx.sessionProtocol().defaultPort(); final int port = endpoint.port(defaultPort); if (port == defaultPort) {
final int port = ((InetSocketAddress) sCtx.remoteAddress()).getPort(); final String hostname = sCtx.virtualHost().defaultHostname(); if (port == ctx.sessionProtocol().defaultPort()) { authority = hostname; } else { authority = endpoint.authority(); } else { final int defaultPort = cCtx.sessionProtocol().defaultPort(); final int port = endpoint.port(defaultPort); if (port == defaultPort) {