@Override
                    public void completed() {
                        if (!execRuntime.isEndpointConnected()) {
                            // Remote endpoint disconnected. Need to start over
                            if (LOG.isDebugEnabled()) {
                                LOG.debug("{} proxy disconnected", exchangeId);
                            }
                            state.tracker.reset();
                        }
                        if (state.challenged) {
                            if (LOG.isDebugEnabled()) {
                                LOG.debug("{} proxy authentication required", exchangeId);
                            }
                            proceedToNextHop(state, request, entityProducer, scope, chain, asyncExecCallback);
                        } else {
                            if (state.tunnelRefused) {
                                if (LOG.isDebugEnabled()) {
                                    LOG.debug("{} tunnel refused", exchangeId);
                                }
                                asyncExecCallback.completed();
                            } else {
                                if (LOG.isDebugEnabled()) {
                                    LOG.debug("{} tunnel to target created", exchangeId);
                                }
                                tracker.tunnelTarget(false);
                                proceedToNextHop(state, request, entityProducer, scope, chain, asyncExecCallback);
                            }
                        }
                    }
Request execution handler in the asynchronous request execution chain
that is responsible for establishing connection to the target
origin server as specified by the current connection route.

@since 5.0
httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncConnectExec.java