Make RtpTransport actually implement RtpTransportInterface

BUG=webrtc:7013

Review-Url: https://codereview.webrtc.org/2805783002
Cr-Commit-Position: refs/heads/master@{#17628}
diff --git a/webrtc/pc/rtptransport.cc b/webrtc/pc/rtptransport.cc
index eb463db..76bc639 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 5dbebe6..f5ffe3f 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 @@
 
 namespace webrtc {
 
-class RtpTransport {
+class RtpTransport : public RtpTransportInterface {
  public:
   RtpTransport(const RtpTransport&) = delete;
   RtpTransport& operator=(const RtpTransport&) = delete;
@@ -32,24 +34,33 @@
   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