From 5229923253c34704218f9f38051c216d24023e16 Mon Sep 17 00:00:00 2001 From: Henri Herscher Date: Mon, 24 Oct 2005 21:10:39 +0000 Subject: VoIP plugin now tries to associate a SIP call to a capture port that is made of the actual local SIP agent (phone) IP address and TCP port. Before that, a capture port could be made of a gateway or external IP address and TCP port. git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@11 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkaudio/audiocaptureplugins/voip/SipSession.cpp | 28 ++++++++++++++-------- orkaudio/audiocaptureplugins/voip/SipSession.h | 2 ++ orkaudio/config-template.xml | 2 +- .../java/net/sf/oreka/persistent/RecProgram.java | 3 +-- .../java/net/sf/oreka/persistent/RecSegment.java | 3 +-- orkbasej/java/net/sf/oreka/persistent/RecTape.java | 3 +-- orktrack/src/net/sf/oreka/orktrack/Port.java | 1 + 7 files changed, 25 insertions(+), 17 deletions(-) diff --git a/orkaudio/audiocaptureplugins/voip/SipSession.cpp b/orkaudio/audiocaptureplugins/voip/SipSession.cpp index e62a612..2139a28 100644 --- a/orkaudio/audiocaptureplugins/voip/SipSession.cpp +++ b/orkaudio/audiocaptureplugins/voip/SipSession.cpp @@ -33,27 +33,29 @@ SipSession::SipSession() m_lastUpdated = time(NULL); m_log = Logger::getLogger("sipsession"); m_invitorIp.s_addr = 0; + m_invitorTcpPort = 0; m_inviteeIp.s_addr = 0; + m_inviteeTcpPort = 0; m_direction = CaptureEvent::DirUnkn; } void SipSession::Stop() { - LOG4CXX_DEBUG(m_log, m_ipAndPort + " SIP Session stop"); + LOG4CXX_DEBUG(m_log, m_capturePort + " SIP Session stop"); CaptureEventRef stopEvent(new CaptureEvent); stopEvent->m_type = CaptureEvent::EtStop; stopEvent->m_timestamp = time(NULL); - g_captureEventCallBack(stopEvent, m_ipAndPort); + g_captureEventCallBack(stopEvent, m_capturePort); } void SipSession::Start() { - LOG4CXX_DEBUG(m_log, m_ipAndPort + " SIP Session start"); - m_rtpRingBuffer.SetCapturePort(m_ipAndPort); + LOG4CXX_DEBUG(m_log, m_capturePort + " SIP Session start"); + m_rtpRingBuffer.SetCapturePort(m_capturePort); CaptureEventRef startEvent(new CaptureEvent); startEvent->m_type = CaptureEvent::EtStart; startEvent->m_timestamp = time(NULL); - g_captureEventCallBack(startEvent, m_ipAndPort); + g_captureEventCallBack(startEvent, m_capturePort); } void SipSession::ProcessMetadataIncoming() @@ -61,6 +63,7 @@ void SipSession::ProcessMetadataIncoming() m_remoteParty = m_invite->m_from; m_localParty = m_invite->m_to; m_direction = CaptureEvent::DirIn; + m_capturePort.Format("%s,%d", ACE_OS::inet_ntoa(m_inviteeIp), m_inviteeTcpPort); } void SipSession::ProcessMetadataOutgoing() @@ -68,6 +71,7 @@ void SipSession::ProcessMetadataOutgoing() m_remoteParty = m_invite->m_to; m_localParty = m_invite->m_from; m_direction = CaptureEvent::DirOut; + m_capturePort.Format("%s,%d", ACE_OS::inet_ntoa(m_invitorIp), m_invitorTcpPort); } void SipSession::ProcessMetadata(RtpPacketInfoRef& rtpPacket) @@ -78,10 +82,14 @@ void SipSession::ProcessMetadata(RtpPacketInfoRef& rtpPacket) if(rtpPacket->m_sourceIp.s_addr == m_invitorIp.s_addr) { m_inviteeIp = rtpPacket->m_destIp; + m_inviteeTcpPort = rtpPacket->m_destPort; + m_invitorTcpPort = rtpPacket->m_sourcePort; } else if(rtpPacket->m_destIp.s_addr == m_invitorIp.s_addr) { m_inviteeIp = rtpPacket->m_sourceIp; + m_inviteeTcpPort = rtpPacket->m_sourcePort; + m_invitorTcpPort = rtpPacket->m_destPort; } else { @@ -121,7 +129,6 @@ void SipSession::ProcessMetadata(RtpPacketInfoRef& rtpPacket) ProcessMetadataOutgoing(); } } - ReportMetadata(); } void SipSession::ReportMetadata() @@ -130,19 +137,19 @@ void SipSession::ReportMetadata() CaptureEventRef event(new CaptureEvent()); event->m_type = CaptureEvent::EtLocalParty; event->m_value = m_localParty; - g_captureEventCallBack(event, m_ipAndPort); + g_captureEventCallBack(event, m_capturePort); // Report remote party event.reset(new CaptureEvent()); event->m_type = CaptureEvent::EtRemoteParty; event->m_value = m_remoteParty; - g_captureEventCallBack(event, m_ipAndPort); + g_captureEventCallBack(event, m_capturePort); // report direction event.reset(new CaptureEvent()); event->m_type = CaptureEvent::EtDirection; event->m_value = CaptureEvent::DirectionToString(m_direction); - g_captureEventCallBack(event, m_ipAndPort); + g_captureEventCallBack(event, m_capturePort); } @@ -151,8 +158,9 @@ void SipSession::AddRtpPacket(RtpPacketInfoRef& rtpPacket) // if first RTP packet, start session if(m_lastRtpPacket.get() == NULL) { - Start(); ProcessMetadata(rtpPacket); + Start(); + ReportMetadata(); } m_lastRtpPacket = rtpPacket; diff --git a/orkaudio/audiocaptureplugins/voip/SipSession.h b/orkaudio/audiocaptureplugins/voip/SipSession.h index 4702bac..c1aa379 100644 --- a/orkaudio/audiocaptureplugins/voip/SipSession.h +++ b/orkaudio/audiocaptureplugins/voip/SipSession.h @@ -58,7 +58,9 @@ private: RtpPacketInfoRef m_lastRtpPacket; RtpRingBuffer m_rtpRingBuffer; struct in_addr m_invitorIp; + int m_invitorTcpPort; struct in_addr m_inviteeIp; + int m_inviteeTcpPort; LoggerPtr m_log; CStdString m_capturePort; CStdString m_localParty; diff --git a/orkaudio/config-template.xml b/orkaudio/config-template.xml index a6f2092..abefe19 100644 --- a/orkaudio/config-template.xml +++ b/orkaudio/config-template.xml @@ -1,7 +1,7 @@ - hostname + localhost true 1000 audiocaptureplugins/ diff --git a/orkbasej/java/net/sf/oreka/persistent/RecProgram.java b/orkbasej/java/net/sf/oreka/persistent/RecProgram.java index 55f152f..e763542 100644 --- a/orkbasej/java/net/sf/oreka/persistent/RecProgram.java +++ b/orkbasej/java/net/sf/oreka/persistent/RecProgram.java @@ -26,7 +26,6 @@ import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; import javax.persistence.Table; import net.sf.oreka.Cycle; @@ -447,7 +446,7 @@ public class RecProgram { * not-null="true" * @return Returns the targetPort. */ - @OneToOne + @ManyToOne public RecPort getTargetPort() { return targetPort; } diff --git a/orkbasej/java/net/sf/oreka/persistent/RecSegment.java b/orkbasej/java/net/sf/oreka/persistent/RecSegment.java index 716de5b..009070b 100644 --- a/orkbasej/java/net/sf/oreka/persistent/RecSegment.java +++ b/orkbasej/java/net/sf/oreka/persistent/RecSegment.java @@ -24,7 +24,6 @@ import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; import javax.persistence.Table; import javax.persistence.Transient; @@ -307,7 +306,7 @@ public class RecSegment { return timestamp.getTime() + duration; } - @OneToOne + @ManyToOne public RecPort getPort() { return port; } diff --git a/orkbasej/java/net/sf/oreka/persistent/RecTape.java b/orkbasej/java/net/sf/oreka/persistent/RecTape.java index d5f6d73..67bc16b 100644 --- a/orkbasej/java/net/sf/oreka/persistent/RecTape.java +++ b/orkbasej/java/net/sf/oreka/persistent/RecTape.java @@ -19,7 +19,6 @@ import javax.persistence.Entity; import javax.persistence.GeneratorType; import javax.persistence.Id; import javax.persistence.ManyToOne; -import javax.persistence.OneToOne; import javax.persistence.Transient; import net.sf.oreka.Direction; @@ -153,7 +152,7 @@ public class RecTape { * not-null="true" * @return Returns the port. */ - @OneToOne + @ManyToOne public RecPort getPort() { return port; } diff --git a/orktrack/src/net/sf/oreka/orktrack/Port.java b/orktrack/src/net/sf/oreka/orktrack/Port.java index e786c75..24e476c 100644 --- a/orktrack/src/net/sf/oreka/orktrack/Port.java +++ b/orktrack/src/net/sf/oreka/orktrack/Port.java @@ -230,6 +230,7 @@ public class Port { recSegment.setTimestamp(timestamp); recSegment.setDirection(stopMessage.getDirection()); recSegment.setDuration(duration); + recSegment.setRemoteParty(stopMessage.getRemoteParty()); recSegment.setLocalParty(stopMessage.getLocalParty()); recSegment.setLocalEntryPoint(stopMessage.getLocalEntryPoint()); recSegment.setRecTape(recTape); -- cgit v1.2.3