webrtc_m130/p2p/base/ice_controller_interface.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

177 lines
6.8 KiB
C
Raw Normal View History

/*
* Copyright 2019 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_ICE_CONTROLLER_INTERFACE_H_
#define P2P_BASE_ICE_CONTROLLER_INTERFACE_H_
#include <string>
#include <utility>
#include <vector>
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
#include "absl/types/optional.h"
#include "p2p/base/connection.h"
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
#include "p2p/base/ice_switch_reason.h"
#include "p2p/base/ice_transport_internal.h"
namespace cricket {
struct IceFieldTrials; // Forward declaration to avoid circular dependency.
struct IceControllerEvent {
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
// TODO(bugs.webrtc.org/14125) replace with IceSwitchReason.
enum Type {
REMOTE_CANDIDATE_GENERATION_CHANGE,
NETWORK_PREFERENCE_CHANGE,
NEW_CONNECTION_FROM_LOCAL_CANDIDATE,
NEW_CONNECTION_FROM_REMOTE_CANDIDATE,
NEW_CONNECTION_FROM_UNKNOWN_REMOTE_ADDRESS,
NOMINATION_ON_CONTROLLED_SIDE,
DATA_RECEIVED,
CONNECT_STATE_CHANGE,
SELECTED_CONNECTION_DESTROYED,
// The ICE_CONTROLLER_RECHECK enum value lets an IceController request
// P2PTransportChannel to recheck a switch periodically without an event
// taking place.
ICE_CONTROLLER_RECHECK,
};
[[deprecated("bugs.webrtc.org/14125")]] IceControllerEvent(
const Type& _type) // NOLINT: runtime/explicit
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
: type(_type), reason(FromType(_type)) {}
IceControllerEvent(IceSwitchReason _reason, int _recheck_delay_ms)
: type(FromIceSwitchReason(_reason)),
reason(_reason),
recheck_delay_ms(_recheck_delay_ms) {}
static Type FromIceSwitchReason(IceSwitchReason reason);
static IceSwitchReason FromType(Type type);
std::string ToString() const;
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
// TODO(bugs.webrtc.org/14125) replace usage with IceSwitchReason.
Type type;
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
IceSwitchReason reason;
int recheck_delay_ms = 0;
};
// Defines the interface for a module that control
// - which connection to ping
// - which connection to use
// - which connection to prune
// - which connection to forget learned state on
//
// The P2PTransportChannel owns (creates and destroys) Connections,
// but P2PTransportChannel gives const pointers to the the IceController using
// `AddConnection`, i.e the IceController should not call any non-const methods
// on a Connection but signal back in the interface if any mutable function
// shall be called.
//
// Current these are limited to:
// Connection::Ping - returned in PingResult
// Connection::Prune - retuned in PruneConnections
// Connection::ForgetLearnedState - return in SwitchResult
//
// The IceController shall keep track of all connections added
// (and not destroyed) and give them back using the connections()-function-
//
// When a Connection gets destroyed
// - signals on Connection::SignalDestroyed
// - P2PTransportChannel calls IceController::OnConnectionDestroyed
class IceControllerInterface {
public:
// This represents the result of a switch call.
struct SwitchResult {
// Connection that we should (optionally) switch to.
absl::optional<const Connection*> connection;
// An optional recheck event for when a Switch() should be attempted again.
absl::optional<IceControllerEvent> recheck_event;
// A vector with connection to run ForgetLearnedState on.
std::vector<const Connection*> connections_to_forget_state_on;
};
// This represents the result of a call to SelectConnectionToPing.
struct PingResult {
PingResult(const Connection* conn, int _recheck_delay_ms)
: connection(conn ? absl::optional<const Connection*>(conn)
: absl::nullopt),
recheck_delay_ms(_recheck_delay_ms) {}
// Connection that we should (optionally) ping.
const absl::optional<const Connection*> connection;
// The delay before P2PTransportChannel shall call SelectConnectionToPing()
// again.
//
// Since the IceController determines which connection to ping and
// only returns one connection at a time, the recheck_delay_ms does not have
// any obvious implication on bitrate for pings. E.g the recheck_delay_ms
// will be shorter if there are more connections available.
const int recheck_delay_ms = 0;
};
virtual ~IceControllerInterface() = default;
// These setters are called when the state of P2PTransportChannel is mutated.
virtual void SetIceConfig(const IceConfig& config) = 0;
virtual void SetSelectedConnection(const Connection* selected_connection) = 0;
virtual void AddConnection(const Connection* connection) = 0;
virtual void OnConnectionDestroyed(const Connection* connection) = 0;
// These are all connections that has been added and not destroyed.
virtual rtc::ArrayView<const Connection*> connections() const = 0;
// Is there a pingable connection ?
// This function is used to boot-strap pinging, after this returns true
// SelectConnectionToPing() will be called periodically.
virtual bool HasPingableConnection() const = 0;
// Select a connection to Ping, or nullptr if none.
virtual PingResult SelectConnectionToPing(int64_t last_ping_sent_ms) = 0;
// Compute the "STUN_ATTR_USE_CANDIDATE" for `conn`.
virtual bool GetUseCandidateAttr(const Connection* conn,
NominationMode mode,
IceMode remote_ice_mode) const = 0;
// These methods is only added to not have to change all unit tests
// that simulate pinging by marking a connection pinged.
virtual const Connection* FindNextPingableConnection() = 0;
virtual void MarkConnectionPinged(const Connection* con) = 0;
// Check if we should switch to `connection`.
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
// This method is called for IceSwitchReasons that can switch directly
// i.e without resorting.
[[deprecated("bugs.webrtc.org/14125")]] virtual SwitchResult
ShouldSwitchConnection(IceControllerEvent reason,
const Connection* connection) {
return ShouldSwitchConnection(IceControllerEvent::FromType(reason.type),
connection);
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
}
virtual SwitchResult ShouldSwitchConnection(IceSwitchReason reason,
const Connection* connection) = 0;
// Sort connections and check if we should switch.
[[deprecated("bugs.webrtc.org/14125")]] virtual SwitchResult
SortAndSwitchConnection(IceControllerEvent reason) {
return SortAndSwitchConnection(IceControllerEvent::FromType(reason.type));
Reland "Refactor IceControllerEvent" 1/n This is a partial reland of commit 794e68cf3dbc3b16ee8b12b5615d8a1622154dbd which - adds a new enum - IceSwitchReason - adds a member for the new enum in IceControllerEvent - adds methods to IceControllerInterface accepting the new enum - adds conversion between the old and new enums for compatibility Original change's description: > Refactor IceControllerEvent > > This change is the first step in decoupling IceControllerEvent from > the ICE switch reason. Further cleanup is earmarked, and will be > landed after some internal cleanup. > > This change > - adds a new enum - IceSwitchReason > - adds a member for the new enum in IceControllerEvent > - uses the new enum within P2PTransportChannel > - adds methods to IceControllerInterface accepting the new enum > - deprecates usages of the old enum in IceControllerInterface > - adds conversion between the old and new enums for compatibility > > Bug: webrtc:14125, webrtc:14131 > Change-Id: I5b7201c3f631eb40db334dfeec842841a7e58174 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264140 > Reviewed-by: Jonas Oreland <jonaso@webrtc.org> > Commit-Queue: Sameer Vijaykar <samvi@google.com> > Cr-Commit-Position: refs/heads/main@{#37051} Bug: webrtc:14125, webrtc:14131 Change-Id: I2ccdd53c80e38dc139669aa3f438864befed3dc0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/264506 Commit-Queue: Sameer Vijaykar <samvi@google.com> Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37094}
2022-06-02 11:29:09 +02:00
}
virtual SwitchResult SortAndSwitchConnection(IceSwitchReason reason) = 0;
// Prune connections.
virtual std::vector<const Connection*> PruneConnections() = 0;
};
} // namespace cricket
#endif // P2P_BASE_ICE_CONTROLLER_INTERFACE_H_