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_