// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.util.http.hc5;

import org.apache.hc.client5.http.HttpRoute;
import org.apache.hc.client5.http.impl.DefaultSchemePortResolver;
import org.apache.hc.client5.http.impl.routing.DefaultRoutePlanner;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.routing.HttpRoutePlanner;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.protocol.HttpContext;

/**
 * {@link HttpRoutePlanner} that changes assumes requests specify the HTTP scheme,
 * and then changes this to HTTPS, keeping the other host parameters.
 *
 * @author jonmv
 */
class HttpToHttpsRoutePlanner implements HttpRoutePlanner {

    @Override
    public HttpRoute determineRoute(HttpHost target, HttpContext context) throws HttpException {
        if ( ! target.getSchemeName().equals("http"))
            throw new IllegalArgumentException("Scheme must be 'http' when using HttpToHttpsRoutePlanner, was '" + target.getSchemeName() + "'");

        if (target.getPort() == -1)
            throw new IllegalArgumentException("Port must be set when using HttpToHttpsRoutePlanner");

        if (HttpClientContext.adapt(context).getRequestConfig().getProxy() != null)
            throw new IllegalArgumentException("Proxies are not supported with HttpToHttpsRoutePlanner");

        return new HttpRoute(new HttpHost("https", target.getAddress(), target.getHostName(), target.getPort()));
    }

}

@@ -188,142 +188,8 @@
 te;%0A
-import org.apache.hc.client5.http.impl.DefaultSchemePortResolver;%0Aimport org.apache.hc.client5.http.impl.routing.DefaultRoutePlanner;%0A
 impo
@@ -855,16 +855,60 @@
 (%22http%22)
+ && ! target.getSchemeName().equals(%22https%22)
 )%0A      
@@ -970,16 +970,27 @@
 e 'http'
+ or 'https'
  when us

Allow 'https' in scheme