/* * Copyright (c) 2012 Yoann Blein * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #pragma once #include #include #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunused-parameter" #include #pragma clang diagnostic pop #include #include namespace Swift { class Sender : public jrtplib::RTPExternalSender { public: Sender(boost::shared_ptr udpSocket); virtual bool SendRTP(const void* data, size_t len); virtual bool SendRTCP(const void* data, size_t len); virtual bool ComesFromThisSender (const jrtplib::RTPAddress* address); private: void send(const void* data, size_t len); private: boost::shared_ptr udpSocket; }; class RTPSessionImpl : public RTPSession { public: typedef boost::shared_ptr ref; public: RTPSessionImpl(boost::shared_ptr udpSocket, const RTPPayloadType& payloadType); virtual ~RTPSessionImpl(); virtual void poll(); virtual void checkIncomingPackets(); virtual void sendPacket(const SafeByteArray &data, int timestampinc, bool marker = false); virtual void injectData(const SafeByteArray &data); virtual void stop(int maxWaitMs = 100); virtual size_t getMaxRTPPayloadSize() const; public: static jrtplib::RTPIPv4Address nativeAddressToJRTPAddress(const HostAddressPort& hostAddressPort); private: void checkError(int rtperr) const; void handleDataRead(boost::shared_ptr data); private: boost::shared_ptr udpSocket; RTPPayloadType payloadType; jrtplib::RTPIPv4Address jRTPRemotePeer; Sender sender; jrtplib::RTPSession session; jrtplib::RTPExternalPacketInjecter *packetInjecter; }; }