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