summary refs log tree commit diff
path: root/crypto/src/tls/TlsSessionImpl.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/tls/TlsSessionImpl.cs')
-rw-r--r--crypto/src/tls/TlsSessionImpl.cs52
1 files changed, 52 insertions, 0 deletions
diff --git a/crypto/src/tls/TlsSessionImpl.cs b/crypto/src/tls/TlsSessionImpl.cs
new file mode 100644
index 000000000..a4eb6b94a
--- /dev/null
+++ b/crypto/src/tls/TlsSessionImpl.cs
@@ -0,0 +1,52 @@
+using System;
+
+using Org.BouncyCastle.Utilities;
+
+namespace Org.BouncyCastle.Tls
+{
+    internal class TlsSessionImpl
+        : TlsSession
+    {
+        private readonly byte[] m_sessionID;
+        private readonly SessionParameters m_sessionParameters;
+        private bool m_resumable;
+
+        internal TlsSessionImpl(byte[] sessionID, SessionParameters sessionParameters)
+        {
+            if (sessionID == null)
+                throw new ArgumentNullException("sessionID");
+            if (sessionID.Length > 32)
+                throw new ArgumentException("cannot be longer than 32 bytes", "sessionID");
+
+            this.m_sessionID = Arrays.Clone(sessionID);
+            this.m_sessionParameters = sessionParameters;
+            this.m_resumable = sessionID.Length > 0 && null != sessionParameters;
+        }
+
+        public SessionParameters ExportSessionParameters()
+        {
+            lock (this)
+            {
+                return m_sessionParameters == null ? null : m_sessionParameters.Copy();
+            }
+        }
+
+        public byte[] SessionID
+        {
+            get { lock (this) return m_sessionID; }
+        }
+
+        public void Invalidate()
+        {
+            lock (this)
+            {
+                this.m_resumable = false;
+            }
+        }
+
+        public bool IsResumable
+        {
+            get { lock (this) return m_resumable; }
+        }
+    }
+}