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