diff options
author | Gerald Begumisa <ben_g@users.sourceforge.net> | 2008-05-27 21:11:15 +0000 |
---|---|---|
committer | Gerald Begumisa <ben_g@users.sourceforge.net> | 2008-05-27 21:11:15 +0000 |
commit | b4e1ba423478f40484319fc1e16583dd4be64132 (patch) | |
tree | 50198dc32167868f0de3566c8cf7e8e5d0ca52c9 | |
parent | aaad6163c79cdab20f6dfe5255887287306608af (diff) |
Modified VoIP plugin such that if a session has a valid public RTP address, the RTP address in a received SIP 200 OK packet only replaces it if it is also public or if the session RTP address is not set. As before use of SIP 200 OK is still goverened by the SipUse200OkMediaAddress variable
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@539 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 23 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 1 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 |
3 files changed, 24 insertions, 1 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 4db436f..ad9f68c 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -1113,7 +1113,28 @@ void RtpSessions::ReportSip200Ok(Sip200OkInfoRef info) if(info->m_hasSdp && DLLCONFIG.m_sipUse200OkMediaAddress && !session->m_numRtpPackets) { unsigned short mediaPort = ACE_OS::atoi(info->m_mediaPort); - SetMediaAddress(session, info->m_mediaIp, mediaPort); + + if(!session->m_fromRtpIp.s_addr) + { + // Session has empty RTP address + SetMediaAddress(session, info->m_mediaIp, mediaPort); + } + else + { + if(!DLLCONFIG.m_lanIpRanges.Matches(session->m_fromRtpIp)) + { + // Session has a public IP + if(!DLLCONFIG.m_lanIpRanges.Matches(info->m_mediaIp)) + { + SetMediaAddress(session, info->m_mediaIp, mediaPort); + } + } + else + { + // Session has a private IP + SetMediaAddress(session, info->m_mediaIp, mediaPort); + } + } } //else //{ diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 9476885..cf48b83 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -116,6 +116,7 @@ void VoIpConfig::Define(Serializer* s) s->CsvValue("SipDomains", m_sipDomains); s->CsvValue("SipDirectionRefenceIpAddresses", m_sipDirectionRefenceIpAddresses); + s->IpRangesValue("LanIpRanges", m_lanIpRanges); } void VoIpConfig::Validate() diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index fcf7823..47a7351 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -101,6 +101,7 @@ public: int m_skinnyTcpPort; std::list<CStdString> m_sipDomains; std::list<CStdString> m_sipDirectionRefenceIpAddresses; + IpRanges m_lanIpRanges; }; //======================================== |