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}
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h
index 92b0561..6841e14 100644
--- a/api/peer_connection_interface.h
+++ b/api/peer_connection_interface.h
@@ -631,11 +631,7 @@
// 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