#ifndef MS_RTC_PIPE_TRANSPORT_HPP
#define MS_RTC_PIPE_TRANSPORT_HPP
#include "FBS/pipeTransport.h"
#include "RTC/SrtpSession.hpp"
#include "RTC/Transport.hpp"
#include "RTC/TransportTuple.hpp"
#include "RTC/UdpSocket.hpp"
#include "SharedInterface.hpp"
namespace RTC
{
class PipeTransport : public RTC::Transport, public RTC::UdpSocket::Listener
{
private:
static RTC::SrtpSession::CryptoSuite srtpCryptoSuite;
static std::string srtpCryptoSuiteString;
static size_t srtpMasterLength;
public:
PipeTransport(
SharedInterface* shared,
const std::string& id,
RTC::Transport::Listener* listener,
const FBS::PipeTransport::PipeTransportOptions* options);
~PipeTransport() override;
public:
flatbuffers::Offset<FBS::PipeTransport::GetStatsResponse> FillBufferStats(
flatbuffers::FlatBufferBuilder& builder);
flatbuffers::Offset<FBS::PipeTransport::DumpResponse> FillBuffer(
flatbuffers::FlatBufferBuilder& builder) const;
public:
void HandleRequest(Channel::ChannelRequest* request) override;
public:
void HandleNotification(Channel::ChannelNotification* notification) override;
private:
bool IsConnected() const override;
bool HasSrtp() const;
void SendRtpPacket(
RTC::Consumer* consumer,
RTC::RTP::Packet* packet,
RTC::Transport::onSendCallback* cb = nullptr) override;
void SendRtcpPacket(RTC::RTCP::Packet* packet) override;
void SendRtcpCompoundPacket(RTC::RTCP::CompoundPacket* packet) override;
void SendMessage(
RTC::DataConsumer* dataConsumer,
RTC::SCTP::Message message,
onQueuedCallback* cb = nullptr) override;
bool SendData(const uint8_t* data, size_t len) override;
void RecvStreamClosed(uint32_t ssrc) override;
void SendStreamClosed(uint32_t ssrc) override;
void OnPacketReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len, size_t bufferLen);
void OnRtpDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len, size_t bufferLen);
void OnRtcpDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len);
void OnSctpDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len);
public:
void OnUdpSocketPacketReceived(
RTC::UdpSocket* socket,
const uint8_t* data,
size_t len,
size_t bufferLen,
const struct sockaddr* remoteAddr) override;
private:
RTC::UdpSocket* udpSocket{ nullptr };
RTC::TransportTuple* tuple{ nullptr };
RTC::SrtpSession* srtpRecvSession{ nullptr };
RTC::SrtpSession* srtpSendSession{ nullptr };
ListenInfo listenInfo;
struct sockaddr_storage remoteAddrStorage{};
bool rtx{ false };
std::string srtpKey;
std::string srtpKeyBase64;
};
}
#endif