package lucee.runtime.net.http.sni; import java.io.IOException; import java.net.InetSocketAddress; import javax.net.ssl.SSLProtocolException; import org.apache.http.HttpHost; import org.apache.http.config.SocketConfig; import org.apache.http.conn.ManagedHttpClientConnection; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.impl.conn.DefaultHttpClientConnectionOperator; import org.apache.http.protocol.HttpContext; import org.apache.http.config.Lookup; public class DefaultHttpClientConnectionOperatorImpl extends DefaultHttpClientConnectionOperator { public DefaultHttpClientConnectionOperatorImpl(Lookup<ConnectionSocketFactory> socketFactoryRegistry) { super(socketFactoryRegistry, null, null); } @Override public void connect( final ManagedHttpClientConnection conn, final HttpHost host, final InetSocketAddress localAddress, final int connectTimeout, final SocketConfig socketConfig, final HttpContext context) throws IOException { try { super.connect(conn, host, localAddress, connectTimeout, socketConfig, context); } catch (SSLProtocolException e) { Boolean enableSniValue = (Boolean) context.getAttribute(SSLConnectionSocketFactoryImpl.ENABLE_SNI); boolean enableSni = enableSniValue == null || enableSniValue; if (enableSni && e.getMessage() != null && e.getMessage().equals("handshake alert: unrecognized_name")) { //print.e("Server received saw wrong SNI host, retrying without SNI"); context.setAttribute(SSLConnectionSocketFactoryImpl.ENABLE_SNI, false); super.connect(conn, host, localAddress, connectTimeout, socketConfig, context); } else throw e; } } }