diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-06-22 09:49:18 +0400 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2013-06-22 09:49:18 +0400 |
commit | 2a064b5e4a2d6679facc82f225cce47639123e7a (patch) | |
tree | e37302fac9849f1052eb9818baffef8478287d01 /core/src/main/jdk1.1 | |
parent | 83fa427fedbc6d0fcfef5e28cc0b9a2036b41806 (diff) |
Backport of recent changes
Diffstat (limited to 'core/src/main/jdk1.1')
-rw-r--r-- | core/src/main/jdk1.1/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java | 40 | ||||
-rw-r--r-- | core/src/main/jdk1.1/org/bouncycastle/crypto/tls/UDPTransport.java | 13 |
2 files changed, 29 insertions, 24 deletions
diff --git a/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java b/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java index adb91584..d50c325f 100644 --- a/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java +++ b/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java @@ -10,7 +10,6 @@ import org.bouncycastle.util.Integers; class DTLSReliableHandshake { - private final static int MAX_RECEIVE_AHEAD = 10; private DTLSRecordLayer recordLayer; @@ -46,7 +45,6 @@ class DTLSReliableHandshake void sendMessage(short msg_type, byte[] body) throws IOException { - if (!sending) { checkInboundFlight(); @@ -65,7 +63,6 @@ class DTLSReliableHandshake Message receiveMessage() throws IOException { - if (sending) { sending = false; @@ -93,7 +90,6 @@ class DTLSReliableHandshake for (; ; ) { - int receiveLimit = recordLayer.getReceiveLimit(); if (buf == null || buf.length < receiveLimit) { @@ -337,7 +333,6 @@ class DTLSReliableHandshake private void writeMessage(Message message) throws IOException { - int sendLimit = recordLayer.getSendLimit(); int fragmentLimit = sendLimit - 12; @@ -364,18 +359,15 @@ class DTLSReliableHandshake private void writeHandshakeFragment(Message message, int fragment_offset, int fragment_length) throws IOException { - - ByteArrayOutputStream buf = new ByteArrayOutputStream(); - TlsUtils.writeUint8(message.getType(), buf); - TlsUtils.writeUint24(message.getBody().length, buf); - TlsUtils.writeUint16(message.getSeq(), buf); - TlsUtils.writeUint24(fragment_offset, buf); - TlsUtils.writeUint24(fragment_length, buf); - buf.write(message.getBody(), fragment_offset, fragment_length); - - byte[] fragment = buf.toByteArray(); - - recordLayer.send(fragment, 0, fragment.length); + RecordLayerBuffer fragment = new RecordLayerBuffer(12 + fragment_length); + TlsUtils.writeUint8(message.getType(), fragment); + TlsUtils.writeUint24(message.getBody().length, fragment); + TlsUtils.writeUint16(message.getSeq(), fragment); + TlsUtils.writeUint24(fragment_offset, fragment); + TlsUtils.writeUint24(fragment_length, fragment); + fragment.write(message.getBody(), fragment_offset, fragment_length); + + fragment.sendToRecordLayer(recordLayer); } private static boolean checkAll(Hashtable inboundFlight) @@ -429,4 +421,18 @@ class DTLSReliableHandshake return body; } } + + private static class RecordLayerBuffer extends ByteArrayOutputStream + { + RecordLayerBuffer(int size) + { + super(size); + } + + void sendToRecordLayer(DTLSRecordLayer recordLayer) throws IOException + { + recordLayer.send(buf, 0, count); + buf = null; + } + } } diff --git a/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/UDPTransport.java b/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/UDPTransport.java index f65468e5..f6c96b92 100644 --- a/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/UDPTransport.java +++ b/core/src/main/jdk1.1/org/bouncycastle/crypto/tls/UDPTransport.java @@ -7,13 +7,12 @@ import java.net.DatagramSocket; public class UDPTransport implements DatagramTransport { + protected final static int MIN_IP_OVERHEAD = 20; + protected final static int MAX_IP_OVERHEAD = MIN_IP_OVERHEAD + 64; + protected final static int UDP_OVERHEAD = 8; - private final static int MIN_IP_OVERHEAD = 20; - private final static int MAX_IP_OVERHEAD = MIN_IP_OVERHEAD + 64; - private final static int UDP_OVERHEAD = 8; - - private final DatagramSocket socket; - private final int receiveLimit, sendLimit; + protected final DatagramSocket socket; + protected final int receiveLimit, sendLimit; public UDPTransport(DatagramSocket socket, int mtu) throws IOException @@ -80,7 +79,7 @@ public class UDPTransport * the DTLS implementation SHOULD generate an error, thus avoiding sending a packet * which will be fragmented." */ - // TODO Exception + throw new TlsFatalAlert(AlertDescription.internal_error); } if (off == 0) |