Wire up RTP keep-alive in ortc api.

[This CL is work in progress.]

Wire up the rtp keep-alive in webrtc::Call::Config using new
SetRtpTransportParameters() method on RtpTransportInterface.

BUG=webrtc:7907

Review-Url: https://codereview.webrtc.org/2981513002
Cr-Commit-Position: refs/heads/master@{#19287}
diff --git a/webrtc/api/ortc/ortcfactoryinterface.h b/webrtc/api/ortc/ortcfactoryinterface.h
index 4f0a9be..4880d9d 100644
--- a/webrtc/api/ortc/ortcfactoryinterface.h
+++ b/webrtc/api/ortc/ortcfactoryinterface.h
@@ -113,16 +113,16 @@
   // |rtp| will be used for sending RTP packets, and |rtcp| for RTCP packets.
   //
   // |rtp| can't be null. |rtcp| must be non-null if and only if
-  // |rtcp_parameters.mux| is false, indicating that RTCP muxing isn't used.
+  // |rtp_parameters.rtcp.mux| is false, indicating that RTCP muxing isn't used.
   // Note that if RTCP muxing isn't enabled initially, it can still enabled
-  // later through SetRtcpParameters.
+  // later through SetParameters.
   //
   // If |transport_controller| is null, one will automatically be created, and
   // its lifetime managed by the returned RtpTransport. This should only be
   // done if a single RtpTransport is being used to communicate with the remote
   // endpoint.
   virtual RTCErrorOr<std::unique_ptr<RtpTransportInterface>> CreateRtpTransport(
-      const RtcpParameters& rtcp_parameters,
+      const RtpTransportParameters& rtp_parameters,
       PacketTransportInterface* rtp,
       PacketTransportInterface* rtcp,
       RtpTransportControllerInterface* transport_controller) = 0;
@@ -130,7 +130,7 @@
   // Creates an SrtpTransport which is an RTP transport that uses SRTP.
   virtual RTCErrorOr<std::unique_ptr<SrtpTransportInterface>>
   CreateSrtpTransport(
-      const RtcpParameters& rtcp_parameters,
+      const RtpTransportParameters& rtp_parameters,
       PacketTransportInterface* rtp,
       PacketTransportInterface* rtcp,
       RtpTransportControllerInterface* transport_controller) = 0;
diff --git a/webrtc/api/ortc/rtptransportinterface.h b/webrtc/api/ortc/rtptransportinterface.h
index 119d662..165daad 100644
--- a/webrtc/api/ortc/rtptransportinterface.h
+++ b/webrtc/api/ortc/rtptransportinterface.h
@@ -15,13 +15,14 @@
 
 #include "webrtc/api/ortc/packettransportinterface.h"
 #include "webrtc/api/rtcerror.h"
+#include "webrtc/common_types.h"
 #include "webrtc/rtc_base/optional.h"
 
 namespace webrtc {
 
 class RtpTransportAdapter;
 
-struct RtcpParameters {
+struct RtcpParameters final {
   // The SSRC to be used in the "SSRC of packet sender" field. If not set, one
   // will be chosen by the implementation.
   // TODO(deadbeef): Not implemented.
@@ -34,7 +35,7 @@
   // RtpTransports created by the same OrtcFactory will use the same generated
   // CNAME.
   //
-  // If empty when passed into SetRtcpParameters, the CNAME simply won't be
+  // If empty when passed into SetParameters, the CNAME simply won't be
   // modified.
   std::string cname;
 
@@ -51,6 +52,21 @@
   bool operator!=(const RtcpParameters& o) const { return !(*this == o); }
 };
 
+struct RtpTransportParameters final {
+  RtcpParameters rtcp;
+
+  // Enabled periodic sending of keep-alive packets, that help prevent timeouts
+  // on the network level, such as NAT bindings. See RFC6263 section 4.6.
+  RtpKeepAliveConfig keepalive;
+
+  bool operator==(const RtpTransportParameters& o) const {
+    return rtcp == o.rtcp && keepalive == o.keepalive;
+  }
+  bool operator!=(const RtpTransportParameters& o) const {
+    return !(*this == o);
+  }
+};
+
 // Base class for different types of RTP transports that can be created by an
 // OrtcFactory. Used by RtpSenders/RtpReceivers.
 //
@@ -74,16 +90,20 @@
   // RTCP multiplexing is being used, returns null.
   virtual PacketTransportInterface* GetRtcpPacketTransport() const = 0;
 
-  // Set/get RTCP params. Can be used to enable RTCP muxing or reduced-size
-  // RTCP if initially not enabled.
+  // Set/get RTP/RTCP transport params. Can be used to enable RTCP muxing or
+  // reduced-size RTCP if initially not enabled.
   //
   // Changing |mux| from "true" to "false" is not allowed, and changing the
   // CNAME is currently unsupported.
-  virtual RTCError SetRtcpParameters(const RtcpParameters& parameters) = 0;
+  // RTP keep-alive settings need to be set before before an RtpSender has
+  // started sending, altering the payload type or timeout interval after this
+  // point is not supported. The parameters must also match across all RTP
+  // transports for a given RTP transport controller.
+  virtual RTCError SetParameters(const RtpTransportParameters& parameters) = 0;
   // Returns last set or constructed-with parameters. If |cname| was empty in
   // construction, the generated CNAME will be present in the returned
   // parameters (see above).
-  virtual RtcpParameters GetRtcpParameters() const = 0;
+  virtual RtpTransportParameters GetParameters() const = 0;
 
  protected:
   // Only for internal use. Returns a pointer to an internal interface, for use