summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Begumisa <ben_g@users.sourceforge.net>2009-07-24 06:10:29 +0000
committerGerald Begumisa <ben_g@users.sourceforge.net>2009-07-24 06:10:29 +0000
commit4807fe2c6198b39aff5c1ff1144c465b97575cb8 (patch)
tree6d28c490a4ed771d5f50e9e557c972ce6fd0f173
parent1ed6f23ad180e37cb3b6564f6a613197f05508e5 (diff)
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
-rw-r--r--orkaudio/audiocaptureplugins/voip/PacketHeaderDefs.h1
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp10
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h1
4 files changed, 14 insertions, 0 deletions
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;