package org.bouncycastle.crypto.tls.test; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.security.SecureRandom; import org.bouncycastle.crypto.tls.TlsServerProtocol; import org.bouncycastle.util.io.Streams; import org.bouncycastle.util.io.TeeOutputStream; /** * A simple test designed to conduct a TLS handshake with an external TLS client. * <p> * Please refer to GnuTLSSetup.html or OpenSSLSetup.html (under 'docs'), and x509-*.pem files in * this package (under 'src/test/resources') for help configuring an external TLS client. * </p> */ public class TlsServerTest { private static final SecureRandom secureRandom = new SecureRandom(); public static void main(String[] args) throws Exception { InetAddress address = InetAddress.getLocalHost(); int port = 5556; ServerSocket ss = new ServerSocket(port, 16, address); try { while (true) { Socket s = ss.accept(); System.out.println("--------------------------------------------------------------------------------"); System.out.println("Accepted " + s); ServerThread t = new ServerThread(s); t.start(); } } finally { ss.close(); } } static class ServerThread extends Thread { private final Socket s; ServerThread(Socket s) { this.s = s; } public void run() { try { MockTlsServer server = new MockTlsServer(); TlsServerProtocol serverProtocol = new TlsServerProtocol(s.getInputStream(), s.getOutputStream(), secureRandom); serverProtocol.accept(server); OutputStream log = new TeeOutputStream(serverProtocol.getOutputStream(), System.out); Streams.pipeAll(serverProtocol.getInputStream(), log); serverProtocol.close(); } catch (Exception e) { throw new RuntimeException(e); } finally { try { s.close(); } catch (IOException e) { } finally { } } } } }