diff --git a/daemon/src/audio/audiortp/audio_rtp_factory.cpp b/daemon/src/audio/audiortp/audio_rtp_factory.cpp index 4b4b3c5c0e1ad676e37e0e1dde0d30e0038184d9..a153e47f0c45ca7c36b50e402046c3d209ad2500 100644 --- a/daemon/src/audio/audiortp/audio_rtp_factory.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_factory.cpp @@ -91,7 +91,7 @@ void AudioRtpFactory::initSession() switch (keyExchangeProtocol_) { case ZRTP: - rtpSession_ = new AudioZrtpSession(ca_, zidFilename); + rtpSession_ = new AudioZrtpSession(*ca_, zidFilename); // TODO: be careful with that. The hello hash is computed asynchronously. Maybe it's // not even available at that point. if (helloHashEnabled_) @@ -99,14 +99,14 @@ void AudioRtpFactory::initSession() break; case SDES: - rtpSession_ = new AudioSrtpSession(ca_); + rtpSession_ = new AudioSrtpSession(*ca_); break; default: throw UnsupportedRtpSessionType("Unsupported Rtp Session Exception Type!"); } } else - rtpSession_ = new AudioSymmetricRtpSession(ca_); + rtpSession_ = new AudioSymmetricRtpSession(*ca_); } void AudioRtpFactory::start(AudioCodec* audiocodec) @@ -117,7 +117,7 @@ void AudioRtpFactory::start(AudioCodec* audiocodec) if (keyExchangeProtocol_ == SDES and localContext_ and remoteContext_) static_cast<AudioSrtpSession *>(rtpSession_)->restoreCryptoContext(localContext_, remoteContext_); - if (rtpSession_->startRtpThread(audiocodec) != 0) + if (rtpSession_->startRtpThread(*audiocodec) != 0) throw AudioRtpFactoryException("AudioRtpFactory: Error: Failed to start AudioRtpSession thread"); } @@ -150,7 +150,7 @@ void AudioRtpFactory::updateSessionMedia(AudioCodec *audiocodec) if (rtpSession_ == NULL) throw AudioRtpFactoryException("AudioRtpFactory: Error: rtpSession_ was null when trying to update IP address"); - rtpSession_->updateSessionMedia(audiocodec); + rtpSession_->updateSessionMedia(*audiocodec); } void AudioRtpFactory::updateDestinationIpAddress() diff --git a/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp b/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp index 8ce03be48914e6902196162e5b23d51cba85c0d1..99c5064d94a00d36bcfba5c137f3a9ff1848e312 100644 --- a/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_record_handler.cpp @@ -67,13 +67,17 @@ AudioRtpRecord::~AudioRtpRecord() } -AudioRtpRecordHandler::AudioRtpRecordHandler(SIPCall *ca) : audioRtpRecord_(), id_(ca->getCallId()), echoCanceller(ca->getMemoryPool()), gainController(8000, -10.0) +AudioRtpRecordHandler::AudioRtpRecordHandler(SIPCall &call) : + audioRtpRecord_(), + id_(call.getCallId()), + echoCanceller(call.getMemoryPool()), + gainController(8000, -10.0) {} AudioRtpRecordHandler::~AudioRtpRecordHandler() {} -void AudioRtpRecordHandler::setRtpMedia(AudioCodec* audioCodec) +void AudioRtpRecordHandler::setRtpMedia(AudioCodec *audioCodec) { ost::MutexLock lock(audioRtpRecord_.audioCodecMutex_); diff --git a/daemon/src/audio/audiortp/audio_rtp_record_handler.h b/daemon/src/audio/audiortp/audio_rtp_record_handler.h index 9012049a133d1b279448835ba31e3c5d7bcb4a75..ac630e2872aac936f7aa05f8c73897c80e6b1296 100644 --- a/daemon/src/audio/audiortp/audio_rtp_record_handler.h +++ b/daemon/src/audio/audiortp/audio_rtp_record_handler.h @@ -103,7 +103,7 @@ class AudioRtpRecord { class AudioRtpRecordHandler { public: - AudioRtpRecordHandler(SIPCall *); + AudioRtpRecordHandler(SIPCall &); virtual ~AudioRtpRecordHandler(); /** diff --git a/daemon/src/audio/audiortp/audio_rtp_session.cpp b/daemon/src/audio/audiortp/audio_rtp_session.cpp index 0df3c691dae301ebd7118866453910a22e3f3f03..70efc7860d0c2c61825bc62830b2572cab79f027 100644 --- a/daemon/src/audio/audiortp/audio_rtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_rtp_session.cpp @@ -43,9 +43,9 @@ #include "manager.h" namespace sfl { -AudioRtpSession::AudioRtpSession(SIPCall * sipcall, ost::RTPDataQueue *queue, ost::Thread *thread) : - AudioRtpRecordHandler(sipcall) - , ca_(sipcall) +AudioRtpSession::AudioRtpSession(SIPCall &call, ost::RTPDataQueue &queue, ost::Thread &thread) : + AudioRtpRecordHandler(call) + , call_(call) , timestamp_(0) , timestampIncrement_(0) , queue_(queue) @@ -55,16 +55,15 @@ AudioRtpSession::AudioRtpSession(SIPCall * sipcall, ost::RTPDataQueue *queue, os , timestampCount_(0) , thread_(thread) { - assert(ca_); - queue_->setTypeOfService(ost::RTPDataQueue::tosEnhanced); + queue_.setTypeOfService(ost::RTPDataQueue::tosEnhanced); } AudioRtpSession::~AudioRtpSession() { - queue_->disableStack(); + queue_.disableStack(); } -void AudioRtpSession::updateSessionMedia(AudioCodec *audioCodec) +void AudioRtpSession::updateSessionMedia(AudioCodec &audioCodec) { int lastSamplingRate = audioRtpRecord_.codecSampleRate_; @@ -79,9 +78,9 @@ void AudioRtpSession::updateSessionMedia(AudioCodec *audioCodec) } -void AudioRtpSession::setSessionMedia(AudioCodec *audioCodec) +void AudioRtpSession::setSessionMedia(AudioCodec &audioCodec) { - setRtpMedia(audioCodec); + setRtpMedia(&audioCodec); // store codec info locally int payloadType = getCodecPayloadType(); @@ -102,14 +101,14 @@ void AudioRtpSession::setSessionMedia(AudioCodec *audioCodec) if (payloadType == g722PayloadType) { DEBUG("AudioRtpSession: Setting G722 payload format"); - queue_->setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) payloadType, g722RtpClockRate)); + queue_.setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) payloadType, g722RtpClockRate)); } else { if (dynamic) { DEBUG("AudioRtpSession: Setting dynamic payload format"); - queue_->setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) payloadType, smplRate)); + queue_.setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) payloadType, smplRate)); } else { DEBUG("AudioRtpSession: Setting static payload format"); - queue_->setPayloadFormat(ost::StaticPayloadFormat((ost::StaticPayloadType) payloadType)); + queue_.setPayloadFormat(ost::StaticPayloadFormat((ost::StaticPayloadType) payloadType)); } } } @@ -138,20 +137,20 @@ void AudioRtpSession::sendDtmfEvent() processDataEncode(); // change Payload type for DTMF payload - queue_->setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) getDtmfPayloadType(), 8000)); + queue_.setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) getDtmfPayloadType(), 8000)); - queue_->setMark(true); - queue_->sendImmediate(timestamp_, (const unsigned char *)(&payload), sizeof(payload)); - queue_->setMark(false); + queue_.setMark(true); + queue_.sendImmediate(timestamp_, (const unsigned char *)(&payload), sizeof(payload)); + queue_.setMark(false); // get back the payload to audio - queue_->setPayloadFormat(ost::StaticPayloadFormat((ost::StaticPayloadType) getCodecPayloadType())); + queue_.setPayloadFormat(ost::StaticPayloadFormat((ost::StaticPayloadType) getCodecPayloadType())); } void AudioRtpSession::receiveSpeakerData() { - const ost::AppDataUnit* adu = queue_->getData(queue_->getFirstTimestamp()); + const ost::AppDataUnit* adu = queue_.getData(queue_.getFirstTimestamp()); if (!adu) return; @@ -179,7 +178,7 @@ void AudioRtpSession::sendMicData() timestamp_ += timestampIncrement_; // putData puts the data on RTP queue, sendImmediate bypass this queue - queue_->sendImmediate(timestamp_, getMicDataEncoded(), compSize); + queue_.sendImmediate(timestamp_, getMicDataEncoded(), compSize); } @@ -187,28 +186,28 @@ void AudioRtpSession::setSessionTimeouts() { DEBUG("AudioRtpSession: Set session scheduling timeout (%d) and expireTimeout (%d)", sfl::schedulingTimeout, sfl::expireTimeout); - queue_->setSchedulingTimeout(sfl::schedulingTimeout); - queue_->setExpireTimeout(sfl::expireTimeout); + queue_.setSchedulingTimeout(sfl::schedulingTimeout); + queue_.setExpireTimeout(sfl::expireTimeout); } void AudioRtpSession::setDestinationIpAddress() { // Store remote ip in case we would need to forget current destination - remote_ip_ = ost::InetHostAddress(ca_->getLocalSDP()->getRemoteIP().c_str()); + remote_ip_ = ost::InetHostAddress(call_.getLocalSDP()->getRemoteIP().c_str()); if (!remote_ip_) { WARN("AudioRtpSession: Target IP address (%s) is not correct!", - ca_->getLocalSDP()->getRemoteIP().data()); + call_.getLocalSDP()->getRemoteIP().data()); return; } // Store remote port in case we would need to forget current destination - remote_port_ = (unsigned short) ca_->getLocalSDP()->getRemoteAudioPort(); + remote_port_ = (unsigned short) call_.getLocalSDP()->getRemoteAudioPort(); DEBUG("AudioRtpSession: New remote address for session: %s:%d", - ca_->getLocalSDP()->getRemoteIP().data(), remote_port_); + call_.getLocalSDP()->getRemoteIP().data(), remote_port_); - if (!queue_->addDestination(remote_ip_, remote_port_)) { + if (!queue_.addDestination(remote_ip_, remote_port_)) { WARN("AudioRtpSession: Can't add new destination to session!"); return; } @@ -221,7 +220,7 @@ void AudioRtpSession::updateDestinationIpAddress() // Destination address are stored in a list in ccrtp // This method remove the current destination entry - if (!queue_->forgetDestination(remote_ip_, remote_port_, remote_port_ + 1)) + if (!queue_.forgetDestination(remote_ip_, remote_port_, remote_port_ + 1)) DEBUG("AudioRtpSession: Did not remove previous destination"); // new destination is stored in call @@ -230,7 +229,7 @@ void AudioRtpSession::updateDestinationIpAddress() } -int AudioRtpSession::startRtpThread(AudioCodec* audiocodec) +int AudioRtpSession::startRtpThread(AudioCodec &audiocodec) { if (isStarted_) return 0; @@ -243,8 +242,8 @@ int AudioRtpSession::startRtpThread(AudioCodec* audiocodec) initBuffers(); initNoiseSuppress(); - queue_->enableStack(); - return thread_->start(); + queue_.enableStack(); + return thread_.start(); } diff --git a/daemon/src/audio/audiortp/audio_rtp_session.h b/daemon/src/audio/audiortp/audio_rtp_session.h index f52f6472ef4cadc3fa7364db3556cef6c76e97db..c6baca3f29fd81b9899922e6b1aef87a767a0478 100644 --- a/daemon/src/audio/audiortp/audio_rtp_session.h +++ b/daemon/src/audio/audiortp/audio_rtp_session.h @@ -31,16 +31,18 @@ * shall include the source code for the parts of OpenSSL used as well * as that of the covered work. */ -#ifndef SFL_AUDIO_RTP_SESSION_H_ -#define SFL_AUDIO_RTP_SESSION_H_ +#ifndef AUDIO_RTP_SESSION_H_ +#define AUDIO_RTP_SESSION_H_ #include "audio_rtp_record_handler.h" -#include <audio/codecs/audiocodec.h> #include <ccrtp/rtp.h> #include <ccrtp/formats.h> #include "noncopyable.h" class SIPCall; +namespace ost { + class Thread; +} namespace sfl { @@ -52,12 +54,12 @@ class AudioRtpSession : public AudioRtpRecordHandler { * Constructor * @param sipcall The pointer on the SIP call */ - AudioRtpSession(SIPCall* sipcall, ost::RTPDataQueue *queue, ost::Thread *thread); + AudioRtpSession(SIPCall &sipcall, ost::RTPDataQueue &queue, ost::Thread &thread); virtual ~AudioRtpSession(); - void updateSessionMedia(AudioCodec *audioCodec); + void updateSessionMedia(AudioCodec &audioCodec); - virtual int startRtpThread(AudioCodec*); + virtual int startRtpThread(AudioCodec&); /** * Used mostly when receiving a reinvite @@ -68,7 +70,7 @@ class AudioRtpSession : public AudioRtpRecordHandler { /** * Set the audio codec for this RTP session */ - virtual void setSessionMedia(AudioCodec *codec) = 0; + virtual void setSessionMedia(AudioCodec &codec) = 0; bool onRTPPacketRecv(ost::IncomingRTPPkt&); @@ -86,7 +88,7 @@ class AudioRtpSession : public AudioRtpRecordHandler { */ virtual void sendMicData(); - SIPCall *ca_; + SIPCall &call_; /** * Timestamp for this session @@ -99,7 +101,7 @@ class AudioRtpSession : public AudioRtpRecordHandler { */ int timestampIncrement_; - ost::RTPDataQueue *queue_; + ost::RTPDataQueue &queue_; bool isStarted_; private: @@ -140,7 +142,7 @@ class AudioRtpSession : public AudioRtpRecordHandler { */ short timestampCount_; - ost::Thread *thread_; + ost::Thread &thread_; }; } diff --git a/daemon/src/audio/audiortp/audio_srtp_session.cpp b/daemon/src/audio/audiortp/audio_srtp_session.cpp index 60e173ba62a63da2528abd7b638a51f789885c52..500d03ba7dc3ac89986a72a5a0915482350418df 100644 --- a/daemon/src/audio/audiortp/audio_srtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_srtp_session.cpp @@ -29,8 +29,6 @@ */ #include "audio_srtp_session.h" -#include "sip/sipcall.h" - #include <openssl/sha.h> #include <openssl/hmac.h> #include <openssl/evp.h> @@ -44,8 +42,8 @@ namespace sfl { -AudioSrtpSession::AudioSrtpSession(SIPCall * sipcall) : - AudioSymmetricRtpSession(sipcall), +AudioSrtpSession::AudioSrtpSession(SIPCall &call) : + AudioSymmetricRtpSession(call), remoteCryptoCtx_(NULL), localCryptoCtx_(NULL), localCryptoSuite_(0), diff --git a/daemon/src/audio/audiortp/audio_srtp_session.h b/daemon/src/audio/audiortp/audio_srtp_session.h index 02429d7b193d63a8777f7dfc441bdb1130f2a200..5cce01a60a21f6ad249115ebe7d04e2bc21626e8 100644 --- a/daemon/src/audio/audiortp/audio_srtp_session.h +++ b/daemon/src/audio/audiortp/audio_srtp_session.h @@ -27,10 +27,9 @@ * shall include the source code for the parts of OpenSSL used as well * as that of the covered work. */ -#ifndef __AUDIO_SRTP_SESSION_H__ -#define __AUDIO_SRTP_SESSION_H__ +#ifndef AUDIO_SRTP_SESSION_H_ +#define AUDIO_SRTP_SESSION_H_ -#include "audio_rtp_session.h" #include "audio_symmetric_rtp_session.h" #include "sip/sdes_negotiator.h" #include "noncopyable.h" @@ -73,7 +72,7 @@ class AudioSrtpSession : public AudioSymmetricRtpSession { /** * Constructor for this rtp session */ - AudioSrtpSession(SIPCall * sipcall); + AudioSrtpSession(SIPCall &call); /** * Used to get sdp crypto header to be included in sdp session. This @@ -85,7 +84,7 @@ class AudioSrtpSession : public AudioSymmetricRtpSession { /** * Set remote crypto header from incoming sdp offer */ - void setRemoteCryptoInfo(sfl::SdesNegotiator& nego); + void setRemoteCryptoInfo(sfl::SdesNegotiator &nego); /** * Init local crypto context for outgoing data diff --git a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp index 5169ce97eb44be937033f2eb918b460e823c4d88..3324f22ff4358f7713cf8e024decb2eff9f4abc1 100644 --- a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.cpp @@ -41,26 +41,26 @@ namespace sfl { -AudioSymmetricRtpSession::AudioSymmetricRtpSession(SIPCall * sipcall) : +AudioSymmetricRtpSession::AudioSymmetricRtpSession(SIPCall &call) : ost::TimerPort() - , ost::SymmetricRTPSession(ost::InetHostAddress(sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()) - , AudioRtpSession(sipcall, this, this) - , rtpThread_(new AudioRtpThread(this)) + , ost::SymmetricRTPSession(ost::InetHostAddress(call.getLocalIp().c_str()), call.getLocalAudioPort()) + , AudioRtpSession(call, *this, *this) + , rtpThread_(*this) { - DEBUG("AudioSymmetricRtpSession: Setting new RTP session with destination %s:%d", ca_->getLocalIp().c_str(), ca_->getLocalAudioPort()); - audioRtpRecord_.callId_ = ca_->getCallId(); + DEBUG("AudioSymmetricRtpSession: Setting new RTP session with destination %s:%d", call_.getLocalIp().c_str(), call_.getLocalAudioPort()); + audioRtpRecord_.callId_ = call_.getCallId(); } AudioSymmetricRtpSession::~AudioSymmetricRtpSession() { - rtpThread_->running_ = false; - delete rtpThread_; + if (rtpThread_.running_) { + rtpThread_.running_ = false; + rtpThread_.join(); + } } -AudioSymmetricRtpSession::AudioRtpThread::AudioRtpThread(AudioSymmetricRtpSession *session) : running_(true), rtpSession_(session) -{ - assert(rtpSession_); -} +AudioSymmetricRtpSession::AudioRtpThread::AudioRtpThread(AudioSymmetricRtpSession &session) : running_(true), rtpSession_(session) +{} void AudioSymmetricRtpSession::AudioRtpThread::run() { @@ -72,10 +72,10 @@ void AudioSymmetricRtpSession::AudioRtpThread::run() while (running_) { // Send session - if (rtpSession_->DtmfPending()) - rtpSession_->sendDtmfEvent(); + if (rtpSession_.DtmfPending()) + rtpSession_.sendDtmfEvent(); else - rtpSession_->sendMicData(); + rtpSession_.sendMicData(); Thread::sleep(TimerPort::getTimer()); @@ -85,13 +85,13 @@ void AudioSymmetricRtpSession::AudioRtpThread::run() DEBUG("AudioRtpThread: Leaving audio rtp thread loop"); } -void AudioSymmetricRtpSession::setSessionMedia(AudioCodec *audioCodec) +void AudioSymmetricRtpSession::setSessionMedia(AudioCodec &audioCodec) { AudioRtpSession::setSessionMedia(audioCodec); - ca_->setRecordingSmplRate(getCodecSampleRate()); + call_.setRecordingSmplRate(getCodecSampleRate()); } -int AudioSymmetricRtpSession::startRtpThread(AudioCodec* audiocodec) +int AudioSymmetricRtpSession::startRtpThread(AudioCodec &audiocodec) { DEBUG("AudioSymmetricRtpSession: Starting main thread"); if (isStarted_) diff --git a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h index 96270012d262ecedeacbbf632a75a9160417f85a..b0fda2be3d926de11341e7c546ce5f69327c03f6 100644 --- a/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h +++ b/daemon/src/audio/audiortp/audio_symmetric_rtp_session.h @@ -56,9 +56,9 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP public: /** * Constructor - * @param sipcall The pointer on the SIP call + * @param call The SIP call */ - AudioSymmetricRtpSession(SIPCall* sipcall); + AudioSymmetricRtpSession(SIPCall &call); ~AudioSymmetricRtpSession(); virtual bool onRTPPacketRecv(ost::IncomingRTPPkt& pkt) { @@ -66,7 +66,7 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP } int startSymmetricRtpThread() { - return rtpThread_->start(); + return rtpThread_.start(); } private: @@ -74,7 +74,7 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP class AudioRtpThread : public ost::Thread, public ost::TimerPort { public: - AudioRtpThread(AudioSymmetricRtpSession *session); + AudioRtpThread(AudioSymmetricRtpSession &session); virtual void run(); @@ -82,12 +82,12 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP private: NON_COPYABLE(AudioRtpThread); - AudioSymmetricRtpSession *rtpSession_; + AudioSymmetricRtpSession &rtpSession_; }; - void setSessionMedia(AudioCodec *codec); - int startRtpThread(AudioCodec* audiocodec); + void setSessionMedia(AudioCodec &codec); + int startRtpThread(AudioCodec &audiocodec); - AudioRtpThread *rtpThread_; + AudioRtpThread rtpThread_; }; } diff --git a/daemon/src/audio/audiortp/audio_zrtp_session.cpp b/daemon/src/audio/audiortp/audio_zrtp_session.cpp index 81903a9aae11eb9b2a5878d68064b3d15419798e..222adb89c1f3c84440fe6363002043d5e0e800ed 100644 --- a/daemon/src/audio/audiortp/audio_zrtp_session.cpp +++ b/daemon/src/audio/audiortp/audio_zrtp_session.cpp @@ -49,13 +49,13 @@ namespace sfl { -AudioZrtpSession::AudioZrtpSession(SIPCall * sipcall, const std::string& zidFilename) : - AudioRtpSession(sipcall, this, this), - ost::TRTPSessionBase<ost::SymmetricRTPChannel, ost::SymmetricRTPChannel, ost::ZrtpQueue>(ost::InetHostAddress(sipcall->getLocalIp().c_str()), - sipcall->getLocalAudioPort(), - 0, - ost::MembershipBookkeeping::defaultMembersHashSize, - ost::defaultApplication()), +AudioZrtpSession::AudioZrtpSession(SIPCall &call, const std::string& zidFilename) : + AudioRtpSession(call, *this, *this), + ost::TRTPSessionBase<ost::SymmetricRTPChannel, ost::SymmetricRTPChannel, ost::ZrtpQueue>(ost::InetHostAddress(call_.getLocalIp().c_str()), + call_.getLocalAudioPort(), + 0, + ost::MembershipBookkeeping::defaultMembersHashSize, + ost::defaultApplication()), zidFilename_(zidFilename) { DEBUG("AudioZrtpSession initialized"); @@ -63,13 +63,14 @@ AudioZrtpSession::AudioZrtpSession(SIPCall * sipcall, const std::string& zidFile setCancel(cancelDefault); - DEBUG("AudioZrtpSession: Setting new RTP session with destination %s:%d", ca_->getLocalIp().c_str(), ca_->getLocalAudioPort()); + DEBUG("AudioZrtpSession: Setting new RTP session with destination %s:%d", + call_.getLocalIp().c_str(), call_.getLocalAudioPort()); } AudioZrtpSession::~AudioZrtpSession() { ost::Thread::terminate(); - Manager::instance().getMainBuffer()->unBindAll(ca_->getCallId()); + Manager::instance().getMainBuffer()->unBindAll(call_.getCallId()); } void AudioZrtpSession::final() @@ -102,7 +103,7 @@ void AudioZrtpSession::initializeZid() if (initialize(zidCompleteFilename.c_str()) >= 0) { DEBUG("Register callbacks"); setEnableZrtp(true); - setUserCallback(new ZrtpSessionCallback(ca_)); + setUserCallback(new ZrtpSessionCallback(call_)); return; } @@ -129,17 +130,17 @@ void AudioZrtpSession::sendMicData() timestamp_ += timestampIncrement_; // this step is only needed for ZRTP - queue_->putData(timestamp_, getMicDataEncoded(), compSize); + queue_.putData(timestamp_, getMicDataEncoded(), compSize); // putData puts the data on RTP queue, sendImmediate bypasses this queue - queue_->sendImmediate(timestamp_, getMicDataEncoded(), compSize); + queue_.sendImmediate(timestamp_, getMicDataEncoded(), compSize); } void AudioZrtpSession::run() { // Set recording sampling rate - ca_->setRecordingSmplRate(getCodecSampleRate()); - DEBUG("AudioZrtpSession: Entering mainloop for call %s", ca_->getCallId().c_str()); + call_.setRecordingSmplRate(getCodecSampleRate()); + DEBUG("AudioZrtpSession: Entering mainloop for call %s", call_.getCallId().c_str()); uint32 timeout = 0; @@ -169,7 +170,7 @@ void AudioZrtpSession::run() setCancel(cancelImmediate); timerTick(); } else { - if (isPendingData(timeout/1000)) { + if (isPendingData(timeout / 1000)) { setCancel(cancelDeferred); if (isActive()) @@ -181,17 +182,15 @@ void AudioZrtpSession::run() } } - DEBUG("AudioZrtpSession: Left main loop for call %s", ca_->getCallId().c_str()); + DEBUG("AudioZrtpSession: Left main loop for call %s", call_.getCallId().c_str()); } - void AudioZrtpSession::incrementTimestampForDTMF() { timestamp_ += 160; } - -void AudioZrtpSession::setSessionMedia(AudioCodec *audioCodec) +void AudioZrtpSession::setSessionMedia(AudioCodec &audioCodec) { AudioRtpSession::setSessionMedia(audioCodec); } diff --git a/daemon/src/audio/audiortp/audio_zrtp_session.h b/daemon/src/audio/audiortp/audio_zrtp_session.h index 00d9dad819d875b9b8854bcaf2c164a5ea214e7d..9e7c196e3dcf91646c91ac61ce8957cfe176995d 100644 --- a/daemon/src/audio/audiortp/audio_zrtp_session.h +++ b/daemon/src/audio/audiortp/audio_zrtp_session.h @@ -47,16 +47,17 @@ class AudioCodec; namespace sfl { -class ZrtpZidException: public std::runtime_error { +class ZrtpZidException : public std::runtime_error { public: ZrtpZidException(const std::string& str = "") : std::runtime_error("ZRTP ZID initialization failed." + str) {} }; -// class AudioZrtpSession : public ost::TimerPort, public ost::SymmetricZRTPSession, public AudioRtpRecordHandler -class AudioZrtpSession : public AudioRtpSession, protected ost::Thread, public ost::TRTPSessionBase<ost::SymmetricRTPChannel, ost::SymmetricRTPChannel, ost::ZrtpQueue> { +class AudioZrtpSession : + public AudioRtpSession, protected ost::Thread, + public ost::TRTPSessionBase<ost::SymmetricRTPChannel, ost::SymmetricRTPChannel, ost::ZrtpQueue> { public: - AudioZrtpSession(SIPCall * sipcall, const std::string& zidFilename); + AudioZrtpSession(SIPCall &call, const std::string& zidFilename); ~AudioZrtpSession(); virtual void final(); @@ -64,7 +65,7 @@ class AudioZrtpSession : public AudioRtpSession, protected ost::Thread, public o // Thread associated method virtual void run(); - virtual bool onRTPPacketRecv(ost::IncomingRTPPkt& pkt) { + virtual bool onRTPPacketRecv(ost::IncomingRTPPkt &pkt) { return AudioRtpSession::onRTPPacketRecv(pkt); } @@ -73,7 +74,7 @@ class AudioZrtpSession : public AudioRtpSession, protected ost::Thread, public o void initializeZid(); std::string zidFilename_; void incrementTimestampForDTMF(); - void setSessionMedia(AudioCodec *codec); + void setSessionMedia(AudioCodec &codec); }; } diff --git a/daemon/src/audio/audiortp/zrtp_session_callback.cpp b/daemon/src/audio/audiortp/zrtp_session_callback.cpp index 270468a80ea2a8fc8e683d515610d31dce7d0a17..061cf1c64c22b66f270e80302085e149d5328de8 100644 --- a/daemon/src/audio/audiortp/zrtp_session_callback.cpp +++ b/daemon/src/audio/audiortp/zrtp_session_callback.cpp @@ -45,8 +45,8 @@ using namespace ost; namespace sfl { -ZrtpSessionCallback::ZrtpSessionCallback(SIPCall *sipcall) : - sipcall_(sipcall) +ZrtpSessionCallback::ZrtpSessionCallback(SIPCall &call) : + call_(call) { using std::pair; using std::string; @@ -112,21 +112,21 @@ void ZrtpSessionCallback::secureOn(std::string cipher) { DEBUG("Zrtp: Secure mode is on with cipher %s", cipher.c_str()); - Manager::instance().getDbusManager()->getCallManager()->secureZrtpOn(sipcall_->getCallId(), cipher); + Manager::instance().getDbusManager()->getCallManager()->secureZrtpOn(call_.getCallId(), cipher); } void ZrtpSessionCallback::secureOff() { DEBUG("Zrtp: Secure mode is off"); - Manager::instance().getDbusManager()->getCallManager()->secureZrtpOff(sipcall_->getCallId()); + Manager::instance().getDbusManager()->getCallManager()->secureZrtpOff(call_.getCallId()); } void ZrtpSessionCallback::showSAS(std::string sas, bool verified) { DEBUG("Zrtp: SAS is: %s", sas.c_str()); - Manager::instance().getDbusManager()->getCallManager()->showSAS(sipcall_->getCallId(), sas, verified); + Manager::instance().getDbusManager()->getCallManager()->showSAS(call_.getCallId(), sas, verified); } @@ -134,7 +134,7 @@ void ZrtpSessionCallback::zrtpNotSuppOther() { DEBUG("Zrtp: Callee does not support ZRTP"); - Manager::instance().getDbusManager()->getCallManager()->zrtpNotSuppOther(sipcall_->getCallId()); + Manager::instance().getDbusManager()->getCallManager()->zrtpNotSuppOther(call_.getCallId()); } @@ -163,13 +163,13 @@ ZrtpSessionCallback::zrtpNegotiationFailed(MessageSeverity severity, int subCode std::map<int32, std::string>::const_iterator iter = zrtpMap_.find(subCode); if (iter != zrtpMap_.end()) { DEBUG("%s", iter->second.c_str()); - Manager::instance().getDbusManager()->getCallManager()->zrtpNegotiationFailed(sipcall_->getCallId(), iter->second, "ZRTP"); + Manager::instance().getDbusManager()->getCallManager()->zrtpNegotiationFailed(call_.getCallId(), iter->second, "ZRTP"); } } else { std::map<int32, std::string>::const_iterator iter = severeMap_.find(subCode); if (iter != severeMap_.end()) { DEBUG("%s", iter->second.c_str()); - Manager::instance().getDbusManager()->getCallManager()->zrtpNegotiationFailed(sipcall_->getCallId(), iter->second, "severe"); + Manager::instance().getDbusManager()->getCallManager()->zrtpNegotiationFailed(call_.getCallId(), iter->second, "severe"); } } } @@ -178,7 +178,7 @@ void ZrtpSessionCallback::confirmGoClear() { DEBUG("Zrtp: Received go clear message. Until confirmation, ZRTP won't send any data"); - Manager::instance().getDbusManager()->getCallManager()->zrtpNotSuppOther(sipcall_->getCallId()); + Manager::instance().getDbusManager()->getCallManager()->zrtpNotSuppOther(call_.getCallId()); } std::map<int32, std::string> ZrtpSessionCallback::infoMap_; diff --git a/daemon/src/audio/audiortp/zrtp_session_callback.h b/daemon/src/audio/audiortp/zrtp_session_callback.h index 08bb9cf4fb4c9bffd2f9fbc49d50520dda88a6c3..e9e92a9c2cda8c02dec10a562bb9831dd410cef4 100644 --- a/daemon/src/audio/audiortp/zrtp_session_callback.h +++ b/daemon/src/audio/audiortp/zrtp_session_callback.h @@ -28,8 +28,8 @@ * as that of the covered work. */ -#ifndef __ZRTP_SESSION_CALLBACK_H__ -#define __ZRTP_SESSION_CALLBACK_H__ +#ifndef ZRTP_SESSION_CALLBACK_H_ +#define ZRTP_SESSION_CALLBACK_H_ #include <cstddef> using std::ptrdiff_t; @@ -39,7 +39,6 @@ using std::ptrdiff_t; #include <libzrtpcpp/ZrtpUserCallback.h> #include <exception> #include <map> -#include "noncopyable.h" class SIPCall; @@ -47,7 +46,7 @@ namespace sfl { class ZrtpSessionCallback: public ZrtpUserCallback { public: - ZrtpSessionCallback(SIPCall *sipcall); + ZrtpSessionCallback(SIPCall &call); void secureOn(std::string cipher); void secureOff(); @@ -58,12 +57,11 @@ class ZrtpSessionCallback: public ZrtpUserCallback { void confirmGoClear(); private: - NON_COPYABLE(ZrtpSessionCallback); - SIPCall* sipcall_; + SIPCall &call_; static std::map<int32, std::string> infoMap_; static std::map<int32, std::string> warningMap_; static std::map<int32, std::string> severeMap_; static std::map<int32, std::string> zrtpMap_; }; } -#endif // __ZRTP_SESSION_CALLBACK_H__ +#endif // ZRTP_SESSION_CALLBACK_H_