summaryrefslogtreecommitdiff
path: root/orkaudio
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2006-12-14 18:49:41 +0000
committerHenri Herscher <henri@oreka.org>2006-12-14 18:49:41 +0000
commit0b1f069bf332eb6c21357d17b7b8a5795f165efc (patch)
tree55b5ea1cc965e2f5c7f2a4ccd4737c0cd7c44cbc /orkaudio
parent16b829590e61bf6eabf1396682c8ada60fa380a6 (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')
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp13
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp28
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h3
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;