diff options
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 13 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/RtpSession.h | 2 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 15 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 1 | ||||
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 |
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; }; //======================================== |