summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2023-05-11 21:04:11 +0700
committerPeter Dettman <peter.dettman@bouncycastle.org>2023-05-11 21:04:11 +0700
commit5b27019abd9ae16f883b1fdff8398288d50abbfc (patch)
treedef16ac4ed34c587020f70ae474be90d61588e76
parentfix exception during DTLS server handshake when the client has no extensions (diff)
downloadBouncyCastle.NET-ed25519-5b27019abd9ae16f883b1fdff8398288d50abbfc.tar.xz
TLS: Add NotifyConnectionClosed callback
-rw-r--r--crypto/src/tls/AbstractTlsPeer.cs4
-rw-r--r--crypto/src/tls/TlsPeer.cs4
-rw-r--r--crypto/src/tls/TlsProtocol.cs2
-rw-r--r--crypto/src/tls/TlsUtilities.cs9
4 files changed, 19 insertions, 0 deletions
diff --git a/crypto/src/tls/AbstractTlsPeer.cs b/crypto/src/tls/AbstractTlsPeer.cs
index 82f8dd1e5..b69acf404 100644
--- a/crypto/src/tls/AbstractTlsPeer.cs
+++ b/crypto/src/tls/AbstractTlsPeer.cs
@@ -148,6 +148,10 @@ namespace Org.BouncyCastle.Tls
         {
         }
 
+        public virtual void NotifyConnectionClosed()
+        {
+        }
+
         /// <exception cref="IOException"/>
         public virtual void NotifyHandshakeComplete()
         {
diff --git a/crypto/src/tls/TlsPeer.cs b/crypto/src/tls/TlsPeer.cs
index 4f16978d9..4d7225aee 100644
--- a/crypto/src/tls/TlsPeer.cs
+++ b/crypto/src/tls/TlsPeer.cs
@@ -109,6 +109,10 @@ namespace Org.BouncyCastle.Tls
         /// <param name="alertDescription"><see cref="AlertDescription"/></param>
         void NotifyAlertReceived(short alertLevel, short alertDescription);
 
+        /// <summary>Notifies the peer that the connection has been closed.</summary>
+        // TODO[api]
+        //void NotifyConnectionClosed();
+
         /// <summary>Notifies the peer that the handshake has been successfully completed.</summary>
         /// <exception cref="IOException"/>
         void NotifyHandshakeComplete();
diff --git a/crypto/src/tls/TlsProtocol.cs b/crypto/src/tls/TlsProtocol.cs
index 55fb9f745..e093ff07a 100644
--- a/crypto/src/tls/TlsProtocol.cs
+++ b/crypto/src/tls/TlsProtocol.cs
@@ -273,6 +273,8 @@ namespace Org.BouncyCastle.Tls
                 RaiseAlertWarning(AlertDescription.close_notify, "Connection closed");
 
                 CloseConnection();
+
+                TlsUtilities.NotifyConnectionClosed(Peer);
             }
         }
 
diff --git a/crypto/src/tls/TlsUtilities.cs b/crypto/src/tls/TlsUtilities.cs
index 69a458a5a..92102e826 100644
--- a/crypto/src/tls/TlsUtilities.cs
+++ b/crypto/src/tls/TlsUtilities.cs
@@ -5730,5 +5730,14 @@ namespace Org.BouncyCastle.Tls
 
             return 1000;
         }
+
+        // TODO[api] Not needed once NotifyConnectionClosed() has been added to TlsPeer
+        internal static void NotifyConnectionClosed(TlsPeer tlsPeer)
+        {
+            if (tlsPeer is AbstractTlsPeer abstractTlsPeer)
+            {
+                abstractTlsPeer.NotifyConnectionClosed();
+            }
+        }
     }
 }