diff options
author | Henri Herscher <henri@oreka.org> | 2006-12-14 18:49:41 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2006-12-14 18:49:41 +0000 |
commit | 0b1f069bf332eb6c21357d17b7b8a5795f165efc (patch) | |
tree | 55b5ea1cc965e2f5c7f2a4ccd4737c0cd7c44cbc /orkaudio/audiocaptureplugins/voip | |
parent | 16b829590e61bf6eabf1396682c8ada60fa380a6 (diff) |
Now possible to specify preferred IP adresses to track RTP sessions by populating <RtpTrackUsingIpAddresses>.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@371 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 13 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 28 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 3 |
3 files changed, 44 insertions, 0 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 7714d5d..9ca049a 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -979,6 +979,19 @@ void RtpSessions::ReportRtpPacket(RtpPacketInfoRef& rtpPacket) mergeeSession = session1; } } + + // Previous rules can be overruled by configuration, useful for merging sessions by "PSTN trunks" + if(DLLCONFIG.IsRtpTrackingIpAddress(rtpPacket->m_sourceIp)) + { + mergerSession = session1; + mergeeSession = session2; + } + else if(DLLCONFIG.IsRtpTrackingIpAddress(rtpPacket->m_destIp)) + { + mergerSession = session2; + mergeeSession = session1; + } + if(m_log->isInfoEnabled()) { CStdString debug; diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 7b32384..a3b4fe9 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -43,6 +43,7 @@ void VoIpConfig::Define(Serializer* s) s->CsvValue("Devices", m_devices); s->CsvValue("LanMasks", m_asciiLanMasks); s->CsvValue("MediaGateways", m_asciiMediaGateways); + s->CsvValue("RtpTrackUsingIpAddresses", m_asciiRtpTrackUsingIpAddresses); s->CsvValue("BlockedIpRanges", m_asciiBlockedIpRanges); s->CsvValue("AllowedIpRanges", m_asciiAllowedIpRanges); @@ -94,6 +95,21 @@ void VoIpConfig::Validate() } } + // iterate over ascii RTP tracking IP addresses and populate the binary IP addresses list + m_rtpTrackUsingIpAddresses.clear(); + for(it = m_asciiRtpTrackUsingIpAddresses.begin(); it != m_asciiRtpTrackUsingIpAddresses.end(); it++) + { + struct in_addr a; + if(ACE_OS::inet_aton((PCSTR)*it, &a)) + { + m_rtpTrackUsingIpAddresses.push_back((unsigned int)a.s_addr); + } + else + { + throw (CStdString("VoIpConfig: invalid IP address in RtpTrackUsingIpAddresses:" + *it) + " please fix config.xml"); + } + } + // Iterate over ascii allowed IP ranges and populate the bit width and prefix lists m_allowedIpRangePrefixes.clear(); m_allowedIpRangeBitWidths.clear(); @@ -231,6 +247,18 @@ bool VoIpConfig::IsMediaGateway(struct in_addr addr) return false; } +bool VoIpConfig::IsRtpTrackingIpAddress(struct in_addr addr) +{ + for(std::list<unsigned int>::iterator it = m_rtpTrackUsingIpAddresses.begin(); it != m_rtpTrackUsingIpAddresses.end(); it++) + { + if((unsigned int)addr.s_addr == *it) + { + return true; + } + } + return false; +} + bool VoIpConfig::IsPacketWanted(IpHeaderStruct* ipHeader) { bool wanted = true; // keep packet by default diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index 8829f85..1e73f93 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -36,6 +36,7 @@ public: bool IsPartOfLan(struct in_addr); bool IsMediaGateway(struct in_addr); + bool IsRtpTrackingIpAddress(struct in_addr addr); bool IsDeviceWanted(CStdString device); bool IsPacketWanted(IpHeaderStruct* ipHeader); @@ -45,6 +46,8 @@ public: std::list<CStdString> m_asciiMediaGateways; std::list<unsigned int> m_lanMasks; std::list<CStdString> m_asciiLanMasks; + std::list<unsigned int> m_rtpTrackUsingIpAddresses; + std::list<CStdString> m_asciiRtpTrackUsingIpAddresses; std::list<CStdString> m_asciiAllowedIpRanges; // CIDR notation std::list<unsigned int> m_allowedIpRangePrefixes; |