Skip to content

Package: SSLEchoServer

SSLEchoServer

nameinstructionbranchcomplexitylinemethod
SSLEchoServer()
M: 3 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
initializeSSL()
M: 42 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
main(String[])
M: 66 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 17 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*
2: * Copyright (c) 2009, 2020 Oracle and/or its affiliates. All rights reserved.
3: *
4: * This program and the accompanying materials are made available under the
5: * terms of the Eclipse Distribution License v. 1.0, which is available at
6: * http://www.eclipse.org/org/documents/edl-v10.php.
7: *
8: * SPDX-License-Identifier: BSD-3-Clause
9: */
10:
11: package org.glassfish.grizzly.samples.ssl;
12:
13: import java.io.IOException;
14: import java.net.URL;
15: import java.nio.charset.Charset;
16:
17: import org.glassfish.grizzly.filterchain.FilterChainBuilder;
18: import org.glassfish.grizzly.filterchain.TransportFilter;
19: import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
20: import org.glassfish.grizzly.nio.transport.TCPNIOTransportBuilder;
21: import org.glassfish.grizzly.samples.echo.EchoFilter;
22: import org.glassfish.grizzly.ssl.SSLContextConfigurator;
23: import org.glassfish.grizzly.ssl.SSLEngineConfigurator;
24: import org.glassfish.grizzly.ssl.SSLFilter;
25: import org.glassfish.grizzly.utils.StringFilter;
26:
27: /**
28: * Class initializes and starts the SSL echo server, based on Grizzly 2.0 We use the {@link EchoFilter} from echo
29: * example.
30: *
31: * @see SSLFilter
32: * @see SSLContextConfigurator
33: * @see SSLEngineConfigurator
34: *
35: * @author Alexey Stashok
36: */
37: public class SSLEchoServer {
38: public static final String HOST = "localhost";
39: public static final int PORT = 7777;
40:
41: public static void main(String[] args) throws IOException {
42: // Create a FilterChain using FilterChainBuilder
43: FilterChainBuilder filterChainBuilder = FilterChainBuilder.stateless();
44: // Add TransportFilter, which is responsible
45: // for reading and writing data to the connection
46: filterChainBuilder.add(new TransportFilter());
47:
48: // Initialize and add SSLFilter
49: final SSLEngineConfigurator serverConfig = initializeSSL();
50: final SSLEngineConfigurator clientConfig = serverConfig.copy().setClientMode(true);
51:
52: filterChainBuilder.add(new SSLFilter(serverConfig, clientConfig));
53:
54: // Add StringFilter, which will be responsible for Buffer <-> String transformation
55: filterChainBuilder.add(new StringFilter(Charset.forName("UTF-8")));
56:
57: // Use the plain EchoFilter
58: filterChainBuilder.add(new EchoFilter());
59:
60: // Create TCP transport
61: final TCPNIOTransport transport = TCPNIOTransportBuilder.newInstance().build();
62: transport.setProcessor(filterChainBuilder.build());
63:
64: try {
65: // binding transport to start listen on certain host and port
66: transport.bind(HOST, PORT);
67:
68: // start the transport
69: transport.start();
70:
71: System.out.println("Press any key to stop the server...");
72: System.in.read();
73: } finally {
74: System.out.println("Stopping transport...");
75: // stop the transport
76: transport.shutdownNow();
77:
78: System.out.println("Stopped transport...");
79: }
80: }
81:
82: /**
83: * Initialize server side SSL configuration.
84: *
85: * @return server side {@link SSLEngineConfigurator}.
86: */
87: private static SSLEngineConfigurator initializeSSL() {
88: // Initialize SSLContext configuration
89: SSLContextConfigurator sslContextConfig = new SSLContextConfigurator();
90:
91: // Set key store
92: ClassLoader cl = SSLEchoServer.class.getClassLoader();
93: URL cacertsUrl = cl.getResource("ssltest-cacerts.jks");
94:• if (cacertsUrl != null) {
95: sslContextConfig.setTrustStoreFile(cacertsUrl.getFile());
96: sslContextConfig.setTrustStorePass("changeit");
97: }
98:
99: // Set trust store
100: URL keystoreUrl = cl.getResource("ssltest-keystore.jks");
101:• if (keystoreUrl != null) {
102: sslContextConfig.setKeyStoreFile(keystoreUrl.getFile());
103: sslContextConfig.setKeyStorePass("changeit");
104: }
105:
106: // Create SSLEngine configurator
107: return new SSLEngineConfigurator(sslContextConfig.createSSLContext(), false, false, false);
108: }
109: }