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 /orkaudio/audiocaptureplugins/voip/RtpSession.cpp | |
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
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/RtpSession.cpp')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 23 |
1 files changed, 22 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 //{ |