From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../p2p/base/wrapping_active_ice_controller.h | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 third_party/libwebrtc/p2p/base/wrapping_active_ice_controller.h (limited to 'third_party/libwebrtc/p2p/base/wrapping_active_ice_controller.h') diff --git a/third_party/libwebrtc/p2p/base/wrapping_active_ice_controller.h b/third_party/libwebrtc/p2p/base/wrapping_active_ice_controller.h new file mode 100644 index 0000000000..449c0f0ee1 --- /dev/null +++ b/third_party/libwebrtc/p2p/base/wrapping_active_ice_controller.h @@ -0,0 +1,97 @@ +/* + * 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_WRAPPING_ACTIVE_ICE_CONTROLLER_H_ +#define P2P_BASE_WRAPPING_ACTIVE_ICE_CONTROLLER_H_ + +#include + +#include "absl/types/optional.h" +#include "api/task_queue/pending_task_safety_flag.h" +#include "p2p/base/active_ice_controller_interface.h" +#include "p2p/base/connection.h" +#include "p2p/base/ice_agent_interface.h" +#include "p2p/base/ice_controller_factory_interface.h" +#include "p2p/base/ice_controller_interface.h" +#include "p2p/base/ice_switch_reason.h" +#include "p2p/base/ice_transport_internal.h" +#include "p2p/base/transport_description.h" +#include "rtc_base/thread.h" +#include "rtc_base/thread_annotations.h" + +namespace cricket { + +// WrappingActiveIceController provides the functionality of a legacy passive +// ICE controller but packaged as an active ICE Controller. +class WrappingActiveIceController : public ActiveIceControllerInterface { + public: + // Constructs an active ICE controller wrapping an already constructed legacy + // ICE controller. Does not take ownership of the ICE agent, which must + // already exist and outlive the ICE controller. + WrappingActiveIceController(IceAgentInterface* ice_agent, + std::unique_ptr wrapped); + // Constructs an active ICE controller that wraps over a legacy ICE + // controller. The legacy ICE controller is constructed through a factory, if + // one is supplied. If not, a default BasicIceController is wrapped instead. + // Does not take ownership of the ICE agent, which must already exist and + // outlive the ICE controller. + WrappingActiveIceController( + IceAgentInterface* ice_agent, + IceControllerFactoryInterface* wrapped_factory, + const IceControllerFactoryArgs& wrapped_factory_args); + virtual ~WrappingActiveIceController(); + + void SetIceConfig(const IceConfig& config) override; + bool GetUseCandidateAttribute(const Connection* connection, + NominationMode mode, + IceMode remote_ice_mode) const override; + + void OnConnectionAdded(const Connection* connection) override; + void OnConnectionPinged(const Connection* connection) override; + void OnConnectionUpdated(const Connection* connection) override; + void OnConnectionSwitched(const Connection* connection) override; + void OnConnectionDestroyed(const Connection* connection) override; + + void OnSortAndSwitchRequest(IceSwitchReason reason) override; + void OnImmediateSortAndSwitchRequest(IceSwitchReason reason) override; + bool OnImmediateSwitchRequest(IceSwitchReason reason, + const Connection* selected) override; + + // Only for unit tests + const Connection* FindNextPingableConnection() override; + + private: + void MaybeStartPinging(); + void SelectAndPingConnection(); + void HandlePingResult(IceControllerInterface::PingResult result); + + void SortAndSwitchToBestConnection(IceSwitchReason reason); + void HandleSwitchResult(IceSwitchReason reason_for_switch, + IceControllerInterface::SwitchResult result); + void UpdateStateOnConnectionsResorted(); + + void PruneConnections(); + + rtc::Thread* const network_thread_; + webrtc::ScopedTaskSafety task_safety_; + + bool started_pinging_ RTC_GUARDED_BY(network_thread_) = false; + bool sort_pending_ RTC_GUARDED_BY(network_thread_) = false; + const Connection* selected_connection_ RTC_GUARDED_BY(network_thread_) = + nullptr; + + std::unique_ptr wrapped_ + RTC_GUARDED_BY(network_thread_); + IceAgentInterface& agent_ RTC_GUARDED_BY(network_thread_); +}; + +} // namespace cricket + +#endif // P2P_BASE_WRAPPING_ACTIVE_ICE_CONTROLLER_H_ -- cgit v1.2.3