summary refs log tree commit diff
path: root/crypto/src/tls/TlsProtocol.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/tls/TlsProtocol.cs')
-rw-r--r--crypto/src/tls/TlsProtocol.cs22
1 files changed, 22 insertions, 0 deletions
diff --git a/crypto/src/tls/TlsProtocol.cs b/crypto/src/tls/TlsProtocol.cs
index 57b452f60..c30c253e1 100644
--- a/crypto/src/tls/TlsProtocol.cs
+++ b/crypto/src/tls/TlsProtocol.cs
@@ -1074,6 +1074,28 @@ namespace Org.BouncyCastle.Tls
             return SafePreviewRecordHeader(recordHeader);
         }
 
+        public virtual int PreviewOutputRecord()
+        {
+            if (m_blocking)
+                throw new InvalidOperationException("Cannot use PreviewOutputRecord() in blocking mode!");
+
+            ByteQueue buffer = m_outputBuffer.Buffer;
+            int available = buffer.Available;
+            if (available < 1)
+                return 0;
+
+            if (available >= RecordFormat.FragmentOffset)
+            {
+                int length = buffer.ReadUint16(RecordFormat.LengthOffset);
+                int recordSize = RecordFormat.FragmentOffset + length;
+
+                if (available >= recordSize)
+                    return recordSize;
+            }
+
+            throw new InvalidOperationException("Can only use PreviewOutputRecord() for record-aligned output.");
+        }
+
         /// <exception cref="IOException"/>
         public virtual RecordPreview PreviewOutputRecord(int applicationDataSize)
         {