SocketType.java revision 486db2f3e9558c712c4ae394973631caedbe5256
1package org.conscrypt; 2 3import java.io.IOException; 4import java.security.Provider; 5import javax.net.ssl.SSLContext; 6import javax.net.ssl.SSLServerSocketFactory; 7import javax.net.ssl.SSLSocketFactory; 8 9/** 10 * Utility for creating test client and server instances. 11 */ 12@SuppressWarnings("ImmutableEnumChecker") 13public enum SocketType { 14 JDK(newJdkFactories()), 15 CONSCRYPT(newConscryptFactories(false)), 16 CONSCRYPT_ENGINE(newConscryptFactories(true)); 17 18 private final Factories factories; 19 20 SocketType(Factories factories) { 21 this.factories = factories; 22 } 23 24 ClientEndpoint newClient(ChannelType channelType, int port, String[] protocols, 25 String[] ciphers) throws IOException { 26 return new ClientEndpoint( 27 factories.clientFactory, channelType, port, protocols, ciphers); 28 } 29 30 ServerEndpoint newServer(ChannelType channelType, int messageSize, 31 String[] protocols, String[] ciphers) throws IOException { 32 return new ServerEndpoint(factories.serverFactory, factories.serverSocketFactory, 33 channelType, messageSize, protocols, ciphers); 34 } 35 36 private static final class Factories { 37 final SSLSocketFactory clientFactory; 38 final SSLSocketFactory serverFactory; 39 final SSLServerSocketFactory serverSocketFactory; 40 41 private Factories(SSLSocketFactory clientFactory, SSLSocketFactory serverFactory, 42 SSLServerSocketFactory serverSocketFactory) { 43 this.clientFactory = clientFactory; 44 this.serverFactory = serverFactory; 45 this.serverSocketFactory = serverSocketFactory; 46 } 47 } 48 49 private static Factories newJdkFactories() { 50 Provider provider = TestUtils.getJdkProvider(); 51 SSLContext clientContext = TestUtils.newClientSslContext(provider); 52 SSLContext serverContext = TestUtils.newServerSslContext(provider); 53 final SSLSocketFactory clientFactory = clientContext.getSocketFactory(); 54 final SSLSocketFactory serverFactory = serverContext.getSocketFactory(); 55 final SSLServerSocketFactory serverSocketFactory = serverContext.getServerSocketFactory(); 56 return new Factories(clientFactory, serverFactory, serverSocketFactory); 57 } 58 59 private static Factories newConscryptFactories(boolean useEngineSocket) { 60 Provider provider = TestUtils.getConscryptProvider(); 61 SSLContext clientContext = TestUtils.newClientSslContext(provider); 62 SSLContext serverContext = TestUtils.newServerSslContext(provider); 63 final SSLSocketFactory clientFactory = clientContext.getSocketFactory(); 64 final SSLSocketFactory serverFactory = serverContext.getSocketFactory(); 65 final SSLServerSocketFactory serverSocketFactory = serverContext.getServerSocketFactory(); 66 TestUtils.setUseEngineSocket(clientFactory, useEngineSocket); 67 TestUtils.setUseEngineSocket(serverFactory, useEngineSocket); 68 TestUtils.setUseEngineSocket(serverSocketFactory, useEngineSocket); 69 return new Factories(clientFactory, serverFactory, serverSocketFactory); 70 } 71} 72