From b40dd6a31a49a53e6065f161aa61189a8b206206 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 4 Apr 2014 11:17:50 -0700 Subject: [PATCH] say bye and de-init DTLS session from DomainServer --- domain-server/src/DomainServer.cpp | 9 +++++++++ libraries/shared/src/DTLSSession.cpp | 5 +++++ libraries/shared/src/DTLSSession.h | 1 + 3 files changed, 15 insertions(+) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index a40bb2fa37..a66c46fc09 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1001,6 +1001,7 @@ void DomainServer::nodeAdded(SharedNodePointer node) { void DomainServer::nodeKilled(SharedNodePointer node) { DomainServerNodeData* nodeData = reinterpret_cast(node->getLinkedData()); + if (nodeData) { // if this node's UUID matches a static assignment we need to throw it back in the assignment queue if (!nodeData->getStaticAssignmentUUID().isNull()) { @@ -1018,6 +1019,14 @@ void DomainServer::nodeKilled(SharedNodePointer node) { reinterpret_cast(otherNode->getLinkedData())->getSessionSecretHash().remove(node->getUUID()); } } + + if (_isUsingDTLS) { + // check if we need to remove a DTLS session from our in-memory hash + DTLSServerSession* existingSession = _dtlsSessions.take(nodeData->getSendingSockAddr()); + if (existingSession) { + delete existingSession; + } + } } } diff --git a/libraries/shared/src/DTLSSession.cpp b/libraries/shared/src/DTLSSession.cpp index 9b009730b4..44829c424e 100644 --- a/libraries/shared/src/DTLSSession.cpp +++ b/libraries/shared/src/DTLSSession.cpp @@ -105,6 +105,11 @@ DTLSSession::DTLSSession(int end, QUdpSocket& dtlsSocket, HifiSockAddr& destinat gnutls_transport_set_pull_timeout_function(_gnutlsSession, socketPullTimeout); } +DTLSSession::~DTLSSession() { + gnutls_bye(_gnutlsSession, GNUTLS_SHUT_WR); + gnutls_deinit(_gnutlsSession); +} + void DTLSSession::setCompletedHandshake(bool completedHandshake) { _completedHandshake = completedHandshake; qDebug() << "Completed DTLS handshake with" << _destinationSocket; diff --git a/libraries/shared/src/DTLSSession.h b/libraries/shared/src/DTLSSession.h index e9b5267592..395809c6c6 100644 --- a/libraries/shared/src/DTLSSession.h +++ b/libraries/shared/src/DTLSSession.h @@ -19,6 +19,7 @@ class DTLSSession : public QObject { Q_OBJECT public: DTLSSession(int end, QUdpSocket& dtlsSocket, HifiSockAddr& destinationSocket); + ~DTLSSession(); static int socketPullTimeout(gnutls_transport_ptr_t ptr, unsigned int ms); static ssize_t socketPull(gnutls_transport_ptr_t ptr, void* buffer, size_t size);