summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/SipSession.h
diff options
context:
space:
mode:
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/SipSession.h')
-rw-r--r--orkaudio/audiocaptureplugins/voip/SipSession.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/SipSession.h b/orkaudio/audiocaptureplugins/voip/SipSession.h
new file mode 100644
index 0000000..4702bac
--- /dev/null
+++ b/orkaudio/audiocaptureplugins/voip/SipSession.h
@@ -0,0 +1,87 @@
+/*
+ * Oreka -- A media capture and retrieval platform
+ *
+ * Copyright (C) 2005, orecx LLC
+ *
+ * http://www.orecx.com
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License.
+ * Please refer to http://www.gnu.org/copyleft/gpl.html
+ *
+ */
+
+#ifndef __SIPSESSION_H__
+#define __SIPSESSION_H__
+
+#include "SipSession.h"
+#include "Rtp.h"
+#include <map>
+#include "ace/Singleton.h"
+
+class SipInviteInfo
+{
+public:
+ struct in_addr m_fromIp;
+ CStdString m_fromRtpPort;
+ CStdString m_from;
+ CStdString m_to;
+ CStdString m_callId;
+};
+typedef boost::shared_ptr<SipInviteInfo> SipInviteInfoRef;
+
+class SipByeInfo
+{
+public:
+ CStdString m_callId;
+};
+
+
+class SipSession
+{
+public:
+ SipSession();
+ void Stop();
+ void Start();
+ void AddRtpPacket(RtpPacketInfoRef& rtpPacket);
+ void ReportSipInvite(SipInviteInfoRef& invite);
+
+ CStdString m_ipAndPort;
+ SipInviteInfoRef m_invite;
+ time_t m_lastUpdated;
+private:
+ void ProcessMetadata(RtpPacketInfoRef&);
+ void ProcessMetadataIncoming();
+ void ProcessMetadataOutgoing();
+ void ReportMetadata();
+
+ RtpPacketInfoRef m_lastRtpPacket;
+ RtpRingBuffer m_rtpRingBuffer;
+ struct in_addr m_invitorIp;
+ struct in_addr m_inviteeIp;
+ LoggerPtr m_log;
+ CStdString m_capturePort;
+ CStdString m_localParty;
+ CStdString m_remoteParty;
+ CaptureEvent::DirectionEnum m_direction;
+};
+typedef boost::shared_ptr<SipSession> SipSessionRef;
+
+class SipSessions
+{
+public:
+ SipSessions();
+ void Stop(SipSessionRef& session);
+ void ReportSipInvite(SipInviteInfoRef& invite);
+ void ReportSipBye(SipByeInfo bye);
+ void ReportRtpPacket(RtpPacketInfoRef& rtpPacket);
+ void Hoover(time_t now);
+private:
+ std::map<CStdString, SipSessionRef> m_byIpAndPort;
+ std::map<CStdString, SipSessionRef> m_byCallId;
+ LoggerPtr m_log;
+};
+typedef ACE_Singleton<SipSessions, ACE_Thread_Mutex> SipSessionsSingleton;
+
+#endif
+