001package lucee.runtime.net.http.sni; 002 003import java.io.IOException; 004import java.net.InetSocketAddress; 005 006import javax.net.ssl.SSLProtocolException; 007 008import org.apache.http.HttpHost; 009import org.apache.http.config.SocketConfig; 010import org.apache.http.conn.ManagedHttpClientConnection; 011import org.apache.http.conn.socket.ConnectionSocketFactory; 012import org.apache.http.impl.conn.DefaultHttpClientConnectionOperator; 013import org.apache.http.protocol.HttpContext; 014import org.apache.http.config.Lookup; 015 016public class DefaultHttpClientConnectionOperatorImpl extends DefaultHttpClientConnectionOperator { 017 018 public DefaultHttpClientConnectionOperatorImpl(Lookup<ConnectionSocketFactory> socketFactoryRegistry) { 019 super(socketFactoryRegistry, null, null); 020 } 021 022 @Override 023 public void connect( 024 final ManagedHttpClientConnection conn, 025 final HttpHost host, 026 final InetSocketAddress localAddress, 027 final int connectTimeout, 028 final SocketConfig socketConfig, 029 final HttpContext context) throws IOException { 030 try { 031 super.connect(conn, host, localAddress, connectTimeout, socketConfig, context); 032 } 033 catch (SSLProtocolException e) { 034 Boolean enableSniValue = (Boolean) context.getAttribute(SSLConnectionSocketFactoryImpl.ENABLE_SNI); 035 boolean enableSni = enableSniValue == null || enableSniValue; 036 if (enableSni && e.getMessage() != null && e.getMessage().equals("handshake alert: unrecognized_name")) { 037 //print.e("Server received saw wrong SNI host, retrying without SNI"); 038 context.setAttribute(SSLConnectionSocketFactoryImpl.ENABLE_SNI, false); 039 super.connect(conn, host, localAddress, connectTimeout, socketConfig, context); 040 } 041 else throw e; 042 } 043 } 044}