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/MockDatagramAssociation.java')
-rw-r--r--core/src/test/java/org/spongycastle/crypto/tls/test/MockDatagramAssociation.java110
1 files changed, 110 insertions, 0 deletions
diff --git a/core/src/test/java/org/spongycastle/crypto/tls/test/MockDatagramAssociation.java b/core/src/test/java/org/spongycastle/crypto/tls/test/MockDatagramAssociation.java
new file mode 100644
index 00000000..92bc6c1c
--- /dev/null
+++ b/core/src/test/java/org/spongycastle/crypto/tls/test/MockDatagramAssociation.java
@@ -0,0 +1,110 @@
+package org.spongycastle.crypto.tls.test;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.util.Vector;
+
+import org.spongycastle.crypto.tls.DatagramTransport;
+
+public class MockDatagramAssociation
+{
+ private int mtu;
+ private MockDatagramTransport client, server;
+
+ public MockDatagramAssociation(int mtu)
+ {
+ this.mtu = mtu;
+
+ Vector clientQueue = new Vector();
+ Vector serverQueue = new Vector();
+
+ this.client = new MockDatagramTransport(clientQueue, serverQueue);
+ this.server = new MockDatagramTransport(serverQueue, clientQueue);
+ }
+
+ public DatagramTransport getClient()
+ {
+ return client;
+ }
+
+ public DatagramTransport getServer()
+ {
+ return server;
+ }
+
+ private class MockDatagramTransport
+ implements DatagramTransport
+ {
+ private Vector receiveQueue, sendQueue;
+
+ MockDatagramTransport(Vector receiveQueue, Vector sendQueue)
+ {
+ this.receiveQueue = receiveQueue;
+ this.sendQueue = sendQueue;
+ }
+
+ public int getReceiveLimit()
+ throws IOException
+ {
+ return mtu;
+ }
+
+ public int getSendLimit()
+ throws IOException
+ {
+ return mtu;
+ }
+
+ public int receive(byte[] buf, int off, int len, int waitMillis)
+ throws IOException
+ {
+ synchronized (receiveQueue)
+ {
+ if (receiveQueue.isEmpty())
+ {
+ try
+ {
+ receiveQueue.wait(waitMillis);
+ }
+ catch (InterruptedException e)
+ {
+ // TODO Keep waiting until full wait expired?
+ }
+ if (receiveQueue.isEmpty())
+ {
+ return -1;
+ }
+ }
+ DatagramPacket packet = (DatagramPacket)receiveQueue.remove(0);
+ int copyLength = Math.min(len, packet.getLength());
+ System.arraycopy(packet.getData(), packet.getOffset(), buf, off, copyLength);
+ return copyLength;
+ }
+ }
+
+ public void send(byte[] buf, int off, int len)
+ throws IOException
+ {
+ if (len > mtu)
+ {
+ // TODO Simulate rejection?
+ }
+
+ byte[] copy = new byte[len];
+ System.arraycopy(buf, off, copy, 0, len);
+ DatagramPacket packet = new DatagramPacket(copy, len);
+
+ synchronized (sendQueue)
+ {
+ sendQueue.addElement(packet);
+ sendQueue.notify();
+ }
+ }
+
+ public void close()
+ throws IOException
+ {
+ // TODO?
+ }
+ }
+}