summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Begumisa <ben_g@users.sourceforge.net>2007-11-30 10:56:04 +0000
committerGerald Begumisa <ben_g@users.sourceforge.net>2007-11-30 10:56:04 +0000
commit90c2a7f79d23b6daf595152a9039685d78f05815 (patch)
tree49aca64cdcc21042a5bdeb867946b5f129ae676e
parent7dd6e743f550ec11b7d6ef9d25ddcfd18ac567ce (diff)
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
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp43
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp15
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h1
3 files changed, 45 insertions, 14 deletions
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;