| /* | |
| * 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_INTERFACE_H_ | |
| #define P2P_BASE_ACTIVE_ICE_CONTROLLER_INTERFACE_H_ | |
| #include "p2p/base/connection.h" | |
| #include "p2p/base/ice_switch_reason.h" | |
| #include "p2p/base/ice_transport_internal.h" | |
| #include "p2p/base/transport_description.h" | |
| namespace webrtc { | |
| // ActiveIceControllerInterface defines the methods for a module that actively | |
| // manages the connection used by an ICE transport. | |
| // | |
| // An active ICE controller receives updates from the ICE transport when | |
| // - the connections state is mutated | |
| // - a new connection should be selected as a result of an external event (eg. | |
| // a different connection nominated by the remote peer) | |
| // | |
| // The active ICE controller takes the appropriate decisions and requests the | |
| // ICE agent to perform the necessary actions through the IceAgentInterface. | |
| class ActiveIceControllerInterface { | |
| public: | |
| virtual ~ActiveIceControllerInterface() = default; | |
| // Sets the current ICE configuration. | |
| virtual void SetIceConfig(const IceConfig& config) = 0; | |
| // Called when a new connection is added to the ICE transport. | |
| virtual void OnConnectionAdded(const Connection* connection) = 0; | |
| // Called when the transport switches that connection in active use. | |
| virtual void OnConnectionSwitched(const Connection* connection) = 0; | |
| // Called when a connection is destroyed. | |
| virtual void OnConnectionDestroyed(const Connection* connection) = 0; | |
| // Called when a STUN ping has been sent on a connection. This does not | |
| // indicate that a STUN response has been received. | |
| virtual void OnConnectionPinged(const Connection* connection) = 0; | |
| // Called when one of the following changes for a connection. | |
| // - rtt estimate | |
| // - write state | |
| // - receiving | |
| // - connected | |
| // - nominated | |
| virtual void OnConnectionUpdated(const Connection* connection) = 0; | |
| // Compute "STUN_ATTR_USE_CANDIDATE" for a STUN ping on the given connection. | |
| virtual bool GetUseCandidateAttribute(const Connection* connection, | |
| NominationMode mode, | |
| IceMode remote_ice_mode) const = 0; | |
| // Called to enque a request to pick and switch to the best available | |
| // connection. | |
| virtual void OnSortAndSwitchRequest(IceSwitchReason reason) = 0; | |
| // Called to pick and switch to the best available connection immediately. | |
| virtual void OnImmediateSortAndSwitchRequest(IceSwitchReason reason) = 0; | |
| // Called to switch to the given connection immediately without checking for | |
| // the best available connection. | |
| virtual bool OnImmediateSwitchRequest(IceSwitchReason reason, | |
| const Connection* selected) = 0; | |
| // Only for unit tests | |
| virtual const Connection* FindNextPingableConnection() = 0; | |
| }; | |
| } // namespace webrtc | |
| #endif // P2P_BASE_ACTIVE_ICE_CONTROLLER_INTERFACE_H_ |