Home | History | Annotate | Download | only in conscrypt
      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