From 4807fe2c6198b39aff5c1ff1144c465b97575cb8 Mon Sep 17 00:00:00 2001 From: Gerald Begumisa Date: Fri, 24 Jul 2009 06:10:29 +0000 Subject: Added new configuration parameter, SipTreat200OkAsInvite, which causes SIP 200 OK packets to be treates as INVITEs. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@631 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h | 1 + orkaudio/audiocaptureplugins/voip/VoIp.cpp | 10 ++++++++++ orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 2 ++ orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 + 4 files changed, 14 insertions(+) diff --git a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h index 137e2e6..99de0b5 100644 --- a/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h +++ b/orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h @@ -365,6 +365,7 @@ struct Iax2MetaTrunkEntryTs { #define SIP_METHOD_INVITE "INVITE" #define SIP_METHOD_ACK "ACK" #define SIP_METHOD_BYE "BYE" +#define SIP_METHOD_200_OK "200 OK" #define SIP_RESPONSE_200_OK "SIP/2.0 200" #define SIP_RESPONSE_SESSION_PROGRESS "SIP/2.0 183 Session Progress" diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 285b620..2ca681c 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -1910,6 +1910,11 @@ bool TrySip200Ok(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader, { bool result = false; + if(DLLCONFIG.m_sipTreat200OkAsInvite == true) + { + return false; + } + int sipLength = ntohs(udpHeader->len) - sizeof(UdpHeaderStruct); char* sipEnd = (char*)udpPayload + sipLength; if(sipLength < SIP_RESPONSE_200_OK_SIZE || sipEnd > (char*)packetEnd) @@ -2072,6 +2077,11 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader { sipMethod = SIP_METHOD_ACK; } + else if((DLLCONFIG.m_sipTreat200OkAsInvite == true) && (memcmp(SIP_RESPONSE_200_OK, (void*)udpPayload, SIP_RESPONSE_200_OK_SIZE) == 0)) + { + sipMethod = SIP_METHOD_200_OK; + LOG4CXX_DEBUG(s_sipExtractionLog, "TrySipInvite: packet matches 200 OK and SipTreat200OkAsInvite is enabled"); + } else { drop = true; diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index 4c3f22d..5453498 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -49,6 +49,7 @@ VoIpConfig::VoIpConfig() m_sipIgnoreBye = false; m_sipReportNamesAsTags = false; m_sipRequestUriAsLocalParty = true; + m_sipTreat200OkAsInvite = false; m_rtcpDetect = false; m_inInMode = false; @@ -122,6 +123,7 @@ void VoIpConfig::Define(Serializer* s) s->BoolValue("SipIgnoreBye", m_sipIgnoreBye); s->BoolValue("SipReportNamesAsTags", m_sipReportNamesAsTags); s->BoolValue("SipRequestUriAsLocalParty", m_sipRequestUriAsLocalParty); + s->BoolValue("SipTreat200OkAsInvite", m_sipTreat200OkAsInvite); s->BoolValue("RtcpDetect", m_rtcpDetect); s->BoolValue("InInMode", m_inInMode); diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index 3ff66e7..77db63a 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -86,6 +86,7 @@ public: bool m_sipIgnoreBye; bool m_sipReportNamesAsTags; bool m_sipRequestUriAsLocalParty; + bool m_sipTreat200OkAsInvite; bool m_rtcpDetect; bool m_inInMode; -- cgit v1.2.3