diff --git a/webrtc/pc/rtptransport.cc b/webrtc/pc/rtptransport.cc index eb463db0bf..76bc639cbc 100644 --- a/webrtc/pc/rtptransport.cc +++ b/webrtc/pc/rtptransport.cc @@ -11,13 +11,50 @@ #include "webrtc/pc/rtptransport.h" #include "webrtc/base/checks.h" +#include "webrtc/p2p/base/packettransportinterface.h" namespace webrtc { +void RtpTransport::set_rtp_packet_transport(rtc::PacketTransportInternal* rtp) { + rtp_packet_transport_ = rtp; +} + void RtpTransport::set_rtcp_packet_transport( rtc::PacketTransportInternal* rtcp) { RTC_DCHECK(!rtcp_mux_required_); rtcp_packet_transport_ = rtcp; } +PacketTransportInterface* RtpTransport::GetRtpPacketTransport() const { + return rtp_packet_transport_; +} + +PacketTransportInterface* RtpTransport::GetRtcpPacketTransport() const { + return rtcp_packet_transport_; +} + +RTCError RtpTransport::SetRtcpParameters(const RtcpParameters& parameters) { + if (rtcp_parameters_.mux && !parameters.mux) { + LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_STATE, + "Disabling RTCP muxing is not allowed."); + } + + RtcpParameters new_parameters = parameters; + + if (new_parameters.cname.empty()) { + new_parameters.cname = rtcp_parameters_.cname; + } + + rtcp_parameters_ = new_parameters; + return RTCError::OK(); +} + +RtcpParameters RtpTransport::GetRtcpParameters() const { + return rtcp_parameters_; +} + +RtpTransportAdapter* RtpTransport::GetInternal() { + return nullptr; +} + } // namespace webrtc diff --git a/webrtc/pc/rtptransport.h b/webrtc/pc/rtptransport.h index 5dbebe6ed9..f5ffe3fe5f 100644 --- a/webrtc/pc/rtptransport.h +++ b/webrtc/pc/rtptransport.h @@ -11,6 +11,8 @@ #ifndef WEBRTC_PC_RTPTRANSPORT_H_ #define WEBRTC_PC_RTPTRANSPORT_H_ +#include "webrtc/api/ortc/rtptransportinterface.h" + namespace rtc { class PacketTransportInternal; @@ -19,7 +21,7 @@ class PacketTransportInternal; namespace webrtc { -class RtpTransport { +class RtpTransport : public RtpTransportInterface { public: RtpTransport(const RtpTransport&) = delete; RtpTransport& operator=(const RtpTransport&) = delete; @@ -32,24 +34,33 @@ class RtpTransport { rtc::PacketTransportInternal* rtp_packet_transport() const { return rtp_packet_transport_; } - void set_rtp_packet_transport(rtc::PacketTransportInternal* rtp) { - rtp_packet_transport_ = rtp; - } + void set_rtp_packet_transport(rtc::PacketTransportInternal* rtp); rtc::PacketTransportInternal* rtcp_packet_transport() const { return rtcp_packet_transport_; } void set_rtcp_packet_transport(rtc::PacketTransportInternal* rtcp); + PacketTransportInterface* GetRtpPacketTransport() const override; + PacketTransportInterface* GetRtcpPacketTransport() const override; + + // TODO(zstein): Use these RtcpParameters for configuration elsewhere. + RTCError SetRtcpParameters(const RtcpParameters& parameters) override; + RtcpParameters GetRtcpParameters() const override; + + protected: + // TODO(zstein): Remove this when we remove RtpTransportAdapter. + RtpTransportAdapter* GetInternal() override; + private: // True if RTCP-multiplexing is required. rtcp_packet_transport_ should // always be null in this case. const bool rtcp_mux_required_; - // TODO(zstein): Revisit ownership here - transports are currently owned by - // TransportController rtc::PacketTransportInternal* rtp_packet_transport_ = nullptr; rtc::PacketTransportInternal* rtcp_packet_transport_ = nullptr; + + RtcpParameters rtcp_parameters_; }; } // namespace webrtc