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:
authorPeter Dettman <peter.dettman@bouncycastle.org>2013-06-20 08:28:27 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2013-06-20 08:28:27 +0400
commitb3668d95f4214f730bd5ef50a608e4ca15fd1d8e (patch)
tree7bca51fc65c8b6800066d8eb1f56064d8729ca01 /core/src/main/java/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java
parentdfee9e568286fd2875f9ad2beb887a73682e8b2e (diff)
Subclass ByteArrayOutputStream to avoid unnecessary copy of byte[]
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java')
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java40
1 files changed, 23 insertions, 17 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java b/core/src/main/java/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java
index 38192513..6fcaa952 100644
--- a/core/src/main/java/org/bouncycastle/crypto/tls/DTLSReliableHandshake.java
+++ b/core/src/main/java/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 final 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;
+ }
+ }
}