From 1ebbd65d643ee9976da833cb22b7791c156f76a6 Mon Sep 17 00:00:00 2001 From: Tristan Matthews <tristan.matthews@savoirfairelinux.com> Date: Fri, 27 Apr 2012 13:18:18 -0400 Subject: [PATCH] * #100016: cleanup crypto contexts in audio_srtp_session --- .../src/audio/audiortp/audio_rtp_factory.cpp | 6 ++++-- .../src/audio/audiortp/audio_srtp_session.cpp | 19 +++++++++++++++---- .../src/audio/audiortp/audio_srtp_session.h | 4 ++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp index 2170b06e52..0eb046abe9 100644 --- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp @@ -50,9 +50,11 @@ AudioRtpFactory::AudioRtpFactory(SIPCall *ca) : rtpSession_(NULL), AudioRtpFactory::~AudioRtpFactory() { + AudioSrtpSession* srtpSession = dynamic_cast<AudioSrtpSession*>(rtpSession_); + if (srtpSession) + srtpSession->deleteCryptoContexts(); + delete rtpSession_; - delete cachedLocalContext_; - delete cachedRemoteContext_; } void AudioRtpFactory::initConfig() diff --git a/daemon/src/audio/audiortp/audio_srtp_session.cpp b/daemon/src/audio/audiortp/audio_srtp_session.cpp index 38567d1b62..630d3ce94c 100644 --- a/daemon/src/audio/audiortp/audio_srtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_srtp_session.cpp @@ -306,12 +306,23 @@ void AudioSrtpSession::initializeLocalCryptoContext() void AudioSrtpSession::restoreCryptoContext(ost::CryptoContext *localContext, ost::CryptoContext *remoteContext) { - delete remoteCryptoCtx_; - remoteCryptoCtx_ = remoteContext; - delete localCryptoCtx_; - localCryptoCtx_ = localContext; + if (remoteCryptoCtx_ != remoteContext) { + delete remoteCryptoCtx_; + remoteCryptoCtx_ = remoteContext; + } + if (localCryptoCtx_ != localContext) { + delete localCryptoCtx_; + localCryptoCtx_ = localContext; + } setInQueueCryptoContext(remoteCryptoCtx_); setOutQueueCryptoContext(localCryptoCtx_); } +void AudioSrtpSession::deleteCryptoContexts() +{ + delete remoteCryptoCtx_; + remoteCryptoCtx_ = 0; + delete localCryptoCtx_; + localCryptoCtx_ = 0; +} } diff --git a/daemon/src/audio/audiortp/audio_srtp_session.h b/daemon/src/audio/audiortp/audio_srtp_session.h index a84cfccc84..733e0cfb22 100644 --- a/daemon/src/audio/audiortp/audio_srtp_session.h +++ b/daemon/src/audio/audiortp/audio_srtp_session.h @@ -101,6 +101,10 @@ class AudioSrtpSession : public AudioSymmetricRtpSession { */ void restoreCryptoContext(ost::CryptoContext *, ost::CryptoContext *); + /** + * Force deletion of the current crypto contexts. + */ + void deleteCryptoContexts(); private: NON_COPYABLE(AudioSrtpSession); -- GitLab