summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-04-13 20:07:14 +0000
committerHenri Herscher <henri@oreka.org>2007-04-13 20:07:14 +0000
commit2c370d203163951283f80bd229cc81bf533fb089 (patch)
treeac9a51cad9802bb770c3d72e30c3e952b429803e /orkaudio/audiocaptureplugins
parentc78e205237f0fd156f46ca104ee188107c53a1af (diff)
SIP field extraction now functional.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@437 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins')
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp13
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.h2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp15
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp1
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h1
5 files changed, 31 insertions, 1 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
index fca259d..2d32ee8 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp
@@ -402,6 +402,16 @@ void RtpSession::ReportMetadata()
event->m_value = m_callId;
g_captureEventCallBack(event, m_capturePort);
+ // Report extracted fields
+ for(std::map<CStdString, CStdString>::iterator pair = m_tags.begin(); pair != m_tags.end(); pair++)
+ {
+ event.reset(new CaptureEvent());
+ event->m_type = CaptureEvent::EtKeyValue;
+ event->m_key = pair->first;
+ event->m_value = pair->second;
+ g_captureEventCallBack(event, m_capturePort);
+ }
+
// Report end of metadata
event.reset(new CaptureEvent());
event->m_type = CaptureEvent::EtEndMetadata;
@@ -608,6 +618,9 @@ void RtpSession::ReportSipInvite(SipInviteInfoRef& invite)
LOG4CXX_INFO(m_log, logMsg);
}
m_invites.push_front(invite);
+
+ // Gather extracted fields
+ std::copy(invite->m_extractedFields.begin(), invite->m_extractedFields.end(), std::inserter(m_tags, m_tags.begin()));
}
int RtpSession::ProtocolToEnum(CStdString& protocol)
diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h
index f2216aa..6c66e85 100644
--- a/orkaudio/audiocaptureplugins/voip/RtpSession.h
+++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h
@@ -37,6 +37,7 @@ public:
CStdString m_to;
CStdString m_callId;
bool m_validated; // true when an RTP stream has been seen for the INVITE
+ std::map<CStdString, CStdString> m_extractedFields;
};
typedef boost::shared_ptr<SipInviteInfo> SipInviteInfoRef;
@@ -121,6 +122,7 @@ private:
double m_minRtpTimestampDelta;
TcpAddressList m_rtpAddressList;
std::list<SipInviteInfoRef> m_invites;
+ std::map<CStdString, CStdString> m_tags;
};
typedef boost::shared_ptr<RtpSession> RtpSessionRef;
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index e34330f..6e7c8fb 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -10,7 +10,7 @@
* Please refer to http://www.gnu.org/copyleft/gpl.html
*
*/
-
+#pragma warning( disable: 4786 ) // disables truncated symbols in browse-info warning
#define _WINSOCKAPI_ // prevents the inclusion of winsock.h
#ifndef WIN32
@@ -1177,6 +1177,19 @@ bool TrySipInvite(EthernetHeaderStruct* ethernetHeader, IpHeaderStruct* ipHeader
}
}
}
+ // SIP fields extraction
+ for(std::list<CStdString>::iterator it = DLLCONFIG.m_sipExtractFields.begin(); it != DLLCONFIG.m_sipExtractFields.end(); it++)
+ {
+ CStdString fieldName = *it + ":";
+ char* szField = memFindAfter((PSTR)(PCSTR)fieldName, (char*)udpPayload, sipEnd);
+ if(szField)
+ {
+ CStdString field;
+ GrabLine(szField, sipEnd, field);
+ info->m_extractedFields.insert(std::make_pair(*it, field));
+ }
+ }
+
if((unsigned int)info->m_fromRtpIp.s_addr == 0)
{
// In case connection address could not be extracted, use SIP invite sender IP address
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
index 0d64951..c8e1459 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp
@@ -65,6 +65,7 @@ void VoIpConfig::Define(Serializer* s)
s->CsvValue("DnisNumbers", m_dnisNumbers);
s->BoolValue("Iax2Support", m_iax2Support);
s->BoolValue("RtpDetectOnOddPorts", m_rtpDetectOnOddPorts);
+ s->CsvValue("SipExtractFields", m_sipExtractFields);
}
void VoIpConfig::Validate()
diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
index e1e0454..df6ef45 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
+++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h
@@ -72,6 +72,7 @@ public:
bool m_iax2Support;
std::list<CStdString> m_dnisNumbers;
+ std::list<CStdString> m_sipExtractFields;
};
//========================================