summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp8
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h3
3 files changed, 11 insertions, 2 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
index 891a4b1..ceda5f7 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
@@ -2177,13 +2177,19 @@ void RtpSessions::SetMediaAddress(RtpSessionRef& session, struct in_addr mediaIp
if(oldSession.get())
{
// A session exists on the same IP+port
- if(oldSession->m_protocol == RtpSession::ProtRawRtp || oldSession->m_numRtpPackets == 0)
+ if(oldSession->m_protocol == RtpSession::ProtRawRtp || oldSession->m_numRtpPackets == 0 ||
+ (session->m_protocol == RtpSession::ProtSkinny && DLLCONFIG.m_skinnyAllowMediaAddressTransfer) )
{
logMsg.Format("[%s] on %s replaces [%s]",
session->m_trackingId, mediaAddress, oldSession->m_trackingId);
LOG4CXX_INFO(m_log, logMsg);
//Stop(oldSession); // Let the session go into timeout rather than stop is straight away, useful for skinny internal calls where media address back and forth must not kill sessions with the best metadata.
}
+ else if(oldSession->m_trackingId.Equals(session->m_trackingId))
+ {
+ // Old and new are the same session, do nothing
+ doChangeMediaAddress = false;
+ }
else
{
doChangeMediaAddress = false;
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
index 447fc39..6263660 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
@@ -71,6 +71,7 @@ VoIpConfig::VoIpConfig()
m_skinnyNameAsLocalParty = false;
m_skinnyCallInfoStopsPrevious = false;
m_cucm7_1Mode = false;
+ m_skinnyAllowMediaAddressTransfer = false;
m_sangomaEnable = false;
m_sangomaRxTcpPortStart = 0;
@@ -154,6 +155,7 @@ void VoIpConfig::Define(Serializer* s)
s->CsvValue("SkinnyReportTags", m_skinnyReportTags);
s->BoolValue("Cucm7-1Mode", m_cucm7_1Mode);
s->BoolValue("SkinnyCucm7Mode", m_cucm7_1Mode); // synonym to the preceding line (Cucm7-1Mode)
+ s->BoolValue("SkinnyAllowMediaAddressTransfer", m_skinnyAllowMediaAddressTransfer);
s->IntValue("SangomaRxTcpPortStart", m_sangomaRxTcpPortStart);
s->IntValue("SangomaTxTcpPortStart", m_sangomaTxTcpPortStart);
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
index 5bdadca..ade0ff7 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
@@ -102,13 +102,14 @@ public:
bool m_skinnyIgnoreStopMediaTransmission;
bool m_skinnyIgnoreOpenReceiveChannelAck;
- bool m_skinnyDynamicMediaAddress;
+ bool m_skinnyDynamicMediaAddress; // Controls whether a single session can have a changing media address
bool m_skinnyAllowCallInfoUpdate;
bool m_skinnyAllowLateCallInfo;
bool m_skinnyNameAsLocalParty;
bool m_skinnyCallInfoStopsPrevious;
bool m_cucm7_1Mode;
std::list<CStdString> m_skinnyReportTags;
+ bool m_skinnyAllowMediaAddressTransfer; // Controls whether a new session (new CallInfo) can take a media address away from an existing session that has already received RTP.
std::list<CStdString> m_dnisNumbers;
std::list<CStdString> m_sipExtractFields;