From 6fa8a759b4c0c36aed1fdf4bd3442efc7562311a Mon Sep 17 00:00:00 2001 From: Sameer Vijaykar Date: Wed, 14 Sep 2022 11:48:54 +0200 Subject: [PATCH] Add an active ICE controller factory to IceTransportInit (#3/n) P2PTransportChannel can then use either of the ICE controller factories configured with field trials. Bug: webrtc:14367, webrtc:14131 Change-Id: I09ab99673d6ef81f56abe88987f5b67d84c24cb5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271292 Reviewed-by: Jonas Oreland Reviewed-by: Per Kjellander Commit-Queue: Sameer Vijaykar Cr-Commit-Position: refs/heads/main@{#38076} --- api/ice_transport_interface.h | 18 +++++++++ p2p/BUILD.gn | 1 + .../active_ice_controller_factory_interface.h | 39 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 p2p/base/active_ice_controller_factory_interface.h diff --git a/api/ice_transport_interface.h b/api/ice_transport_interface.h index 9d8bd5abe3..ca677712bd 100644 --- a/api/ice_transport_interface.h +++ b/api/ice_transport_interface.h @@ -24,6 +24,7 @@ namespace cricket { class IceTransportInternal; class PortAllocator; class IceControllerFactoryInterface; +class ActiveIceControllerFactoryInterface; } // namespace cricket namespace webrtc { @@ -84,6 +85,21 @@ struct IceTransportInit final { return ice_controller_factory_; } + // An active ICE controller actively manages the connection used by an ICE + // transport, in contrast with a legacy ICE controller that only picks the + // best connection to use or ping, and lets the transport decide when and + // whether to switch. + // TODO(bugs.webrtc.org/14367): currently unused, update doc when used. + void set_active_ice_controller_factory( + cricket::ActiveIceControllerFactoryInterface* + active_ice_controller_factory) { + active_ice_controller_factory_ = active_ice_controller_factory; + } + cricket::ActiveIceControllerFactoryInterface* + active_ice_controller_factory() { + return active_ice_controller_factory_; + } + const FieldTrialsView* field_trials() { return field_trials_; } void set_field_trials(const FieldTrialsView* field_trials) { field_trials_ = field_trials; @@ -96,6 +112,8 @@ struct IceTransportInit final { AsyncResolverFactory* async_resolver_factory_ = nullptr; RtcEventLog* event_log_ = nullptr; cricket::IceControllerFactoryInterface* ice_controller_factory_ = nullptr; + cricket::ActiveIceControllerFactoryInterface* active_ice_controller_factory_ = + nullptr; const FieldTrialsView* field_trials_ = nullptr; // TODO(https://crbug.com/webrtc/12657): Redesign to have const members. }; diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn index 5d638243b0..7e5f1735c2 100644 --- a/p2p/BUILD.gn +++ b/p2p/BUILD.gn @@ -18,6 +18,7 @@ group("p2p") { rtc_library("rtc_p2p") { visibility = [ "*" ] sources = [ + "base/active_ice_controller_factory_interface.h", "base/active_ice_controller_interface.h", "base/async_stun_tcp_socket.cc", "base/async_stun_tcp_socket.h", diff --git a/p2p/base/active_ice_controller_factory_interface.h b/p2p/base/active_ice_controller_factory_interface.h new file mode 100644 index 0000000000..6a47f2253f --- /dev/null +++ b/p2p/base/active_ice_controller_factory_interface.h @@ -0,0 +1,39 @@ +/* + * Copyright 2022 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef P2P_BASE_ACTIVE_ICE_CONTROLLER_FACTORY_INTERFACE_H_ +#define P2P_BASE_ACTIVE_ICE_CONTROLLER_FACTORY_INTERFACE_H_ + +#include + +#include "p2p/base/active_ice_controller_interface.h" +#include "p2p/base/ice_agent_interface.h" +#include "p2p/base/ice_controller_factory_interface.h" + +namespace cricket { + +// An active ICE controller may be constructed with the same arguments as a +// legacy ICE controller. Additionally, an ICE agent must be provided for the +// active ICE controller to interact with. +struct ActiveIceControllerFactoryArgs { + IceControllerFactoryArgs legacy_args; + IceAgentInterface* ice_agent; +}; + +class ActiveIceControllerFactoryInterface { + public: + virtual ~ActiveIceControllerFactoryInterface() = default; + virtual std::unique_ptr Create( + const ActiveIceControllerFactoryArgs&) = 0; +}; + +} // namespace cricket + +#endif // P2P_BASE_ACTIVE_ICE_CONTROLLER_FACTORY_INTERFACE_H_