From 90c2a7f79d23b6daf595152a9039685d78f05815 Mon Sep 17 00:00:00 2001 From: Gerald Begumisa Date: Fri, 30 Nov 2007 10:56:04 +0000 Subject: Added a new VoIP configuration parameter, RtpSessionWithSignallingInitialTimeoutSec, which defaults to 5 minutes and applies to sessions for which there has been no seen RTP traffic (RtpSessionWithSignallingTimeoutSec is used for sessions where RTP traffic has been seen) git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@513 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 43 ++++++++++++++++++------ orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 15 ++++++--- orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 + 3 files changed, 45 insertions(+), 14 deletions(-) (limited to 'orkaudio/audiocaptureplugins/voip') diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index c6f6d4d..fa312ae 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -1768,7 +1768,7 @@ void RtpSessions::ReportRtpPacket(RtpPacketInfoRef& rtpPacket) void RtpSessions::StopAll() { - time_t forceExpiryTime = time(NULL) + 2*DLLCONFIG.m_rtpSessionWithSignallingTimeoutSec; + time_t forceExpiryTime = time(NULL) + 2*DLLCONFIG.m_rtpSessionWithSignallingInitialTimeoutSec; Hoover(forceExpiryTime); } @@ -1791,10 +1791,20 @@ void RtpSessions::Hoover(time_t now) } else { - if(session->m_onHold) { + if(session->m_onHold) + { timeoutSeconds = DLLCONFIG.m_rtpSessionOnHoldTimeOutSec; - } else { - timeoutSeconds = DLLCONFIG.m_rtpSessionWithSignallingTimeoutSec; + } + else + { + if(session->m_numRtpPackets) + { + timeoutSeconds = DLLCONFIG.m_rtpSessionWithSignallingTimeoutSec; + } + else + { + timeoutSeconds = DLLCONFIG.m_rtpSessionWithSignallingInitialTimeoutSec; + } } } if((now - session->m_lastUpdated) > timeoutSeconds) @@ -1817,17 +1827,30 @@ void RtpSessions::Hoover(time_t now) { RtpSessionRef session = pair->second; - if(session->m_onHold) { + if(session->m_onHold) + { if((now - session->m_lastUpdated) > DLLCONFIG.m_rtpSessionOnHoldTimeOutSec) - { - toDismiss.push_back(session); - } - } else { - if((now - session->m_lastUpdated) > DLLCONFIG.m_rtpSessionWithSignallingTimeoutSec) { toDismiss.push_back(session); } } + else + { + if(session->m_numRtpPackets) + { + if((now - session->m_lastUpdated) > DLLCONFIG.m_rtpSessionWithSignallingTimeoutSec) + { + toDismiss.push_back(session); + } + } + else + { + if((now - session->m_lastUpdated) > DLLCONFIG.m_rtpSessionWithSignallingInitialTimeoutSec) + { + toDismiss.push_back(session); + } + } + } } // discard inactive sessions diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 8c44184..cc4213b 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -31,7 +31,8 @@ VoIpConfig::VoIpConfig() m_pcapFastReplay = true; m_pcapFastReplaySleepUsPerSec = 0; m_rtpSessionTimeoutSec = 10; - m_rtpSessionWithSignallingTimeoutSec = 5*60; + m_rtpSessionWithSignallingTimeoutSec = 10; + m_rtpSessionWithSignallingInitialTimeoutSec = 5*60; m_rtpSessionOnHoldTimeOutSec = 1800; m_rtpReportDtmf = false; m_pcapTest= false; @@ -77,6 +78,7 @@ void VoIpConfig::Define(Serializer* s) s->IntValue("PcapSocketBufferSize", m_pcapSocketBufferSize); s->IntValue("RtpSessionTimeoutSec", m_rtpSessionTimeoutSec); s->IntValue("RtpSessionWithSignallingTimeoutSec", m_rtpSessionWithSignallingTimeoutSec); + s->IntValue("RtpSessionWithSignallingInitialTimeoutSec", m_rtpSessionWithSignallingInitialTimeoutSec); s->IntValue("RtpSessionOnHoldTimeOutSec", m_rtpSessionOnHoldTimeOutSec); s->BoolValue("RtpReportDtmf", m_rtpReportDtmf); s->BoolValue("PcapTest", m_pcapTest); @@ -265,10 +267,15 @@ void VoIpConfig::Validate() if(m_rtpSessionOnHoldTimeOutSec < 1) { CStdString exception; - exception.Format("VoIpConfig: RtpSessionOnHoldTimeOutSec must be > 0 (currently:%d) please fix config.xml", m_rtpSessionWithSignallingTimeoutSec); - throw (exception); + exception.Format("VoIpConfig: RtpSessionOnHoldTimeOutSec must be > 0 (currently:%d) please fix config.xml", m_rtpSessionOnHoldTimeOutSec); + throw (exception); + } + if(m_rtpSessionWithSignallingInitialTimeoutSec < 1) + { + CStdString exception; + exception.Format("VoIpConfig: RtpSessionWithSignallingInitialTimeoutSec must be > 0 (currently:%d) please fix config.xml", m_rtpSessionWithSignallingInitialTimeoutSec); + throw (exception); } - if(m_sangomaRxTcpPortStart == 0) { } diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index c1afb07..b5e5d43 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -66,6 +66,7 @@ public: int m_rtpSessionTimeoutSec; int m_rtpSessionWithSignallingTimeoutSec; int m_rtpSessionOnHoldTimeOutSec; + int m_rtpSessionWithSignallingInitialTimeoutSec; bool m_pcapTest; CStdString m_pcapFilter; bool m_rtpDiscontinuityDetect; -- cgit v1.2.3