summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.cpp44
-rw-r--r--orkaudio/audiocaptureplugins/voip/RtpSession.h1
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.cpp2
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIpConfig.h1
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<CStdString, RtpSessionRef> m_byIpAndPort;
std::map<CStdString, RtpSessionRef> 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<CStdString> m_dnisNumbers;
std::list<CStdString> m_sipExtractFields;