xref: /aosp_15_r20/external/webrtc/p2p/base/active_ice_controller_interface.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1 /*
2  *  Copyright 2022 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef P2P_BASE_ACTIVE_ICE_CONTROLLER_INTERFACE_H_
12 #define P2P_BASE_ACTIVE_ICE_CONTROLLER_INTERFACE_H_
13 
14 #include "absl/types/optional.h"
15 #include "api/array_view.h"
16 #include "p2p/base/connection.h"
17 #include "p2p/base/ice_switch_reason.h"
18 #include "p2p/base/ice_transport_internal.h"
19 #include "p2p/base/transport_description.h"
20 
21 namespace cricket {
22 
23 // ActiveIceControllerInterface defines the methods for a module that actively
24 // manages the connection used by an ICE transport.
25 //
26 // An active ICE controller receives updates from the ICE transport when
27 //   - the connections state is mutated
28 //   - a new connection should be selected as a result of an external event (eg.
29 //     a different connection nominated by the remote peer)
30 //
31 // The active ICE controller takes the appropriate decisions and requests the
32 // ICE agent to perform the necessary actions through the IceAgentInterface.
33 class ActiveIceControllerInterface {
34  public:
35   virtual ~ActiveIceControllerInterface() = default;
36 
37   // Sets the current ICE configuration.
38   virtual void SetIceConfig(const IceConfig& config) = 0;
39 
40   // Called when a new connection is added to the ICE transport.
41   virtual void OnConnectionAdded(const Connection* connection) = 0;
42 
43   // Called when the transport switches that connection in active use.
44   virtual void OnConnectionSwitched(const Connection* connection) = 0;
45 
46   // Called when a connection is destroyed.
47   virtual void OnConnectionDestroyed(const Connection* connection) = 0;
48 
49   // Called when a STUN ping has been sent on a connection. This does not
50   // indicate that a STUN response has been received.
51   virtual void OnConnectionPinged(const Connection* connection) = 0;
52 
53   // Called when one of the following changes for a connection.
54   // - rtt estimate
55   // - write state
56   // - receiving
57   // - connected
58   // - nominated
59   virtual void OnConnectionUpdated(const Connection* connection) = 0;
60 
61   // Compute "STUN_ATTR_USE_CANDIDATE" for a STUN ping on the given connection.
62   virtual bool GetUseCandidateAttribute(const Connection* connection,
63                                         NominationMode mode,
64                                         IceMode remote_ice_mode) const = 0;
65 
66   // Called to enque a request to pick and switch to the best available
67   // connection.
68   virtual void OnSortAndSwitchRequest(IceSwitchReason reason) = 0;
69 
70   // Called to pick and switch to the best available connection immediately.
71   virtual void OnImmediateSortAndSwitchRequest(IceSwitchReason reason) = 0;
72 
73   // Called to switch to the given connection immediately without checking for
74   // the best available connection.
75   virtual bool OnImmediateSwitchRequest(IceSwitchReason reason,
76                                         const Connection* selected) = 0;
77 
78   // Only for unit tests
79   virtual const Connection* FindNextPingableConnection() = 0;
80 };
81 
82 }  // namespace cricket
83 
84 #endif  // P2P_BASE_ACTIVE_ICE_CONTROLLER_INTERFACE_H_
85