summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-09-19 18:21:47 +0000
committerHenri Herscher <henri@oreka.org>2007-09-19 18:21:47 +0000
commitd9e471cb8b3a7e79407b9614212d6b93a2b69427 (patch)
tree8b96afe348d69395d6bae1815a99d65fcf99c51b
parent82a580070e685ab9a0502ed307fd50005130fa26 (diff)
Added SipUse200OkMediaAddress configuration switch. If enabled, SIP 200 OK SDP media address prevails over INVITE SDP media address.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@492 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp43
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.h4
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp15
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h1
5 files changed, 35 insertions, 30 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
index efb43a8..9a3b46a 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
@@ -310,7 +310,11 @@ void RtpSession::ProcessMetadataSip(RtpPacketInfoRef& rtpPacket)
}
else
{
- LOG4CXX_ERROR(m_log, "[" + m_trackingId + "] " + m_ipAndPort + " alien RTP packet");
+ m_inviteeIp = rtpPacket->m_sourceIp;
+ m_inviteeTcpPort = rtpPacket->m_sourcePort;
+ m_invitorTcpPort = rtpPacket->m_destPort;
+ memcpy(m_inviteeMac, rtpPacket->m_sourceMac, sizeof(m_inviteeMac));
+ LOG4CXX_WARN(m_log, "[" + m_trackingId + "] " + m_ipAndPort + " alien RTP packet");
}
// work out capture port and direction
@@ -933,30 +937,23 @@ void RtpSessions::ReportSip200Ok(Sip200OkInfoRef info)
{
RtpSessionRef session = pair->second;
- if(info->m_hasSdp && DLLCONFIG.IsPartOfLan(session->m_fromRtpIp) && !DLLCONFIG.IsPartOfLan(info->m_fromRtpIp) && !session->m_numRtpPackets)
+ //if(info->m_hasSdp && DLLCONFIG.IsPartOfLan(session->m_fromRtpIp) && !DLLCONFIG.IsPartOfLan(info->m_fromRtpIp) && !session->m_numRtpPackets)
+ if(info->m_hasSdp && DLLCONFIG.m_sipUse200OkMediaAddress && !session->m_numRtpPackets)
{
- char szFromRtpIp[16];
-
- ACE_OS::inet_ntop(AF_INET, (void*)&info->m_fromRtpIp, szFromRtpIp, sizeof(szFromRtpIp));
- m_byIpAndPort.erase(session->m_ipAndPort);
- session->m_ipAndPort = CStdString(szFromRtpIp) + "," + info->m_fromRtpPort;
-
- pair = m_byIpAndPort.find(session->m_ipAndPort);
- if (pair != m_byIpAndPort.end())
- {
- RtpSessionRef session2 = pair->second;
-
- if(session2->m_protocol == RtpSession::ProtRawRtp)
- {
- Stop(session2);
- }
- }
-
- m_byIpAndPort.insert(std::make_pair(session->m_ipAndPort, session));
-
- LOG4CXX_INFO(m_log, "[" + session->m_trackingId + "] updated RTP address: " + session->m_ipAndPort);
+ unsigned short mediaPort = ACE_OS::atoi(info->m_mediaPort);
+ SetMediaAddress(session, info->m_mediaIp, mediaPort);
}
+ //else
+ //{
+ // CStdString logString;
+ // logString.Format("hasSDP:%d use200:%d numRtpPkts:%d callId:%s", info->m_hasSdp, DLLCONFIG.m_sipUse200OkMediaAddress, session->m_numRtpPackets, info->m_callId);
+ // LOG4CXX_INFO(m_log, "[" + session->m_trackingId + "] 200Ok RTP address not updated: " + session->m_ipAndPort + " " + logString );
+ //}
}
+ //else
+ //{
+ // LOG4CXX_INFO(m_log, "200OK Did not find " + info->m_callId);
+ //}
}
void RtpSessions::ReportSipBye(SipByeInfo bye)
@@ -1796,7 +1793,7 @@ void SipFailureMessageInfo::ToString(CStdString& string)
Sip200OkInfo::Sip200OkInfo()
{
- m_fromRtpIp.s_addr = 0;
+ m_mediaIp.s_addr = 0;
m_hasSdp = false;
}
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h
index ec9d262..02cc7ce 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.h
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h
@@ -77,8 +77,8 @@ public:
Sip200OkInfo();
CStdString m_callId;
bool m_hasSdp;
- struct in_addr m_fromRtpIp;
- CStdString m_fromRtpPort;
+ struct in_addr m_mediaIp;
+ CStdString m_mediaPort;
};
typedef boost::shared_ptr<Sip200OkInfo> Sip200OkInfoRef;
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index 013a79a..d85d05c 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -1396,7 +1396,12 @@ bool TrySip200Ok(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader,
Sip200OkInfoRef info(new Sip200OkInfo());
- char* callIdField = memFindAfter("\r\ni:", (char*)udpPayload, sipEnd);
+ char* callIdField = memFindAfter("Call-ID:", (char*)udpPayload, sipEnd);
+ if(!callIdField)
+ {
+ callIdField = memFindAfter("\ni:", (char*)udpPayload, sipEnd);
+ }
+
char* audioField = NULL;
char* connectionAddressField = NULL;
@@ -1410,16 +1415,16 @@ bool TrySip200Ok(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader,
{
info->m_hasSdp = true;
- GrabToken(audioField, sipEnd, info->m_fromRtpPort);
+ GrabToken(audioField, sipEnd, info->m_mediaPort);
CStdString connectionAddress;
GrabToken(connectionAddressField, sipEnd, connectionAddress);
- struct in_addr fromIp;
+ struct in_addr mediaIp;
if(connectionAddress.size())
{
- if(ACE_OS::inet_aton((PCSTR)connectionAddress, &fromIp))
+ if(ACE_OS::inet_aton((PCSTR)connectionAddress, &mediaIp))
{
- info->m_fromRtpIp = fromIp;
+ info->m_mediaIp = mediaIp;
}
}
}
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
index b2a5058..fdad117 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
@@ -40,6 +40,7 @@ VoIpConfig::VoIpConfig()
m_rtpDetectOnOddPorts = false;
m_sipOverTcpSupport = false; // Disabled by default
m_sipLogFailedCalls = false;
+ m_sipUse200OkMediaAddress = false;
m_useMacIfNoLocalParty = false; // Uses IP address by default
@@ -84,6 +85,7 @@ void VoIpConfig::Define(Serializer* s)
s->CsvValue("SipExtractFields", m_sipExtractFields);
s->BoolValue("SipOverTcpSupport", m_sipOverTcpSupport);
s->BoolValue("SipLogFailedCalls", m_sipLogFailedCalls);
+ s->BoolValue("SipUse200OkMediaAddress", m_sipUse200OkMediaAddress);
s->BoolValue("UseMacIfNoLocalParty", m_useMacIfNoLocalParty);
s->BoolValue("SkinnyIgnoreStopMediaTransmission", m_skinnyIgnoreStopMediaTransmission);
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
index 7305588..2771732 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
@@ -74,6 +74,7 @@ public:
bool m_iax2Support;
bool m_sipOverTcpSupport;
bool m_sipLogFailedCalls;
+ bool m_sipUse200OkMediaAddress;
bool m_useMacIfNoLocalParty;
bool m_skinnyIgnoreStopMediaTransmission;