Add an ICE agent interface (#1/n)
This interface will be implemented by P2PTransportChannel in a follow-up CL. It will allow an ICE controller to request actions to manipulate the connection used by the transport. Bug: webrtc:14367, webrtc:1413 Change-Id: I5cd171bd09c8dfc88588f8fc06e87d74a90b5216 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/271290 Reviewed-by: Jonas Oreland <jonaso@webrtc.org> Commit-Queue: Sameer Vijaykar <samvi@google.com> Cr-Commit-Position: refs/heads/main@{#38062}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
c7d1f11646
commit
b88c3b5e02
@ -38,6 +38,7 @@ rtc_library("rtc_p2p") {
|
||||
"base/dtls_transport_factory.h",
|
||||
"base/dtls_transport_internal.cc",
|
||||
"base/dtls_transport_internal.h",
|
||||
"base/ice_agent_interface.h",
|
||||
"base/ice_controller_factory_interface.h",
|
||||
"base/ice_controller_interface.cc",
|
||||
"base/ice_controller_interface.h",
|
||||
|
80
p2p/base/ice_agent_interface.h
Normal file
80
p2p/base/ice_agent_interface.h
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* 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_ICE_AGENT_INTERFACE_H_
|
||||
#define P2P_BASE_ICE_AGENT_INTERFACE_H_
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "p2p/base/connection.h"
|
||||
#include "p2p/base/ice_switch_reason.h"
|
||||
|
||||
namespace cricket {
|
||||
|
||||
// IceAgentInterface provides methods that allow an ICE controller to manipulate
|
||||
// the connections available to a transport, and used by the transport to
|
||||
// transfer data.
|
||||
class IceAgentInterface {
|
||||
public:
|
||||
virtual ~IceAgentInterface() = default;
|
||||
|
||||
// Get the time when the last ping was sent.
|
||||
// This is only needed in some scenarios if the agent decides to ping on its
|
||||
// own, eg. in some switchover scenarios. Otherwise the ICE controller could
|
||||
// keep this state on its own.
|
||||
// TODO(bugs.webrtc.org/14367): route extra pings through the ICE controller.
|
||||
virtual int64_t GetLastPingSentMs() const = 0;
|
||||
|
||||
// Get the ICE role of this ICE agent.
|
||||
virtual IceRole GetIceRole() const = 0;
|
||||
|
||||
// Called when a pingable connection first becomes available.
|
||||
virtual void OnStartedPinging() = 0;
|
||||
|
||||
// Update the state of all available connections.
|
||||
virtual void UpdateConnectionStates() = 0;
|
||||
|
||||
// Update the internal state of the ICE agent. An ICE controller should call
|
||||
// this at the end of a sequence of actions to combine several mutations into
|
||||
// a single state refresh.
|
||||
// TODO(bugs.webrtc.org/14431): ICE agent state updates should be internal to
|
||||
// the agent. If batching is necessary, use a more appropriate interface.
|
||||
virtual void UpdateState() = 0;
|
||||
|
||||
// Reset the given connections to a state of newly connected connections.
|
||||
// - STATE_WRITE_INIT
|
||||
// - receving = false
|
||||
// - throw away all pending request
|
||||
// - reset RttEstimate
|
||||
//
|
||||
// Keep the following unchanged:
|
||||
// - connected
|
||||
// - remote_candidate
|
||||
// - statistics
|
||||
//
|
||||
// SignalStateChange will not be triggered.
|
||||
virtual void ForgetLearnedStateForConnections(
|
||||
std::vector<const Connection*> connections) = 0;
|
||||
|
||||
// Send a STUN ping request for the given connection.
|
||||
virtual void SendPingRequest(const Connection* connection) = 0;
|
||||
|
||||
// Switch the transport to use the given connection.
|
||||
virtual void SwitchSelectedConnection(const Connection* new_connection,
|
||||
IceSwitchReason reason) = 0;
|
||||
|
||||
// Prune away the given connections. Returns true if pruning is permitted and
|
||||
// successfully performed.
|
||||
virtual bool PruneConnections(std::vector<const Connection*> connections) = 0;
|
||||
};
|
||||
|
||||
} // namespace cricket
|
||||
|
||||
#endif // P2P_BASE_ICE_AGENT_INTERFACE_H_
|
Reference in New Issue
Block a user