From aaf9793f442e14a80da56342f11fba24a57f8b3a Mon Sep 17 00:00:00 2001 From: Gerald Begumisa Date: Tue, 6 Mar 2007 17:26:41 +0000 Subject: 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 --- orkaudio/audiocaptureplugins/voip/Iax2Session.cpp | 16 ++++++---- orkaudio/audiocaptureplugins/voip/Iax2Session.h | 2 +- orkaudio/audiocaptureplugins/voip/VoIp.cpp | 36 ++++++++++------------- 3 files changed, 28 insertions(+), 26 deletions(-) (limited to 'orkaudio') 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 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) -- cgit v1.2.3