org.bouncycastle.crypto.tls.test.DTLSServerTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-jdk14 Show documentation
Show all versions of bcprov-jdk14 Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.4.
package org.bouncycastle.crypto.tls.test;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketTimeoutException;
import java.security.SecureRandom;
import org.bouncycastle.crypto.tls.DTLSServerProtocol;
import org.bouncycastle.crypto.tls.DTLSTransport;
import org.bouncycastle.crypto.tls.DatagramTransport;
import org.bouncycastle.crypto.tls.UDPTransport;
/**
* A simple test designed to conduct a DTLS handshake with an external DTLS client.
*
* Please refer to GnuTLSSetup.txt or OpenSSLSetup.txt, and x509-*.pem files in this package for
* help configuring an external DTLS client.
*/
public class DTLSServerTest
{
public static void main(String[] args)
throws Exception
{
InetAddress address = InetAddress.getLocalHost();
int port = 5556;
int mtu = 1500;
SecureRandom secureRandom = new SecureRandom();
DTLSServerProtocol serverProtocol = new DTLSServerProtocol(secureRandom);
byte[] data = new byte[mtu];
DatagramPacket packet = new DatagramPacket(data, mtu);
DatagramSocket socket = new DatagramSocket(port, address);
socket.receive(packet);
System.out.println("Accepting connection from " + packet.getAddress().getHostAddress() + ":" + port);
socket.connect(packet.getAddress(), packet.getPort());
/*
* NOTE: For simplicity, and since we don't yet have HelloVerifyRequest support, we just
* discard the initial packet, which the client should re-send anyway.
*/
DatagramTransport transport = new UDPTransport(socket, mtu);
// Uncomment to see packets
// transport = new LoggingDatagramTransport(transport, System.out);
MockDTLSServer server = new MockDTLSServer();
DTLSTransport dtlsServer = serverProtocol.accept(server, transport);
byte[] buf = new byte[dtlsServer.getReceiveLimit()];
while (!socket.isClosed())
{
try
{
int length = dtlsServer.receive(buf, 0, buf.length, 60000);
if (length >= 0)
{
System.out.write(buf, 0, length);
dtlsServer.send(buf, 0, length);
}
}
catch (SocketTimeoutException ste)
{
}
}
dtlsServer.close();
}
}