From 0e2a2e49077b79bd52d6c83c5202e452e7eea091 Mon Sep 17 00:00:00 2001 From: Gerald Begumisa Date: Wed, 7 Jan 2009 13:07:31 +0000 Subject: Modified the orkaudio API, adding the record and pause HTTP commands. The record command commences or un-pauses recording while the pause command pauses recording - discarding RTP packets from when the pause command is issued. Both commands require the orkuid and party to be specified as HTTP parameters. Note that this represents a change in the arguments required for the StartCapture function in DLLs. Also added an event streaming feature which streams out all tape messages as they are reported in real-time to a client connected. Clients should connect via HTTP, on port 59150. The port is configurable by setting the parameter EventStreamingServerPort in config.xml git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@590 09dcff7a-b715-0410-9601-b79a96267cd0 --- .../common/AudioCapturePluginCommon.h | 3 +- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 94 +++++++++++++++++++++- orkaudio/audiocaptureplugins/voip/RtpSession.h | 3 + orkaudio/audiocaptureplugins/voip/VoIp.cpp | 45 +++++++++-- 4 files changed, 136 insertions(+), 9 deletions(-) (limited to 'orkaudio/audiocaptureplugins') diff --git a/orkaudio/audiocaptureplugins/common/AudioCapturePluginCommon.h b/orkaudio/audiocaptureplugins/common/AudioCapturePluginCommon.h index 4697317..a6defae 100644 --- a/orkaudio/audiocaptureplugins/common/AudioCapturePluginCommon.h +++ b/orkaudio/audiocaptureplugins/common/AudioCapturePluginCommon.h @@ -30,8 +30,9 @@ DLL_EXPORT void __CDECL__ Run(); DLL_EXPORT void __CDECL__ Initialize(); DLL_EXPORT void __CDECL__ Shutdown(); DLL_EXPORT void __CDECL__ Configure(DOMNode*); -DLL_EXPORT void __CDECL__ StartCapture(CStdString& party); +DLL_EXPORT void __CDECL__ StartCapture(CStdString& party, CStdString& orkuid); DLL_EXPORT void __CDECL__ StopCapture(CStdString& party); +DLL_EXPORT void __CDECL__ PauseCapture(CStdString& party, CStdString& orkuid); } #endif diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index cf1ba08..a8b2d40 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -2383,6 +2383,36 @@ void RtpSessions::Hoover(time_t now) } } +void RtpSessions::StartCaptureOrkuid(CStdString& orkuid) +{ + std::map::iterator pair; + bool found = false; + CStdString logMsg; + RtpSessionRef session; + + for(pair = m_byIpAndPort.begin(); pair != m_byIpAndPort.end() && found == false; pair++) + { + session = pair->second; + + if(session->OrkUidMatches(orkuid)) + { + session->m_keep = true; + found = true; + } + } + + if(found) + { + logMsg.Format("[%s] StartCaptureOrkuid: Started capture, orkuid:%s", session->m_trackingId, orkuid); + } + else + { + logMsg.Format("StartCaptureOrkuid: No session has orkuid:%s", orkuid); + } + + LOG4CXX_INFO(m_log, logMsg); +} + void RtpSessions::StartCapture(CStdString& party) { std::map::iterator pair; @@ -2403,16 +2433,76 @@ void RtpSessions::StartCapture(CStdString& party) if(found) { - logMsg.Format("[%s] Started capture, party:%s", session->m_trackingId, party); + logMsg.Format("[%s] StartCapture: Started capture, party:%s", session->m_trackingId, party); } else { - logMsg.Format("No session has party %s", party); + logMsg.Format("StartCapture: No session has party %s", party); } LOG4CXX_INFO(m_log, logMsg); } +void RtpSessions::PauseCapture(CStdString& party) +{ + std::map::iterator pair; + bool found = false; + CStdString logMsg; + RtpSessionRef session; + + for(pair = m_byIpAndPort.begin(); pair != m_byIpAndPort.end() && found == false; pair++) + { + session = pair->second; + + if (session->PartyMatches(party)) + { + session->m_keep = false; + found = true; + } + } + + if(found) + { + logMsg.Format("[%s] PauseCapture: Paused capture, party:%s", session->m_trackingId, party); + } + else + { + logMsg.Format("PauseCapture: No session has party %s", party); + } + + LOG4CXX_INFO(m_log, logMsg); +} + +void RtpSessions::PauseCaptureOrkuid(CStdString& orkuid) +{ + std::map::iterator pair; + bool found = false; + CStdString logMsg; + RtpSessionRef session; + + for(pair = m_byIpAndPort.begin(); pair != m_byIpAndPort.end() && found == false; pair++) + { + session = pair->second; + + if(session->OrkUidMatches(orkuid)) + { + session->m_keep = false; + found = true; + } + } + + if(found) + { + logMsg.Format("[%s] PauseCaptureOrkuid: Paused capture, orkuid:%s", session->m_trackingId, orkuid); + } + else + { + logMsg.Format("PauseCaptureOrkuid: No session has orkuid:%s", orkuid); + } + + LOG4CXX_INFO(m_log, logMsg); +} + //========================================================== SipInviteInfo::SipInviteInfo() { diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h index a24c882..6695985 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.h +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h @@ -257,6 +257,9 @@ public: void Hoover(time_t now); EndpointInfoRef GetEndpointInfo(struct in_addr endpointIp); void StartCapture(CStdString& party); + void StartCaptureOrkuid(CStdString& orkuid); + void PauseCapture(CStdString& party); + void PauseCaptureOrkuid(CStdString& orkuid); private: RtpSessionRef findByEndpointIp(struct in_addr endpointIpAddr, int passThruPartyId = 0); diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 25cda38..63fa355 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -83,8 +83,9 @@ public: void Initialize(); void Run(); void Shutdown(); - void StartCapture(CStdString& port); + void StartCapture(CStdString& port, CStdString& orkuid); void StopCapture(CStdString& port); + void PauseCapture(CStdString& port, CStdString& orkuid); void ReportPcapStats(); pcap_t* OpenDevice(CStdString& name); void AddPcapDeviceToMap(CStdString& deviceName, pcap_t* pcapHandle); @@ -3199,7 +3200,12 @@ void VoIp::Shutdown() #endif } -void VoIp::StartCapture(CStdString& port) +void VoIp::StartCapture(CStdString& port, CStdString& orkuid) +{ + ; +} + +void VoIp::PauseCapture(CStdString& port, CStdString& orkuid) { ; } @@ -3225,15 +3231,42 @@ void __CDECL__ Shutdown() VoIpSingleton::instance()->Shutdown(); } -void __CDECL__ StartCapture(CStdString& party) +void __CDECL__ StartCapture(CStdString& party, CStdString& orkuid) { CStdString logMsg; - //logMsg.Format("StartCapture:%s", party); - //LOG4CXX_INFO(s_voipPluginLog, logMsg); + logMsg.Format("StartCapture: party:%s orkuid:%s", party, orkuid); + LOG4CXX_INFO(s_voipPluginLog, logMsg); MutexSentinel mutexSentinel(s_mutex); - RtpSessionsSingleton::instance()->StartCapture(party); + + if(orkuid.size()) + { + RtpSessionsSingleton::instance()->StartCaptureOrkuid(orkuid); + } + else + { + RtpSessionsSingleton::instance()->StartCapture(party); + } +} + +void __CDECL__ PauseCapture(CStdString& party, CStdString& orkuid) +{ + CStdString logMsg; + + logMsg.Format("PauseCapture: party:%s orkuid:%s", party, orkuid); + LOG4CXX_INFO(s_voipPluginLog, logMsg); + + MutexSentinel mutexSentinel(s_mutex); + + if(orkuid.size()) + { + RtpSessionsSingleton::instance()->PauseCaptureOrkuid(orkuid); + } + else + { + RtpSessionsSingleton::instance()->PauseCapture(party); + } } void __CDECL__ StopCapture(CStdString& party) -- cgit v1.2.3