/* Copyright(C) 2007-2017 VoIPobjects (voipobjects.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef __HL_RTP_H #define __HL_RTP_H #include "jrtplib/src/rtppacket.h" #include "HL_Uuid.h" #include "HL_InternetAddress.h" #include #include // Class to carry rtp/rtcp socket pair template struct RtpPair { T mRtp; T mRtcp; RtpPair() {} RtpPair(const T& rtp, const T& rtcp) :mRtp(rtp), mRtcp(rtcp) {} bool multiplexed() { return mRtp == mRtcp; } }; class RtpHelper { public: static bool isRtp(const void* buffer, int length); static int findPtype(const void* buffer, int length); static bool isRtpOrRtcp(const void* buffer, int length); static bool isRtcp(const void* buffer, int length); static unsigned findSsrc(const void* buffer, int length); static int findPayloadLength(const void* buffer, int length); }; class RtpDump { protected: struct RtpData { jrtplib::RTPPacket* mPacket; void* mData; unsigned mLength; }; typedef std::vector PacketList; PacketList mPacketList; std::string mFilename; public: RtpDump(const char* filename); ~RtpDump(); void load(); int count() const; jrtplib::RTPPacket& packetAt(int index); void add(const void* data, int len); void flush(); }; struct MediaStreamId { InternetAddress mSource; InternetAddress mDestination; uint32_t mSSRC = 0; bool mSsrcIsId = true; Uuid mLinkId; bool operator < (const MediaStreamId& s2) const; bool operator == (const MediaStreamId& right) const; std::string toString() const; std::string getDetectDescription() const; std::string getFinishDescription() const; }; #endif