summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Begumisa <ben_g@users.sourceforge.net>2007-03-06 17:26:41 +0000
committerGerald Begumisa <ben_g@users.sourceforge.net>2007-03-06 17:26:41 +0000
commitaaf9793f442e14a80da56342f11fba24a57f8b3a (patch)
treea529efa2d63597204afb745109350bf3298acd83
parentbbb1a16f102f947b3841d5275512d867da797182 (diff)
Corrected issue where IAX2 checks masked SIP traffic
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@428 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r--orkaudio/audiocaptureplugins/voip/Iax2Session.cpp16
-rw-r--r--orkaudio/audiocaptureplugins/voip/Iax2Session.h2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp36
3 files changed, 28 insertions, 26 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp b/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp
index 8b6c3e0..6216f71 100644
--- a/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp
+++ b/orkaudio/audiocaptureplugins/voip/Iax2Session.cpp
@@ -788,8 +788,8 @@ void Iax2Sessions::Stop(Iax2SessionRef& session)
}
}
-
-void Iax2Sessions::ReportIax2Packet(Iax2PacketInfoRef& iax2Packet)
+/* Returns false if there is no matching session */
+bool Iax2Sessions::ReportIax2Packet(Iax2PacketInfoRef& iax2Packet)
{
Iax2SessionRef session;
CStdString logMsg, sourcecallno, IpAndCallNo;
@@ -817,10 +817,12 @@ void Iax2Sessions::ReportIax2Packet(Iax2PacketInfoRef& iax2Packet)
if(!session->AddIax2Packet(iax2Packet)) {
/* Discontinuity detected? */
Stop(session);
+ } else {
+ return true;
}
}
- return;
+ return false;
}
/* Search in the destination IP map */
@@ -832,16 +834,20 @@ void Iax2Sessions::ReportIax2Packet(Iax2PacketInfoRef& iax2Packet)
if(!session->AddIax2Packet(iax2Packet)) {
/* Discontinuity detected? */
Stop(session);
- }
+ } else {
+ return true;
+ }
}
- return;
+ return false;
}
/* XXX Tracking?? */
CStdString pktinfo;
iax2Packet->ToString(pktinfo);
//LOG4CXX_INFO(m_log, "Could not figure out where to place packet from "+IpAndCallNo+": [" + pktinfo +"]");
+
+ return false;
}
void Iax2Sessions::StopAll()
diff --git a/orkaudio/audiocaptureplugins/voip/Iax2Session.h b/orkaudio/audiocaptureplugins/voip/Iax2Session.h
index 1b1718c..ff803d1 100644
--- a/orkaudio/audiocaptureplugins/voip/Iax2Session.h
+++ b/orkaudio/audiocaptureplugins/voip/Iax2Session.h
@@ -250,7 +250,7 @@ public:
void ReportIax2Hangup(Iax2HangupInfoRef& hangup);
void ReportIax2Accept(Iax2AcceptInfoRef& acceptinfo);
void ReportIax2Authreq(Iax2AuthreqInfoRef& authreq);
- void ReportIax2Packet(Iax2PacketInfoRef& iax2Packet);
+ bool ReportIax2Packet(Iax2PacketInfoRef& iax2Packet);
void Hoover(time_t now);
private:
std::map<CStdString, Iax2SessionRef> m_bySrcIpAndCallNo; /* With IAX2 the callnos can easily
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index c3791c8..fd09335 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -975,11 +975,7 @@ bool TryIax2MiniVoiceFrame(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct*
info->m_arrivalTimestamp = time(NULL);
info->m_frame_type = IAX2_FRAME_MINI;
- Iax2SessionsSingleton::instance()->ReportIax2Packet(info);
-
- //LOG4CXX_INFO(s_packetLog, "Processed IAX2 Mini Voice packet");
-
- return true;
+ return Iax2SessionsSingleton::instance()->ReportIax2Packet(info);
}
bool TryRtp(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, UdpHeaderStruct* udpHeader, u_char* udpPayload)
@@ -1457,7 +1453,21 @@ void HandlePacket(u_char *param, const struct pcap_pkthdr *header, const u_char
MutexSentinel mutexSentinel(s_mutex); // serialize access for competing pcap threads
- detectedUsefulPacket = TryIax2New(ethernetHeader, ipHeader, udpHeader, udpPayload);
+ detectedUsefulPacket = TryRtp(ethernetHeader, ipHeader, udpHeader, udpPayload);
+
+ if(!detectedUsefulPacket) {
+ detectedUsefulPacket= TrySipInvite(ethernetHeader, ipHeader, udpHeader,
+ udpPayload);
+ }
+
+ if(!detectedUsefulPacket) {
+ detectedUsefulPacket = TrySipBye(ethernetHeader, ipHeader, udpHeader,
+ udpPayload);
+ }
+
+ if(!detectedUsefulPacket) {
+ detectedUsefulPacket = TryIax2New(ethernetHeader, ipHeader, udpHeader, udpPayload);
+ }
if(!detectedUsefulPacket) {
detectedUsefulPacket = TryIax2Accept(ethernetHeader, ipHeader, udpHeader,
@@ -1498,20 +1508,6 @@ void HandlePacket(u_char *param, const struct pcap_pkthdr *header, const u_char
detectedUsefulPacket = TryIax2MiniVoiceFrame(ethernetHeader, ipHeader,
udpHeader, udpPayload);
}
-
- if(!detectedUsefulPacket) {
- detectedUsefulPacket = TryRtp(ethernetHeader, ipHeader, udpHeader, udpPayload);
- }
-
- if(!detectedUsefulPacket) {
- detectedUsefulPacket= TrySipInvite(ethernetHeader, ipHeader, udpHeader,
- udpPayload);
- }
-
- if(!detectedUsefulPacket) {
- detectedUsefulPacket = TrySipBye(ethernetHeader, ipHeader, udpHeader,
- udpPayload);
- }
}
}
else if(ipHeader->ip_p == IPPROTO_TCP)