Add a field trial to control datagram transport use.

First, the existing configuration parameter (use_datagram_transport) is
now optional.

The new field trial has two flag values:
 1. Whether to enable the datagram transport (enabled)
 2. Whether to use the datagram transport by default (default_value)

The first is a kill-switch.  It disables the datagram transport, even
for applications which inject a datagram transport factory and specify
use_datagram_transport = true.  This allows applications which hard-code
a datagram transport to switch it off via field trials.

This flag defaults to true, to avoid breaking downstream projects which
already inject and configure a datagram transport.  It may be changed to
false after updating downstream to set this field trial flag to true
when required.

The second provides a default value to be used in case the
aforementioned use_datagram_transport parameter is unset.  Applications
which explicitly set use_datagram_transport will use that value.
Applications which do not explicitly specify whether or not to use the
datagram transport will use it (or not) according to the default_value
flag.

One goal of this flag is to simplify rollout in applications which
already set field trials based on configuration, but require code
changes for new RTCConfiguration parameters.  A second goal is to
provide platforms with a knob to control whether datagram transport is
"opt-in" or "opt-out".

This flag defaults to false, to prevent downstream projects from
unintentionally enabling the datagram tranpsort.

Bug: webrtc:9719
Change-Id: I521a5fa61c992e76e5081118678a1812a261d672
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144184
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Bjorn Mellem <mellem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28435}
This commit is contained in:
Bjorn A Mellem
2019-06-28 14:19:38 -07:00
committed by Commit Bot
parent 3e8ef940fe
commit 5985a0481e
3 changed files with 52 additions and 14 deletions

View File

@ -631,11 +631,7 @@ class RTC_EXPORT PeerConnectionInterface : public rtc::RefCountInterface {
// informs PeerConnection that it should use the DatagramTransportInterface
// for packets instead DTLS. It's invalid to set it to |true| if the
// MediaTransportFactory wasn't provided.
//
// TODO(sukhanov): Once we have a working mechanism for negotiating media
// transport through SDP, we replace media transport flags in
// RTCConfiguration with field trials.
bool use_datagram_transport = false;
absl::optional<bool> use_datagram_transport;
// Defines advanced optional cryptographic settings related to SRTP and
// frame encryption for native WebRTC. Setting this will overwrite any