![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/local/lib/node_modules/mediasoup/worker/include/RTC/ |
Upload File : |
#ifndef MS_RTC_WEBRTC_TRANSPORT_HPP #define MS_RTC_WEBRTC_TRANSPORT_HPP #include "RTC/DtlsTransport.hpp" #include "RTC/IceCandidate.hpp" #include "RTC/IceServer.hpp" #include "RTC/SrtpSession.hpp" #include "RTC/StunPacket.hpp" #include "RTC/TcpConnection.hpp" #include "RTC/TcpServer.hpp" #include "RTC/Transport.hpp" #include "RTC/TransportTuple.hpp" #include "RTC/UdpSocket.hpp" #include <vector> namespace RTC { class WebRtcTransport : public RTC::Transport, public RTC::UdpSocket::Listener, public RTC::TcpServer::Listener, public RTC::TcpConnection::Listener, public RTC::IceServer::Listener, public RTC::DtlsTransport::Listener { private: struct ListenIp { std::string ip; std::string announcedIp; }; public: WebRtcTransport(const std::string& id, RTC::Transport::Listener* listener, json& data); ~WebRtcTransport() override; public: void FillJson(json& jsonObject) const override; void FillJsonStats(json& jsonArray) override; void HandleRequest(Channel::Request* request) override; void HandleNotification(PayloadChannel::Notification* notification) override; private: bool IsConnected() const override; void MayRunDtlsTransport(); void SendRtpPacket( RTC::Consumer* consumer, RTC::RtpPacket* 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, uint32_t ppid, const uint8_t* msg, size_t len, onQueuedCallback* cb = nullptr) override; void SendSctpData(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); void OnStunDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len); void OnDtlsDataReceived(const RTC::TransportTuple* tuple, const uint8_t* data, size_t len); void OnRtpDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len); void OnRtcpDataReceived(RTC::TransportTuple* tuple, const uint8_t* data, size_t len); /* Pure virtual methods inherited from RTC::UdpSocket::Listener. */ public: void OnUdpSocketPacketReceived( RTC::UdpSocket* socket, const uint8_t* data, size_t len, const struct sockaddr* remoteAddr) override; /* Pure virtual methods inherited from RTC::TcpServer::Listener. */ public: void OnRtcTcpConnectionClosed(RTC::TcpServer* tcpServer, RTC::TcpConnection* connection) override; /* Pure virtual methods inherited from RTC::TcpConnection::Listener. */ public: void OnTcpConnectionPacketReceived( RTC::TcpConnection* connection, const uint8_t* data, size_t len) override; /* Pure virtual methods inherited from RTC::IceServer::Listener. */ public: void OnIceServerSendStunPacket( const RTC::IceServer* iceServer, const RTC::StunPacket* packet, RTC::TransportTuple* tuple) override; void OnIceServerSelectedTuple(const RTC::IceServer* iceServer, RTC::TransportTuple* tuple) override; void OnIceServerConnected(const RTC::IceServer* iceServer) override; void OnIceServerCompleted(const RTC::IceServer* iceServer) override; void OnIceServerDisconnected(const RTC::IceServer* iceServer) override; /* Pure virtual methods inherited from RTC::DtlsTransport::Listener. */ public: void OnDtlsTransportConnecting(const RTC::DtlsTransport* dtlsTransport) override; void OnDtlsTransportConnected( const RTC::DtlsTransport* dtlsTransport, RTC::SrtpSession::CryptoSuite srtpCryptoSuite, uint8_t* srtpLocalKey, size_t srtpLocalKeyLen, uint8_t* srtpRemoteKey, size_t srtpRemoteKeyLen, std::string& remoteCert) override; void OnDtlsTransportFailed(const RTC::DtlsTransport* dtlsTransport) override; void OnDtlsTransportClosed(const RTC::DtlsTransport* dtlsTransport) override; void OnDtlsTransportSendData( const RTC::DtlsTransport* dtlsTransport, const uint8_t* data, size_t len) override; void OnDtlsTransportApplicationDataReceived( const RTC::DtlsTransport* dtlsTransport, const uint8_t* data, size_t len) override; private: // Allocated by this. RTC::IceServer* iceServer{ nullptr }; // Map of UdpSocket/TcpServer and local announced IP (if any). std::unordered_map<RTC::UdpSocket*, std::string> udpSockets; std::unordered_map<RTC::TcpServer*, std::string> tcpServers; RTC::DtlsTransport* dtlsTransport{ nullptr }; RTC::SrtpSession* srtpRecvSession{ nullptr }; RTC::SrtpSession* srtpSendSession{ nullptr }; // Others. bool connectCalled{ false }; // Whether connect() was succesfully called. std::vector<RTC::IceCandidate> iceCandidates; RTC::DtlsTransport::Role dtlsRole{ RTC::DtlsTransport::Role::AUTO }; }; } // namespace RTC #endif