From d60aaab22e273b6fd74f6d5ff90754a349472c53 Mon Sep 17 00:00:00 2001 From: Yang Sun Date: Sun, 1 Sep 2024 00:51:12 +0800 Subject: [PATCH] [dtls] notify `kDisconnectedLocalClosed` when disconnect locally (#10653) --- src/core/meshcop/secure_transport.cpp | 24 ++++++++++++++---------- src/core/meshcop/secure_transport.hpp | 1 + 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/core/meshcop/secure_transport.cpp b/src/core/meshcop/secure_transport.cpp index 3cb0333f7..59f859c96 100644 --- a/src/core/meshcop/secure_transport.cpp +++ b/src/core/meshcop/secure_transport.cpp @@ -484,7 +484,7 @@ exit: void SecureTransport::Close(void) { - Disconnect(); + Disconnect(kDisconnectedLocalClosed); SetState(kStateClosed); mTimerSet = false; @@ -494,12 +494,15 @@ void SecureTransport::Close(void) mTimer.Stop(); } -void SecureTransport::Disconnect(void) +void SecureTransport::Disconnect(void) { Disconnect(kDisconnectedLocalClosed); } + +void SecureTransport::Disconnect(ConnectEvent aEvent) { VerifyOrExit(IsStateConnectingOrConnected()); mbedtls_ssl_close_notify(&mSsl); SetState(kStateCloseNotify); + mConnectEvent = aEvent; mTimer.Start(kGuardTimeNewConnectionMilli); mMessageInfo.Clear(); @@ -1057,9 +1060,10 @@ void SecureTransport::HandleTimer(void) void SecureTransport::Process(void) { - uint8_t buf[OPENTHREAD_CONFIG_DTLS_MAX_CONTENT_LEN]; - bool shouldDisconnect = false; - int rval; + uint8_t buf[OPENTHREAD_CONFIG_DTLS_MAX_CONTENT_LEN]; + bool shouldDisconnect = false; + int rval; + ConnectEvent event; while (IsStateConnectingOrConnected()) { @@ -1093,7 +1097,7 @@ void SecureTransport::Process(void) { case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: mbedtls_ssl_close_notify(&mSsl); - mConnectEvent = kDisconnectedPeerClosed; + event = kDisconnectedPeerClosed; ExitNow(shouldDisconnect = true); OT_UNREACHABLE_CODE(break); @@ -1102,7 +1106,7 @@ void SecureTransport::Process(void) case MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE: mbedtls_ssl_close_notify(&mSsl); - mConnectEvent = kDisconnectedError; + event = kDisconnectedError; ExitNow(shouldDisconnect = true); OT_UNREACHABLE_CODE(break); @@ -1111,7 +1115,7 @@ void SecureTransport::Process(void) { mbedtls_ssl_send_alert_message(&mSsl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC); - mConnectEvent = kDisconnectedError; + event = kDisconnectedError; ExitNow(shouldDisconnect = true); } @@ -1122,7 +1126,7 @@ void SecureTransport::Process(void) { mbedtls_ssl_send_alert_message(&mSsl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE); - mConnectEvent = kDisconnectedError; + event = kDisconnectedError; ExitNow(shouldDisconnect = true); } @@ -1142,7 +1146,7 @@ exit: if (shouldDisconnect) { - Disconnect(); + Disconnect(event); } } diff --git a/src/core/meshcop/secure_transport.hpp b/src/core/meshcop/secure_transport.hpp index a4f577775..1d0acd8e8 100644 --- a/src/core/meshcop/secure_transport.hpp +++ b/src/core/meshcop/secure_transport.hpp @@ -595,6 +595,7 @@ private: Error HandleSecureTransportSend(const uint8_t *aBuf, uint16_t aLength, Message::SubType aMessageSubType); void Process(void); + void Disconnect(ConnectEvent aEvent); #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_INFO) static const char *StateToString(State aState);