Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/test/java/org/spongycastle/crypto/tls/test/DTLSClientTest.java')
-rw-r--r--core/src/test/java/org/spongycastle/crypto/tls/test/DTLSClientTest.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/core/src/test/java/org/spongycastle/crypto/tls/test/DTLSClientTest.java b/core/src/test/java/org/spongycastle/crypto/tls/test/DTLSClientTest.java
new file mode 100644
index 00000000..d091a132
--- /dev/null
+++ b/core/src/test/java/org/spongycastle/crypto/tls/test/DTLSClientTest.java
@@ -0,0 +1,80 @@
+package org.spongycastle.crypto.tls.test;
+
+import java.io.IOException;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.security.SecureRandom;
+
+import org.spongycastle.crypto.tls.DTLSClientProtocol;
+import org.spongycastle.crypto.tls.DTLSTransport;
+import org.spongycastle.crypto.tls.DatagramTransport;
+import org.spongycastle.crypto.tls.TlsClient;
+import org.spongycastle.crypto.tls.TlsSession;
+import org.spongycastle.crypto.tls.UDPTransport;
+
+/**
+ * A simple test designed to conduct a DTLS handshake with an external DTLS server.
+ * <p/>
+ * Please refer to GnuTLSSetup.txt or OpenSSLSetup.txt, and x509-*.pem files in this package for
+ * help configuring an external DTLS server.
+ */
+public class DTLSClientTest
+{
+ private static final SecureRandom secureRandom = new SecureRandom();
+
+ public static void main(String[] args)
+ throws Exception
+ {
+ InetAddress address = InetAddress.getLocalHost();
+ int port = 5556;
+
+ TlsSession session = createSession(address, port);
+
+ MockDTLSClient client = new MockDTLSClient(session);
+
+ DTLSTransport dtls = openDTLSConnection(address, port, client);
+
+ System.out.println("Receive limit: " + dtls.getReceiveLimit());
+ System.out.println("Send limit: " + dtls.getSendLimit());
+
+ // Send and hopefully receive a packet back
+
+ byte[] request = "Hello World!\n".getBytes("UTF-8");
+ dtls.send(request, 0, request.length);
+
+ byte[] response = new byte[dtls.getReceiveLimit()];
+ int received = dtls.receive(response, 0, response.length, 30000);
+ if (received >= 0)
+ {
+ System.out.println(new String(response, 0, received, "UTF-8"));
+ }
+
+ dtls.close();
+ }
+
+ private static TlsSession createSession(InetAddress address, int port)
+ throws IOException
+ {
+ MockDTLSClient client = new MockDTLSClient(null);
+ DTLSTransport dtls = openDTLSConnection(address, port, client);
+ TlsSession session = client.getSessionToResume();
+ dtls.close();
+ return session;
+ }
+
+ private static DTLSTransport openDTLSConnection(InetAddress address, int port, TlsClient client)
+ throws IOException
+ {
+ DatagramSocket socket = new DatagramSocket();
+ socket.connect(address, port);
+
+ int mtu = 1500;
+ DatagramTransport transport = new UDPTransport(socket, mtu);
+ transport = new UnreliableDatagramTransport(transport, secureRandom, 0, 0);
+ transport = new LoggingDatagramTransport(transport, System.out);
+
+ DTLSClientProtocol protocol = new DTLSClientProtocol(secureRandom);
+
+ return protocol.connect(client, transport);
+ }
+}