summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip
diff options
context:
space:
mode:
authorGerald Begumisa <ben_g@users.sourceforge.net>2007-11-16 18:13:02 +0000
committerGerald Begumisa <ben_g@users.sourceforge.net>2007-11-16 18:13:02 +0000
commit85510faf825618fb0a69e0fc3515e578cee939df (patch)
treedc067faf06b48dbf014ac382b89291417342757f /orkaudio/audiocaptureplugins/voip
parent5aaf71ebc7803fd8e6ef3cfaabbc98ad2aa11ae9 (diff)
Added support to 200 OK packets in the same fashion as INVITE packets
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@507 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip')
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp20
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.h7
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp85
3 files changed, 112 insertions, 0 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
index 5722551..82d1d0d 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
@@ -1923,3 +1923,23 @@ Sip200OkInfo::Sip200OkInfo()
m_hasSdp = false;
}
+void Sip200OkInfo::ToString(CStdString& string)
+{
+ char mediaIp[16];
+ ACE_OS::inet_ntop(AF_INET, (void*)&m_mediaIp, mediaIp, sizeof(mediaIp));
+
+ char senderIp[16];
+ ACE_OS::inet_ntop(AF_INET, (void*)&m_senderIp, senderIp, sizeof(senderIp));
+
+ char receiverIp[16];
+ ACE_OS::inet_ntop(AF_INET, (void*)&m_receiverIp, receiverIp, sizeof(receiverIp));
+
+ if(m_mediaPort.size())
+ {
+ string.Format("sender:%s from:%s RTP:%s,%s to:%s rcvr:%s callid:%s", senderIp, m_from, mediaIp, m_mediaPort, m_to, receiverIp, m_callId);
+ }
+ else
+ {
+ string.Format("sender:%s from:%s to:%s rcvr:%s callid:%s", senderIp, m_from, m_to, receiverIp, m_callId);
+ }
+}
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h
index aff62f6..e8d9f3f 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.h
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h
@@ -77,10 +77,17 @@ class Sip200OkInfo
{
public:
Sip200OkInfo();
+ void ToString(CStdString& string);
+
CStdString m_callId;
bool m_hasSdp;
struct in_addr m_mediaIp;
CStdString m_mediaPort;
+
+ struct in_addr m_senderIp;
+ struct in_addr m_receiverIp;
+ CStdString m_from;
+ CStdString m_to;
};
typedef boost::shared_ptr<Sip200OkInfo> Sip200OkInfoRef;
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index 8b725d0..4fdfeb0 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -1425,6 +1425,17 @@ bool TrySip200Ok(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader,
Sip200OkInfoRef info(new Sip200OkInfo());
+ char* fromField = memFindAfter("From:", (char*)udpPayload, sipEnd);
+ if(!fromField)
+ {
+ fromField = memFindAfter("\nf:", (char*)udpPayload, sipEnd);
+ }
+ char* toField = memFindAfter("To:", (char*)udpPayload, sipEnd);
+ if(!toField)
+ {
+ toField = memFindAfter("\nt:", (char*)udpPayload, sipEnd);
+ }
+
char* callIdField = memFindAfter("Call-ID:", (char*)udpPayload, sipEnd);
if(!callIdField)
{
@@ -1458,6 +1469,80 @@ bool TrySip200Ok(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader,
}
}
+ if(fromField)
+ {
+ if(s_sipExtractionLog->isDebugEnabled())
+ {
+ CStdString from;
+ GrabLine(fromField, sipEnd, from);
+ LOG4CXX_DEBUG(s_sipExtractionLog, "from: " + from);
+ }
+
+ char* fromFieldEnd = memFindEOL(fromField, sipEnd);
+
+ char* sipUser = memFindAfter("sip:", fromField, fromFieldEnd);
+ if(sipUser)
+ {
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(sipUser, fromFieldEnd, info->m_from);
+ }
+ else
+ {
+ GrabSipUriUser(sipUser, fromFieldEnd, info->m_from);
+ }
+ }
+ else
+ {
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(fromField, fromFieldEnd, info->m_from);
+ }
+ else
+ {
+ GrabSipUriUser(fromField, fromFieldEnd, info->m_from);
+ }
+ }
+ }
+ if(toField)
+ {
+ CStdString to;
+ char* toFieldEnd = GrabLine(toField, sipEnd, to);
+ LOG4CXX_DEBUG(s_sipExtractionLog, "to: " + to);
+
+ char* sipUser = memFindAfter("sip:", toField, toFieldEnd);
+ if(sipUser)
+ {
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(sipUser, toFieldEnd, info->m_to);
+ }
+ else
+ {
+ GrabSipUriUser(sipUser, toFieldEnd, info->m_to);
+ }
+ }
+ else
+ {
+ if(DLLCONFIG.m_sipReportFullAddress)
+ {
+ GrabSipUserAddress(toField, toFieldEnd, info->m_to);
+ }
+ else
+ {
+ GrabSipUriUser(toField, toFieldEnd, info->m_to);
+ }
+ }
+ }
+ info->m_senderIp = ipHeader->ip_src;
+ info->m_receiverIp = ipHeader->ip_dest;
+
+ CStdString logMsg;
+
+ info->ToString(logMsg);
+ logMsg = "200 OK: " + logMsg;
+ LOG4CXX_INFO(s_sipPacketLog, logMsg);
+
RtpSessionsSingleton::instance()->ReportSip200Ok(info);
}
return result;