001package lucee.runtime.net.http.sni; 002 003import java.io.IOException; 004import java.net.Socket; 005 006import javax.net.ssl.HostnameVerifier; 007import javax.net.ssl.SSLContext; 008 009import org.apache.http.conn.ssl.SSLConnectionSocketFactory; 010import org.apache.http.protocol.HttpContext; 011 012public class SSLConnectionSocketFactoryImpl extends SSLConnectionSocketFactory { 013 014 public static final String ENABLE_SNI = "*.disable.sni"; 015 016 /* 017 * Implement any constructor you need for your particular application - 018 * SSLConnectionSocketFactory has many variants 019 */ 020 public SSLConnectionSocketFactoryImpl(final SSLContext sslContext, final HostnameVerifier verifier) { 021 super(sslContext, verifier); 022 } 023 public SSLConnectionSocketFactoryImpl(final SSLContext sslContext) { 024 super(sslContext); 025 } 026 027 @Override 028 public Socket createLayeredSocket( 029 final Socket socket, 030 final String target, 031 final int port, 032 final HttpContext context) throws IOException { 033 Boolean enableSniValue = (Boolean) context.getAttribute(ENABLE_SNI); 034 boolean enableSni = enableSniValue == null || enableSniValue; 035 return super.createLayeredSocket(socket, enableSni ? target : ENABLE_SNI, port, context); 036 } 037}