From 5467dbb033031c787502eeaa739703e33b00bf79 Mon Sep 17 00:00:00 2001 From: Henri Herscher Date: Wed, 20 Jun 2007 14:52:23 +0000 Subject: Session info updating based on Skinny CallInfoMessage updates is now configurable. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@449 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/RtpSession.cpp | 44 +++++++++++++++--------- orkaudio/audiocaptureplugins/voip/RtpSession.h | 1 + orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp | 2 ++ orkaudio/audiocaptureplugins/voip/VoIpConfig.h | 1 + 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp index 2d0ceea..397874f 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.cpp @@ -801,6 +801,28 @@ void RtpSessions::ReportSipBye(SipByeInfo bye) } } +void RtpSessions::UpdateSessionWithCallInfo(SkCallInfoStruct* callInfo, RtpSessionRef& session) +{ + switch(callInfo->callType) + { + case SKINNY_CALL_TYPE_INBOUND: + case SKINNY_CALL_TYPE_FORWARD: + session->m_localParty = callInfo->calledParty; + session->m_remoteParty = callInfo->callingParty; + session->m_direction = CaptureEvent::DirIn; + break; + case SKINNY_CALL_TYPE_OUTBOUND: + session->m_localParty = callInfo->callingParty; + session->m_remoteParty = callInfo->calledParty; + session->m_direction = CaptureEvent::DirOut; + break; + default: + session->m_localParty = callInfo->calledParty; + session->m_remoteParty = callInfo->callingParty; + } +} + + void RtpSessions::ReportSkinnyCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruct* ipHeader) { CStdString callId = GenerateSkinnyCallId(ipHeader->ip_dest, callInfo->callId); @@ -813,6 +835,10 @@ void RtpSessions::ReportSkinnyCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruc // just update timestamp RtpSessionRef existingSession = pair->second; existingSession->m_skinnyLastCallInfoTime = ACE_OS::gettimeofday(); + if(DLLCONFIG.m_skinnyAllowCallInfoUpdate) + { + UpdateSessionWithCallInfo(callInfo, existingSession); + } return; } @@ -822,23 +848,7 @@ void RtpSessions::ReportSkinnyCallInfo(SkCallInfoStruct* callInfo, IpHeaderStruc session->m_callId = callId; session->m_endPointIp = ipHeader->ip_dest; // CallInfo message always goes from CM to endpoint session->m_protocol = RtpSession::ProtSkinny; - switch(callInfo->callType) - { - case SKINNY_CALL_TYPE_INBOUND: - case SKINNY_CALL_TYPE_FORWARD: - session->m_localParty = callInfo->calledParty; - session->m_remoteParty = callInfo->callingParty; - session->m_direction = CaptureEvent::DirIn; - break; - case SKINNY_CALL_TYPE_OUTBOUND: - session->m_localParty = callInfo->callingParty; - session->m_remoteParty = callInfo->calledParty; - session->m_direction = CaptureEvent::DirOut; - break; - default: - session->m_localParty = callInfo->calledParty; - session->m_remoteParty = callInfo->callingParty; - } + UpdateSessionWithCallInfo(callInfo, session); if(m_log->isInfoEnabled()) { diff --git a/orkaudio/audiocaptureplugins/voip/RtpSession.h b/orkaudio/audiocaptureplugins/voip/RtpSession.h index 7754873..861daad 100644 --- a/orkaudio/audiocaptureplugins/voip/RtpSession.h +++ b/orkaudio/audiocaptureplugins/voip/RtpSession.h @@ -163,6 +163,7 @@ private: bool ChangeCallId(RtpSessionRef& session, unsigned int newId); void SetMediaAddress(RtpSessionRef& session, struct in_addr mediaIp, unsigned short mediaPort); CStdString GenerateSkinnyCallId(struct in_addr endpointIp, unsigned int callId); + void UpdateSessionWithCallInfo(SkCallInfoStruct*, RtpSessionRef&); std::map m_byIpAndPort; std::map m_byCallId; diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp index c9dfdfe..a079cd6 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp @@ -44,6 +44,7 @@ VoIpConfig::VoIpConfig() m_skinnyIgnoreStopMediaTransmission = false; m_skinnyIgnoreOpenReceiveChannelAck = false; m_skinnyDynamicMediaAddress = false; + m_skinnyAllowCallInfoUpdate = false; } void VoIpConfig::Define(Serializer* s) @@ -80,6 +81,7 @@ void VoIpConfig::Define(Serializer* s) s->BoolValue("SkinnyIgnoreStopMediaTransmission", m_skinnyIgnoreStopMediaTransmission); s->BoolValue("SkinnyIgnoreOpenReceiveChannelAck", m_skinnyIgnoreOpenReceiveChannelAck); s->BoolValue("SkinnyDynamicMediaAddress", m_skinnyDynamicMediaAddress); + s->BoolValue("SkinnyAllowCallInfoUpdate", m_skinnyAllowCallInfoUpdate); } void VoIpConfig::Validate() diff --git a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h index 092c4a5..a9a4749 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIpConfig.h +++ b/orkaudio/audiocaptureplugins/voip/VoIpConfig.h @@ -77,6 +77,7 @@ public: bool m_skinnyIgnoreStopMediaTransmission; bool m_skinnyIgnoreOpenReceiveChannelAck; bool m_skinnyDynamicMediaAddress; + bool m_skinnyAllowCallInfoUpdate; std::list m_dnisNumbers; std::list m_sipExtractFields; -- cgit v1.2.3