81 lines
2.9 KiB
C
81 lines
2.9 KiB
C
|
/*
|
||
|
* 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 "api/array_view.h"
|
||
|
#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(
|
||
|
rtc::ArrayView<const Connection* const> 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(
|
||
|
rtc::ArrayView<const Connection* const> connections) = 0;
|
||
|
};
|
||
|
|
||
|
} // namespace cricket
|
||
|
|
||
|
#endif // P2P_BASE_ICE_AGENT_INTERFACE_H_
|