mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-13 05:40:42 +01:00
WebRTC-DeprecateGlobalFieldTrialString/Enabled/ - part 11/inf
convert rtc_base/network and collateral. This also remove last usage of system_wrappers/field_trials in p2p/...Yay! Bug: webrtc:10335 Change-Id: Ie8507b1f52bf7f3067e9b4bf8c81a825e4644fda Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256640 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Jonas Oreland <jonaso@webrtc.org> Cr-Commit-Position: refs/heads/main@{#36357}
This commit is contained in:
parent
342c511007
commit
c06fe8b04e
31 changed files with 284 additions and 154 deletions
|
@ -918,6 +918,7 @@ if (!build_with_chromium) {
|
||||||
"../rtc_base:rtc_base_approved",
|
"../rtc_base:rtc_base_approved",
|
||||||
"../rtc_base:socket_address",
|
"../rtc_base:socket_address",
|
||||||
"../rtc_base:threading",
|
"../rtc_base:threading",
|
||||||
|
"../test:scoped_key_value_config",
|
||||||
"//third_party/abseil-cpp/absl/flags:flag",
|
"//third_party/abseil-cpp/absl/flags:flag",
|
||||||
"//third_party/abseil-cpp/absl/flags:parse",
|
"//third_party/abseil-cpp/absl/flags:parse",
|
||||||
]
|
]
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include "rtc_base/ssl_adapter.h"
|
#include "rtc_base/ssl_adapter.h"
|
||||||
#include "rtc_base/thread.h"
|
#include "rtc_base/thread.h"
|
||||||
#include "rtc_base/time_utils.h"
|
#include "rtc_base/time_utils.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
using stunprober::AsyncCallback;
|
using stunprober::AsyncCallback;
|
||||||
using stunprober::StunProber;
|
using stunprober::StunProber;
|
||||||
|
@ -123,12 +124,13 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
rtc::InitializeSSL();
|
rtc::InitializeSSL();
|
||||||
rtc::InitRandom(rtc::Time32());
|
rtc::InitRandom(rtc::Time32());
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials;
|
||||||
rtc::PhysicalSocketServer socket_server;
|
rtc::PhysicalSocketServer socket_server;
|
||||||
rtc::AutoSocketServerThread thread(&socket_server);
|
rtc::AutoSocketServerThread thread(&socket_server);
|
||||||
auto socket_factory =
|
auto socket_factory =
|
||||||
std::make_unique<rtc::BasicPacketSocketFactory>(&socket_server);
|
std::make_unique<rtc::BasicPacketSocketFactory>(&socket_server);
|
||||||
std::unique_ptr<rtc::BasicNetworkManager> network_manager(
|
std::unique_ptr<rtc::BasicNetworkManager> network_manager(
|
||||||
new rtc::BasicNetworkManager(&socket_server));
|
new rtc::BasicNetworkManager(&socket_server, &field_trials));
|
||||||
rtc::NetworkManager::NetworkList networks;
|
rtc::NetworkManager::NetworkList networks;
|
||||||
network_manager->GetNetworks(&networks);
|
network_manager->GetNetworks(&networks);
|
||||||
auto prober = std::make_unique<StunProber>(socket_factory.get(),
|
auto prober = std::make_unique<StunProber>(socket_factory.get(),
|
||||||
|
|
|
@ -115,6 +115,7 @@ rtc_library("rtc_p2p") {
|
||||||
"../rtc_base:threading",
|
"../rtc_base:threading",
|
||||||
"../rtc_base/containers:flat_map",
|
"../rtc_base/containers:flat_map",
|
||||||
"../rtc_base/experiments:field_trial_parser",
|
"../rtc_base/experiments:field_trial_parser",
|
||||||
|
"../rtc_base/memory:always_valid_pointer",
|
||||||
"../rtc_base/system:no_unique_address",
|
"../rtc_base/system:no_unique_address",
|
||||||
|
|
||||||
# Needed by pseudo_tcp, which should move to a separate target.
|
# Needed by pseudo_tcp, which should move to a separate target.
|
||||||
|
@ -127,7 +128,6 @@ rtc_library("rtc_p2p") {
|
||||||
"../rtc_base/task_utils:to_queued_task",
|
"../rtc_base/task_utils:to_queued_task",
|
||||||
"../rtc_base/third_party/base64",
|
"../rtc_base/third_party/base64",
|
||||||
"../rtc_base/third_party/sigslot",
|
"../rtc_base/third_party/sigslot",
|
||||||
"../system_wrappers:field_trial",
|
|
||||||
"../system_wrappers:metrics",
|
"../system_wrappers:metrics",
|
||||||
]
|
]
|
||||||
absl_deps = [
|
absl_deps = [
|
||||||
|
@ -166,6 +166,7 @@ if (rtc_include_tests) {
|
||||||
"../rtc_base",
|
"../rtc_base",
|
||||||
"../rtc_base:net_helpers",
|
"../rtc_base:net_helpers",
|
||||||
"../rtc_base:threading",
|
"../rtc_base:threading",
|
||||||
|
"../test:scoped_key_value_config",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,7 +261,6 @@ if (rtc_include_tests) {
|
||||||
"../rtc_base/network:sent_packet",
|
"../rtc_base/network:sent_packet",
|
||||||
"../rtc_base/third_party/sigslot",
|
"../rtc_base/third_party/sigslot",
|
||||||
"../system_wrappers:metrics",
|
"../system_wrappers:metrics",
|
||||||
"../test:field_trial",
|
|
||||||
"../test:rtc_expect_death",
|
"../test:rtc_expect_death",
|
||||||
"../test:scoped_key_value_config",
|
"../test:scoped_key_value_config",
|
||||||
"../test:test_support",
|
"../test:test_support",
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "p2p/base/udp_port.h"
|
#include "p2p/base/udp_port.h"
|
||||||
#include "rtc_base/net_helpers.h"
|
#include "rtc_base/net_helpers.h"
|
||||||
#include "rtc_base/thread.h"
|
#include "rtc_base/thread.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
namespace rtc {
|
namespace rtc {
|
||||||
class SocketFactory;
|
class SocketFactory;
|
||||||
|
@ -36,10 +37,11 @@ class TestUDPPort : public UDPPort {
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_localhost_for_anyaddress) {
|
bool emit_localhost_for_anyaddress,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials) {
|
||||||
TestUDPPort* port =
|
TestUDPPort* port =
|
||||||
new TestUDPPort(thread, factory, network, min_port, max_port, username,
|
new TestUDPPort(thread, factory, network, min_port, max_port, username,
|
||||||
password, emit_localhost_for_anyaddress);
|
password, emit_localhost_for_anyaddress, field_trials);
|
||||||
if (!port->Init()) {
|
if (!port->Init()) {
|
||||||
delete port;
|
delete port;
|
||||||
port = nullptr;
|
port = nullptr;
|
||||||
|
@ -55,7 +57,8 @@ class TestUDPPort : public UDPPort {
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_localhost_for_anyaddress)
|
bool emit_localhost_for_anyaddress,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: UDPPort(thread,
|
: UDPPort(thread,
|
||||||
factory,
|
factory,
|
||||||
network,
|
network,
|
||||||
|
@ -63,7 +66,8 @@ class TestUDPPort : public UDPPort {
|
||||||
max_port,
|
max_port,
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
emit_localhost_for_anyaddress) {}
|
emit_localhost_for_anyaddress,
|
||||||
|
field_trials) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
// A FakePortAllocatorSession can be used with either a real or fake socket
|
// A FakePortAllocatorSession can be used with either a real or fake socket
|
||||||
|
@ -77,7 +81,8 @@ class FakePortAllocatorSession : public PortAllocatorSession {
|
||||||
const std::string& content_name,
|
const std::string& content_name,
|
||||||
int component,
|
int component,
|
||||||
const std::string& ice_ufrag,
|
const std::string& ice_ufrag,
|
||||||
const std::string& ice_pwd)
|
const std::string& ice_pwd,
|
||||||
|
const webrtc::WebRtcKeyValueConfig& field_trials)
|
||||||
: PortAllocatorSession(content_name,
|
: PortAllocatorSession(content_name,
|
||||||
component,
|
component,
|
||||||
ice_ufrag,
|
ice_ufrag,
|
||||||
|
@ -96,7 +101,8 @@ class FakePortAllocatorSession : public PortAllocatorSession {
|
||||||
port_(),
|
port_(),
|
||||||
port_config_count_(0),
|
port_config_count_(0),
|
||||||
stun_servers_(allocator->stun_servers()),
|
stun_servers_(allocator->stun_servers()),
|
||||||
turn_servers_(allocator->turn_servers()) {
|
turn_servers_(allocator->turn_servers()),
|
||||||
|
field_trials_(field_trials) {
|
||||||
ipv4_network_.AddIP(rtc::IPAddress(INADDR_LOOPBACK));
|
ipv4_network_.AddIP(rtc::IPAddress(INADDR_LOOPBACK));
|
||||||
ipv6_network_.AddIP(rtc::IPAddress(in6addr_loopback));
|
ipv6_network_.AddIP(rtc::IPAddress(in6addr_loopback));
|
||||||
}
|
}
|
||||||
|
@ -112,7 +118,8 @@ class FakePortAllocatorSession : public PortAllocatorSession {
|
||||||
? ipv6_network_
|
? ipv6_network_
|
||||||
: ipv4_network_;
|
: ipv4_network_;
|
||||||
port_.reset(TestUDPPort::Create(network_thread_, factory_, &network, 0, 0,
|
port_.reset(TestUDPPort::Create(network_thread_, factory_, &network, 0, 0,
|
||||||
username(), password(), false));
|
username(), password(), false,
|
||||||
|
&field_trials_));
|
||||||
RTC_DCHECK(port_);
|
RTC_DCHECK(port_);
|
||||||
port_->SubscribePortDestroyed(
|
port_->SubscribePortDestroyed(
|
||||||
[this](PortInterface* port) { OnPortDestroyed(port); });
|
[this](PortInterface* port) { OnPortDestroyed(port); });
|
||||||
|
@ -200,6 +207,7 @@ class FakePortAllocatorSession : public PortAllocatorSession {
|
||||||
uint32_t candidate_filter_ = CF_ALL;
|
uint32_t candidate_filter_ = CF_ALL;
|
||||||
int transport_info_update_count_ = 0;
|
int transport_info_update_count_ = 0;
|
||||||
bool running_ = false;
|
bool running_ = false;
|
||||||
|
const webrtc::WebRtcKeyValueConfig& field_trials_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FakePortAllocator : public cricket::PortAllocator {
|
class FakePortAllocator : public cricket::PortAllocator {
|
||||||
|
@ -231,7 +239,7 @@ class FakePortAllocator : public cricket::PortAllocator {
|
||||||
const std::string& ice_pwd) override {
|
const std::string& ice_pwd) override {
|
||||||
return new FakePortAllocatorSession(this, network_thread_, factory_,
|
return new FakePortAllocatorSession(this, network_thread_, factory_,
|
||||||
content_name, component, ice_ufrag,
|
content_name, component, ice_ufrag,
|
||||||
ice_pwd);
|
ice_pwd, field_trials_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool initialized() const { return initialized_; }
|
bool initialized() const { return initialized_; }
|
||||||
|
@ -245,6 +253,7 @@ class FakePortAllocator : public cricket::PortAllocator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials_;
|
||||||
rtc::Thread* network_thread_;
|
rtc::Thread* network_thread_;
|
||||||
rtc::PacketSocketFactory* factory_;
|
rtc::PacketSocketFactory* factory_;
|
||||||
std::unique_ptr<rtc::BasicPacketSocketFactory> owned_factory_;
|
std::unique_ptr<rtc::BasicPacketSocketFactory> owned_factory_;
|
||||||
|
|
|
@ -110,7 +110,8 @@ Port::Port(rtc::Thread* thread,
|
||||||
rtc::PacketSocketFactory* factory,
|
rtc::PacketSocketFactory* factory,
|
||||||
const rtc::Network* network,
|
const rtc::Network* network,
|
||||||
const std::string& username_fragment,
|
const std::string& username_fragment,
|
||||||
const std::string& password)
|
const std::string& password,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: thread_(thread),
|
: thread_(thread),
|
||||||
factory_(factory),
|
factory_(factory),
|
||||||
type_(type),
|
type_(type),
|
||||||
|
@ -127,7 +128,8 @@ Port::Port(rtc::Thread* thread,
|
||||||
ice_role_(ICEROLE_UNKNOWN),
|
ice_role_(ICEROLE_UNKNOWN),
|
||||||
tiebreaker_(0),
|
tiebreaker_(0),
|
||||||
shared_socket_(true),
|
shared_socket_(true),
|
||||||
weak_factory_(this) {
|
weak_factory_(this),
|
||||||
|
field_trials_(field_trials) {
|
||||||
RTC_DCHECK(factory_ != NULL);
|
RTC_DCHECK(factory_ != NULL);
|
||||||
Construct();
|
Construct();
|
||||||
}
|
}
|
||||||
|
@ -139,7 +141,8 @@ Port::Port(rtc::Thread* thread,
|
||||||
uint16_t min_port,
|
uint16_t min_port,
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username_fragment,
|
const std::string& username_fragment,
|
||||||
const std::string& password)
|
const std::string& password,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: thread_(thread),
|
: thread_(thread),
|
||||||
factory_(factory),
|
factory_(factory),
|
||||||
type_(type),
|
type_(type),
|
||||||
|
@ -156,7 +159,8 @@ Port::Port(rtc::Thread* thread,
|
||||||
ice_role_(ICEROLE_UNKNOWN),
|
ice_role_(ICEROLE_UNKNOWN),
|
||||||
tiebreaker_(0),
|
tiebreaker_(0),
|
||||||
shared_socket_(false),
|
shared_socket_(false),
|
||||||
weak_factory_(this) {
|
weak_factory_(this),
|
||||||
|
field_trials_(field_trials) {
|
||||||
RTC_DCHECK(factory_ != NULL);
|
RTC_DCHECK(factory_ != NULL);
|
||||||
Construct();
|
Construct();
|
||||||
}
|
}
|
||||||
|
@ -171,7 +175,7 @@ void Port::Construct() {
|
||||||
password_ = rtc::CreateRandomString(ICE_PWD_LENGTH);
|
password_ = rtc::CreateRandomString(ICE_PWD_LENGTH);
|
||||||
}
|
}
|
||||||
network_->SignalTypeChanged.connect(this, &Port::OnNetworkTypeChanged);
|
network_->SignalTypeChanged.connect(this, &Port::OnNetworkTypeChanged);
|
||||||
network_cost_ = network_->GetCost();
|
network_cost_ = network_->GetCost(*field_trials_);
|
||||||
|
|
||||||
thread_->PostDelayed(RTC_FROM_HERE, timeout_delay_, this,
|
thread_->PostDelayed(RTC_FROM_HERE, timeout_delay_, this,
|
||||||
MSG_DESTROY_IF_DEAD);
|
MSG_DESTROY_IF_DEAD);
|
||||||
|
@ -880,7 +884,7 @@ std::string Port::ToString() const {
|
||||||
|
|
||||||
// TODO(honghaiz): Make the network cost configurable from user setting.
|
// TODO(honghaiz): Make the network cost configurable from user setting.
|
||||||
void Port::UpdateNetworkCost() {
|
void Port::UpdateNetworkCost() {
|
||||||
uint16_t new_cost = network_->GetCost();
|
uint16_t new_cost = network_->GetCost(*field_trials_);
|
||||||
if (network_cost_ == new_cost) {
|
if (network_cost_ == new_cost) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,9 @@
|
||||||
#include "api/candidate.h"
|
#include "api/candidate.h"
|
||||||
#include "api/packet_socket_factory.h"
|
#include "api/packet_socket_factory.h"
|
||||||
#include "api/rtc_error.h"
|
#include "api/rtc_error.h"
|
||||||
|
#include "api/transport/field_trial_based_config.h"
|
||||||
#include "api/transport/stun.h"
|
#include "api/transport/stun.h"
|
||||||
|
#include "api/webrtc_key_value_config.h"
|
||||||
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
|
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair.h"
|
||||||
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h"
|
#include "logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.h"
|
||||||
#include "logging/rtc_event_log/ice_logger.h"
|
#include "logging/rtc_event_log/ice_logger.h"
|
||||||
|
@ -35,6 +37,7 @@
|
||||||
#include "rtc_base/async_packet_socket.h"
|
#include "rtc_base/async_packet_socket.h"
|
||||||
#include "rtc_base/callback_list.h"
|
#include "rtc_base/callback_list.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
|
#include "rtc_base/memory/always_valid_pointer.h"
|
||||||
#include "rtc_base/net_helper.h"
|
#include "rtc_base/net_helper.h"
|
||||||
#include "rtc_base/network.h"
|
#include "rtc_base/network.h"
|
||||||
#include "rtc_base/proxy_info.h"
|
#include "rtc_base/proxy_info.h"
|
||||||
|
@ -185,7 +188,8 @@ class Port : public PortInterface,
|
||||||
rtc::PacketSocketFactory* factory,
|
rtc::PacketSocketFactory* factory,
|
||||||
const rtc::Network* network,
|
const rtc::Network* network,
|
||||||
const std::string& username_fragment,
|
const std::string& username_fragment,
|
||||||
const std::string& password);
|
const std::string& password,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr);
|
||||||
Port(rtc::Thread* thread,
|
Port(rtc::Thread* thread,
|
||||||
const std::string& type,
|
const std::string& type,
|
||||||
rtc::PacketSocketFactory* factory,
|
rtc::PacketSocketFactory* factory,
|
||||||
|
@ -193,7 +197,8 @@ class Port : public PortInterface,
|
||||||
uint16_t min_port,
|
uint16_t min_port,
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username_fragment,
|
const std::string& username_fragment,
|
||||||
const std::string& password);
|
const std::string& password,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr);
|
||||||
~Port() override;
|
~Port() override;
|
||||||
|
|
||||||
// Note that the port type does NOT uniquely identify different subclasses of
|
// Note that the port type does NOT uniquely identify different subclasses of
|
||||||
|
@ -494,6 +499,9 @@ class Port : public PortInterface,
|
||||||
MdnsNameRegistrationStatus::kNotStarted;
|
MdnsNameRegistrationStatus::kNotStarted;
|
||||||
|
|
||||||
rtc::WeakPtrFactory<Port> weak_factory_;
|
rtc::WeakPtrFactory<Port> weak_factory_;
|
||||||
|
webrtc::AlwaysValidPointer<const webrtc::WebRtcKeyValueConfig,
|
||||||
|
webrtc::FieldTrialBasedConfig>
|
||||||
|
field_trials_;
|
||||||
|
|
||||||
bool MaybeObfuscateAddress(Candidate* c,
|
bool MaybeObfuscateAddress(Candidate* c,
|
||||||
const std::string& type,
|
const std::string& type,
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
#include "rtc_base/time_utils.h"
|
#include "rtc_base/time_utils.h"
|
||||||
#include "rtc_base/virtual_socket_server.h"
|
#include "rtc_base/virtual_socket_server.h"
|
||||||
#include "test/gtest.h"
|
#include "test/gtest.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
using rtc::AsyncListenSocket;
|
using rtc::AsyncListenSocket;
|
||||||
using rtc::AsyncPacketSocket;
|
using rtc::AsyncPacketSocket;
|
||||||
|
@ -519,7 +520,8 @@ class PortTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
std::unique_ptr<UDPPort> CreateUdpPort(const SocketAddress& addr,
|
std::unique_ptr<UDPPort> CreateUdpPort(const SocketAddress& addr,
|
||||||
PacketSocketFactory* socket_factory) {
|
PacketSocketFactory* socket_factory) {
|
||||||
return UDPPort::Create(&main_, socket_factory, MakeNetwork(addr), 0, 0,
|
return UDPPort::Create(&main_, socket_factory, MakeNetwork(addr), 0, 0,
|
||||||
username_, password_, true, absl::nullopt);
|
username_, password_, true, absl::nullopt,
|
||||||
|
&field_trials_);
|
||||||
}
|
}
|
||||||
std::unique_ptr<TCPPort> CreateTcpPort(const SocketAddress& addr) {
|
std::unique_ptr<TCPPort> CreateTcpPort(const SocketAddress& addr) {
|
||||||
return CreateTcpPort(addr, &socket_factory_);
|
return CreateTcpPort(addr, &socket_factory_);
|
||||||
|
@ -527,14 +529,15 @@ class PortTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
std::unique_ptr<TCPPort> CreateTcpPort(const SocketAddress& addr,
|
std::unique_ptr<TCPPort> CreateTcpPort(const SocketAddress& addr,
|
||||||
PacketSocketFactory* socket_factory) {
|
PacketSocketFactory* socket_factory) {
|
||||||
return TCPPort::Create(&main_, socket_factory, MakeNetwork(addr), 0, 0,
|
return TCPPort::Create(&main_, socket_factory, MakeNetwork(addr), 0, 0,
|
||||||
username_, password_, true);
|
username_, password_, true, &field_trials_);
|
||||||
}
|
}
|
||||||
std::unique_ptr<StunPort> CreateStunPort(const SocketAddress& addr,
|
std::unique_ptr<StunPort> CreateStunPort(const SocketAddress& addr,
|
||||||
rtc::PacketSocketFactory* factory) {
|
rtc::PacketSocketFactory* factory) {
|
||||||
ServerAddresses stun_servers;
|
ServerAddresses stun_servers;
|
||||||
stun_servers.insert(kStunAddr);
|
stun_servers.insert(kStunAddr);
|
||||||
return StunPort::Create(&main_, factory, MakeNetwork(addr), 0, 0, username_,
|
return StunPort::Create(&main_, factory, MakeNetwork(addr), 0, 0, username_,
|
||||||
password_, stun_servers, absl::nullopt);
|
password_, stun_servers, absl::nullopt,
|
||||||
|
&field_trials_);
|
||||||
}
|
}
|
||||||
std::unique_ptr<Port> CreateRelayPort(const SocketAddress& addr,
|
std::unique_ptr<Port> CreateRelayPort(const SocketAddress& addr,
|
||||||
ProtocolType int_proto,
|
ProtocolType int_proto,
|
||||||
|
@ -567,6 +570,7 @@ class PortTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
args.password = password_;
|
args.password = password_;
|
||||||
args.server_address = &server_address;
|
args.server_address = &server_address;
|
||||||
args.config = &config;
|
args.config = &config;
|
||||||
|
args.field_trials = &field_trials_;
|
||||||
|
|
||||||
return TurnPort::Create(args, 0, 0);
|
return TurnPort::Create(args, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -832,6 +836,7 @@ class PortTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
std::string password_;
|
std::string password_;
|
||||||
bool role_conflict_;
|
bool role_conflict_;
|
||||||
int ports_destroyed_;
|
int ports_destroyed_;
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials_;
|
||||||
};
|
};
|
||||||
|
|
||||||
void PortTest::TestConnectivity(const char* name1,
|
void PortTest::TestConnectivity(const char* name1,
|
||||||
|
|
|
@ -157,8 +157,15 @@ UDPPort::UDPPort(rtc::Thread* thread,
|
||||||
rtc::AsyncPacketSocket* socket,
|
rtc::AsyncPacketSocket* socket,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_local_for_anyaddress)
|
bool emit_local_for_anyaddress,
|
||||||
: Port(thread, LOCAL_PORT_TYPE, factory, network, username, password),
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
|
: Port(thread,
|
||||||
|
LOCAL_PORT_TYPE,
|
||||||
|
factory,
|
||||||
|
network,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
field_trials),
|
||||||
requests_(thread),
|
requests_(thread),
|
||||||
socket_(socket),
|
socket_(socket),
|
||||||
error_(0),
|
error_(0),
|
||||||
|
@ -174,7 +181,8 @@ UDPPort::UDPPort(rtc::Thread* thread,
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_local_for_anyaddress)
|
bool emit_local_for_anyaddress,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: Port(thread,
|
: Port(thread,
|
||||||
LOCAL_PORT_TYPE,
|
LOCAL_PORT_TYPE,
|
||||||
factory,
|
factory,
|
||||||
|
@ -182,7 +190,8 @@ UDPPort::UDPPort(rtc::Thread* thread,
|
||||||
min_port,
|
min_port,
|
||||||
max_port,
|
max_port,
|
||||||
username,
|
username,
|
||||||
password),
|
password,
|
||||||
|
field_trials),
|
||||||
requests_(thread),
|
requests_(thread),
|
||||||
socket_(nullptr),
|
socket_(nullptr),
|
||||||
error_(0),
|
error_(0),
|
||||||
|
@ -605,11 +614,12 @@ std::unique_ptr<StunPort> StunPort::Create(
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
const ServerAddresses& servers,
|
const ServerAddresses& servers,
|
||||||
absl::optional<int> stun_keepalive_interval) {
|
absl::optional<int> stun_keepalive_interval,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials) {
|
||||||
// Using `new` to access a non-public constructor.
|
// Using `new` to access a non-public constructor.
|
||||||
auto port =
|
auto port = absl::WrapUnique(new StunPort(thread, factory, network, min_port,
|
||||||
absl::WrapUnique(new StunPort(thread, factory, network, min_port,
|
max_port, username, password,
|
||||||
max_port, username, password, servers));
|
servers, field_trials));
|
||||||
port->set_stun_keepalive_delay(stun_keepalive_interval);
|
port->set_stun_keepalive_delay(stun_keepalive_interval);
|
||||||
if (!port->Init()) {
|
if (!port->Init()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -624,7 +634,8 @@ StunPort::StunPort(rtc::Thread* thread,
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
const ServerAddresses& servers)
|
const ServerAddresses& servers,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: UDPPort(thread,
|
: UDPPort(thread,
|
||||||
factory,
|
factory,
|
||||||
network,
|
network,
|
||||||
|
@ -632,7 +643,8 @@ StunPort::StunPort(rtc::Thread* thread,
|
||||||
max_port,
|
max_port,
|
||||||
username,
|
username,
|
||||||
password,
|
password,
|
||||||
false) {
|
false,
|
||||||
|
field_trials) {
|
||||||
// UDPPort will set these to local udp, updating these to STUN.
|
// UDPPort will set these to local udp, updating these to STUN.
|
||||||
set_type(STUN_PORT_TYPE);
|
set_type(STUN_PORT_TYPE);
|
||||||
set_server_addresses(servers);
|
set_server_addresses(servers);
|
||||||
|
|
|
@ -40,11 +40,12 @@ class UDPPort : public Port {
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_local_for_anyaddress,
|
bool emit_local_for_anyaddress,
|
||||||
absl::optional<int> stun_keepalive_interval) {
|
absl::optional<int> stun_keepalive_interval,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr) {
|
||||||
// Using `new` to access a non-public constructor.
|
// Using `new` to access a non-public constructor.
|
||||||
auto port =
|
auto port = absl::WrapUnique(
|
||||||
absl::WrapUnique(new UDPPort(thread, factory, network, socket, username,
|
new UDPPort(thread, factory, network, socket, username, password,
|
||||||
password, emit_local_for_anyaddress));
|
emit_local_for_anyaddress, field_trials));
|
||||||
port->set_stun_keepalive_delay(stun_keepalive_interval);
|
port->set_stun_keepalive_delay(stun_keepalive_interval);
|
||||||
if (!port->Init()) {
|
if (!port->Init()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -61,11 +62,12 @@ class UDPPort : public Port {
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_local_for_anyaddress,
|
bool emit_local_for_anyaddress,
|
||||||
absl::optional<int> stun_keepalive_interval) {
|
absl::optional<int> stun_keepalive_interval,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr) {
|
||||||
// Using `new` to access a non-public constructor.
|
// Using `new` to access a non-public constructor.
|
||||||
auto port = absl::WrapUnique(new UDPPort(thread, factory, network, min_port,
|
auto port = absl::WrapUnique(
|
||||||
max_port, username, password,
|
new UDPPort(thread, factory, network, min_port, max_port, username,
|
||||||
emit_local_for_anyaddress));
|
password, emit_local_for_anyaddress, field_trials));
|
||||||
port->set_stun_keepalive_delay(stun_keepalive_interval);
|
port->set_stun_keepalive_delay(stun_keepalive_interval);
|
||||||
if (!port->Init()) {
|
if (!port->Init()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -124,7 +126,8 @@ class UDPPort : public Port {
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_local_for_anyaddress);
|
bool emit_local_for_anyaddress,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials);
|
||||||
|
|
||||||
UDPPort(rtc::Thread* thread,
|
UDPPort(rtc::Thread* thread,
|
||||||
rtc::PacketSocketFactory* factory,
|
rtc::PacketSocketFactory* factory,
|
||||||
|
@ -132,7 +135,8 @@ class UDPPort : public Port {
|
||||||
rtc::AsyncPacketSocket* socket,
|
rtc::AsyncPacketSocket* socket,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool emit_local_for_anyaddress);
|
bool emit_local_for_anyaddress,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials);
|
||||||
|
|
||||||
bool Init();
|
bool Init();
|
||||||
|
|
||||||
|
@ -270,7 +274,8 @@ class StunPort : public UDPPort {
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
const ServerAddresses& servers,
|
const ServerAddresses& servers,
|
||||||
absl::optional<int> stun_keepalive_interval);
|
absl::optional<int> stun_keepalive_interval,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials);
|
||||||
|
|
||||||
void PrepareAddress() override;
|
void PrepareAddress() override;
|
||||||
|
|
||||||
|
@ -282,7 +287,8 @@ class StunPort : public UDPPort {
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
const ServerAddresses& servers);
|
const ServerAddresses& servers,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace cricket
|
} // namespace cricket
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "rtc_base/ssl_adapter.h"
|
#include "rtc_base/ssl_adapter.h"
|
||||||
#include "rtc_base/virtual_socket_server.h"
|
#include "rtc_base/virtual_socket_server.h"
|
||||||
#include "test/gmock.h"
|
#include "test/gmock.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
using cricket::ServerAddresses;
|
using cricket::ServerAddresses;
|
||||||
using rtc::SocketAddress;
|
using rtc::SocketAddress;
|
||||||
|
@ -77,7 +78,7 @@ class StunPortTestBase : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
stun_port_ = cricket::StunPort::Create(
|
stun_port_ = cricket::StunPort::Create(
|
||||||
rtc::Thread::Current(), &socket_factory_, &network_, 0, 0,
|
rtc::Thread::Current(), &socket_factory_, &network_, 0, 0,
|
||||||
rtc::CreateRandomString(16), rtc::CreateRandomString(22), stun_servers,
|
rtc::CreateRandomString(16), rtc::CreateRandomString(22), stun_servers,
|
||||||
absl::nullopt);
|
absl::nullopt, &field_trials_);
|
||||||
stun_port_->set_stun_keepalive_delay(stun_keepalive_delay_);
|
stun_port_->set_stun_keepalive_delay(stun_keepalive_delay_);
|
||||||
// If `stun_keepalive_lifetime_` is negative, let the stun port
|
// If `stun_keepalive_lifetime_` is negative, let the stun port
|
||||||
// choose its lifetime from the network type.
|
// choose its lifetime from the network type.
|
||||||
|
@ -104,7 +105,7 @@ class StunPortTestBase : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
stun_port_ = cricket::UDPPort::Create(
|
stun_port_ = cricket::UDPPort::Create(
|
||||||
rtc::Thread::Current(), &socket_factory_, &network_, socket_.get(),
|
rtc::Thread::Current(), &socket_factory_, &network_, socket_.get(),
|
||||||
rtc::CreateRandomString(16), rtc::CreateRandomString(22), false,
|
rtc::CreateRandomString(16), rtc::CreateRandomString(22), false,
|
||||||
absl::nullopt);
|
absl::nullopt, &field_trials_);
|
||||||
ASSERT_TRUE(stun_port_ != NULL);
|
ASSERT_TRUE(stun_port_ != NULL);
|
||||||
ServerAddresses stun_servers;
|
ServerAddresses stun_servers;
|
||||||
stun_servers.insert(server_addr);
|
stun_servers.insert(server_addr);
|
||||||
|
@ -175,6 +176,7 @@ class StunPortTestBase : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
cricket::IceCandidateErrorEvent error_event_;
|
cricket::IceCandidateErrorEvent error_event_;
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StunPortTestWithRealClock : public StunPortTestBase {};
|
class StunPortTestWithRealClock : public StunPortTestBase {};
|
||||||
|
|
|
@ -91,7 +91,8 @@ TCPPort::TCPPort(rtc::Thread* thread,
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool allow_listen)
|
bool allow_listen,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: Port(thread,
|
: Port(thread,
|
||||||
LOCAL_PORT_TYPE,
|
LOCAL_PORT_TYPE,
|
||||||
factory,
|
factory,
|
||||||
|
@ -99,7 +100,8 @@ TCPPort::TCPPort(rtc::Thread* thread,
|
||||||
min_port,
|
min_port,
|
||||||
max_port,
|
max_port,
|
||||||
username,
|
username,
|
||||||
password),
|
password,
|
||||||
|
field_trials),
|
||||||
allow_listen_(allow_listen),
|
allow_listen_(allow_listen),
|
||||||
error_(0) {
|
error_(0) {
|
||||||
// TODO(mallinath) - Set preference value as per RFC 6544.
|
// TODO(mallinath) - Set preference value as per RFC 6544.
|
||||||
|
|
|
@ -34,18 +34,20 @@ class TCPConnection;
|
||||||
// call this TCPPort::OnReadPacket (3 arg) to dispatch to a connection.
|
// call this TCPPort::OnReadPacket (3 arg) to dispatch to a connection.
|
||||||
class TCPPort : public Port {
|
class TCPPort : public Port {
|
||||||
public:
|
public:
|
||||||
static std::unique_ptr<TCPPort> Create(rtc::Thread* thread,
|
static std::unique_ptr<TCPPort> Create(
|
||||||
rtc::PacketSocketFactory* factory,
|
rtc::Thread* thread,
|
||||||
const rtc::Network* network,
|
rtc::PacketSocketFactory* factory,
|
||||||
uint16_t min_port,
|
const rtc::Network* network,
|
||||||
uint16_t max_port,
|
uint16_t min_port,
|
||||||
const std::string& username,
|
uint16_t max_port,
|
||||||
const std::string& password,
|
const std::string& username,
|
||||||
bool allow_listen) {
|
const std::string& password,
|
||||||
|
bool allow_listen,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr) {
|
||||||
// Using `new` to access a non-public constructor.
|
// Using `new` to access a non-public constructor.
|
||||||
return absl::WrapUnique(new TCPPort(thread, factory, network, min_port,
|
return absl::WrapUnique(new TCPPort(thread, factory, network, min_port,
|
||||||
max_port, username, password,
|
max_port, username, password,
|
||||||
allow_listen));
|
allow_listen, field_trials));
|
||||||
}
|
}
|
||||||
~TCPPort() override;
|
~TCPPort() override;
|
||||||
|
|
||||||
|
@ -71,7 +73,8 @@ class TCPPort : public Port {
|
||||||
uint16_t max_port,
|
uint16_t max_port,
|
||||||
const std::string& username,
|
const std::string& username,
|
||||||
const std::string& password,
|
const std::string& password,
|
||||||
bool allow_listen);
|
bool allow_listen,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials);
|
||||||
|
|
||||||
// Handles sending using the local TCP socket.
|
// Handles sending using the local TCP socket.
|
||||||
int SendTo(const void* data,
|
int SendTo(const void* data,
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "rtc_base/time_utils.h"
|
#include "rtc_base/time_utils.h"
|
||||||
#include "rtc_base/virtual_socket_server.h"
|
#include "rtc_base/virtual_socket_server.h"
|
||||||
#include "test/gtest.h"
|
#include "test/gtest.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
using cricket::Connection;
|
using cricket::Connection;
|
||||||
using cricket::ICE_PWD_LENGTH;
|
using cricket::ICE_PWD_LENGTH;
|
||||||
|
@ -82,12 +83,13 @@ class TCPPortTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
std::unique_ptr<TCPPort> CreateTCPPort(const SocketAddress& addr) {
|
std::unique_ptr<TCPPort> CreateTCPPort(const SocketAddress& addr) {
|
||||||
return std::unique_ptr<TCPPort>(
|
return std::unique_ptr<TCPPort>(
|
||||||
TCPPort::Create(&main_, &socket_factory_, MakeNetwork(addr), 0, 0,
|
TCPPort::Create(&main_, &socket_factory_, MakeNetwork(addr), 0, 0,
|
||||||
username_, password_, true));
|
username_, password_, true, &field_trials_));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<TCPPort> CreateTCPPort(const rtc::Network* network) {
|
std::unique_ptr<TCPPort> CreateTCPPort(const rtc::Network* network) {
|
||||||
return std::unique_ptr<TCPPort>(TCPPort::Create(
|
return std::unique_ptr<TCPPort>(
|
||||||
&main_, &socket_factory_, network, 0, 0, username_, password_, true));
|
TCPPort::Create(&main_, &socket_factory_, network, 0, 0, username_,
|
||||||
|
password_, true, &field_trials_));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -100,6 +102,7 @@ class TCPPortTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
rtc::BasicPacketSocketFactory socket_factory_;
|
rtc::BasicPacketSocketFactory socket_factory_;
|
||||||
std::string username_;
|
std::string username_;
|
||||||
std::string password_;
|
std::string password_;
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials_;
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_F(TCPPortTest, TestTCPPortWithLocalhostAddress) {
|
TEST_F(TCPPortTest, TestTCPPortWithLocalhostAddress) {
|
||||||
|
|
|
@ -227,7 +227,13 @@ TurnPort::TurnPort(rtc::Thread* thread,
|
||||||
webrtc::TurnCustomizer* customizer,
|
webrtc::TurnCustomizer* customizer,
|
||||||
rtc::SSLCertificateVerifier* tls_cert_verifier,
|
rtc::SSLCertificateVerifier* tls_cert_verifier,
|
||||||
const webrtc::WebRtcKeyValueConfig* field_trials)
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: Port(thread, RELAY_PORT_TYPE, factory, network, username, password),
|
: Port(thread,
|
||||||
|
RELAY_PORT_TYPE,
|
||||||
|
factory,
|
||||||
|
network,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
field_trials),
|
||||||
server_address_(server_address),
|
server_address_(server_address),
|
||||||
tls_alpn_protocols_(tls_alpn_protocols),
|
tls_alpn_protocols_(tls_alpn_protocols),
|
||||||
tls_elliptic_curves_(tls_elliptic_curves),
|
tls_elliptic_curves_(tls_elliptic_curves),
|
||||||
|
@ -268,7 +274,8 @@ TurnPort::TurnPort(rtc::Thread* thread,
|
||||||
min_port,
|
min_port,
|
||||||
max_port,
|
max_port,
|
||||||
username,
|
username,
|
||||||
password),
|
password,
|
||||||
|
field_trials),
|
||||||
server_address_(server_address),
|
server_address_(server_address),
|
||||||
tls_alpn_protocols_(tls_alpn_protocols),
|
tls_alpn_protocols_(tls_alpn_protocols),
|
||||||
tls_elliptic_curves_(tls_elliptic_curves),
|
tls_elliptic_curves_(tls_elliptic_curves),
|
||||||
|
|
|
@ -375,9 +375,9 @@ class TurnPortTest : public ::testing::Test,
|
||||||
void CreateUdpPort() { CreateUdpPort(kLocalAddr2); }
|
void CreateUdpPort() { CreateUdpPort(kLocalAddr2); }
|
||||||
|
|
||||||
void CreateUdpPort(const SocketAddress& address) {
|
void CreateUdpPort(const SocketAddress& address) {
|
||||||
udp_port_ =
|
udp_port_ = UDPPort::Create(&main_, &socket_factory_, MakeNetwork(address),
|
||||||
UDPPort::Create(&main_, &socket_factory_, MakeNetwork(address), 0, 0,
|
0, 0, kIceUfrag2, kIcePwd2, false,
|
||||||
kIceUfrag2, kIcePwd2, false, absl::nullopt);
|
absl::nullopt, &field_trials_);
|
||||||
// UDP port will be controlled.
|
// UDP port will be controlled.
|
||||||
udp_port_->SetIceRole(ICEROLE_CONTROLLED);
|
udp_port_->SetIceRole(ICEROLE_CONTROLLED);
|
||||||
udp_port_->SignalPortComplete.connect(this,
|
udp_port_->SignalPortComplete.connect(this,
|
||||||
|
|
|
@ -756,11 +756,13 @@ std::vector<const rtc::Network*> BasicPortAllocatorSession::GetNetworks() {
|
||||||
if (rtc::IPIsLinkLocal(network->GetBestIP())) {
|
if (rtc::IPIsLinkLocal(network->GetBestIP())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
lowest_cost = std::min<uint16_t>(lowest_cost, network->GetCost());
|
lowest_cost = std::min<uint16_t>(
|
||||||
|
lowest_cost, network->GetCost(*allocator()->field_trials()));
|
||||||
}
|
}
|
||||||
NetworkFilter costly_filter(
|
NetworkFilter costly_filter(
|
||||||
[lowest_cost](const rtc::Network* network) {
|
[lowest_cost, this](const rtc::Network* network) {
|
||||||
return network->GetCost() > lowest_cost + rtc::kNetworkCostLow;
|
return network->GetCost(*allocator()->field_trials()) >
|
||||||
|
lowest_cost + rtc::kNetworkCostLow;
|
||||||
},
|
},
|
||||||
"costly");
|
"costly");
|
||||||
FilterNetworks(&networks, costly_filter);
|
FilterNetworks(&networks, costly_filter);
|
||||||
|
@ -1449,14 +1451,16 @@ void AllocationSequence::CreateUDPPorts() {
|
||||||
session_->network_thread(), session_->socket_factory(), network_,
|
session_->network_thread(), session_->socket_factory(), network_,
|
||||||
udp_socket_.get(), session_->username(), session_->password(),
|
udp_socket_.get(), session_->username(), session_->password(),
|
||||||
emit_local_candidate_for_anyaddress,
|
emit_local_candidate_for_anyaddress,
|
||||||
session_->allocator()->stun_candidate_keepalive_interval());
|
session_->allocator()->stun_candidate_keepalive_interval(),
|
||||||
|
session_->allocator()->field_trials());
|
||||||
} else {
|
} else {
|
||||||
port = UDPPort::Create(
|
port = UDPPort::Create(
|
||||||
session_->network_thread(), session_->socket_factory(), network_,
|
session_->network_thread(), session_->socket_factory(), network_,
|
||||||
session_->allocator()->min_port(), session_->allocator()->max_port(),
|
session_->allocator()->min_port(), session_->allocator()->max_port(),
|
||||||
session_->username(), session_->password(),
|
session_->username(), session_->password(),
|
||||||
emit_local_candidate_for_anyaddress,
|
emit_local_candidate_for_anyaddress,
|
||||||
session_->allocator()->stun_candidate_keepalive_interval());
|
session_->allocator()->stun_candidate_keepalive_interval(),
|
||||||
|
session_->allocator()->field_trials());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port) {
|
if (port) {
|
||||||
|
@ -1492,7 +1496,8 @@ void AllocationSequence::CreateTCPPorts() {
|
||||||
session_->network_thread(), session_->socket_factory(), network_,
|
session_->network_thread(), session_->socket_factory(), network_,
|
||||||
session_->allocator()->min_port(), session_->allocator()->max_port(),
|
session_->allocator()->min_port(), session_->allocator()->max_port(),
|
||||||
session_->username(), session_->password(),
|
session_->username(), session_->password(),
|
||||||
session_->allocator()->allow_tcp_listen());
|
session_->allocator()->allow_tcp_listen(),
|
||||||
|
session_->allocator()->field_trials());
|
||||||
if (port) {
|
if (port) {
|
||||||
session_->AddAllocatedPort(port.release(), this);
|
session_->AddAllocatedPort(port.release(), this);
|
||||||
// Since TCPPort is not created using shared socket, `port` will not be
|
// Since TCPPort is not created using shared socket, `port` will not be
|
||||||
|
@ -1520,7 +1525,8 @@ void AllocationSequence::CreateStunPorts() {
|
||||||
session_->network_thread(), session_->socket_factory(), network_,
|
session_->network_thread(), session_->socket_factory(), network_,
|
||||||
session_->allocator()->min_port(), session_->allocator()->max_port(),
|
session_->allocator()->min_port(), session_->allocator()->max_port(),
|
||||||
session_->username(), session_->password(), config_->StunServers(),
|
session_->username(), session_->password(), config_->StunServers(),
|
||||||
session_->allocator()->stun_candidate_keepalive_interval());
|
session_->allocator()->stun_candidate_keepalive_interval(),
|
||||||
|
session_->allocator()->field_trials());
|
||||||
if (port) {
|
if (port) {
|
||||||
session_->AddAllocatedPort(port.release(), this);
|
session_->AddAllocatedPort(port.release(), this);
|
||||||
// Since StunPort is not created using shared socket, `port` will not be
|
// Since StunPort is not created using shared socket, `port` will not be
|
||||||
|
|
|
@ -146,7 +146,7 @@ ConnectionContext::ConnectionContext(
|
||||||
// If network_monitor_factory_ is non-null, it will be used to create a
|
// If network_monitor_factory_ is non-null, it will be used to create a
|
||||||
// network monitor while on the network thread.
|
// network monitor while on the network thread.
|
||||||
default_network_manager_ = std::make_unique<rtc::BasicNetworkManager>(
|
default_network_manager_ = std::make_unique<rtc::BasicNetworkManager>(
|
||||||
network_monitor_factory_.get(), socket_factory);
|
network_monitor_factory_.get(), socket_factory, &trials());
|
||||||
|
|
||||||
default_socket_factory_ =
|
default_socket_factory_ =
|
||||||
std::make_unique<rtc::BasicPacketSocketFactory>(socket_factory);
|
std::make_unique<rtc::BasicPacketSocketFactory>(socket_factory);
|
||||||
|
|
|
@ -947,9 +947,12 @@ rtc_library("rtc_base") {
|
||||||
"../api:refcountedbase",
|
"../api:refcountedbase",
|
||||||
"../api:scoped_refptr",
|
"../api:scoped_refptr",
|
||||||
"../api:sequence_checker",
|
"../api:sequence_checker",
|
||||||
|
"../api:webrtc_key_value_config",
|
||||||
"../api/numerics",
|
"../api/numerics",
|
||||||
"../api/task_queue",
|
"../api/task_queue",
|
||||||
|
"../api/transport:field_trial_based_config",
|
||||||
"../system_wrappers:field_trial",
|
"../system_wrappers:field_trial",
|
||||||
|
"memory:always_valid_pointer",
|
||||||
"network:sent_packet",
|
"network:sent_packet",
|
||||||
"synchronization:mutex",
|
"synchronization:mutex",
|
||||||
"system:file_wrapper",
|
"system:file_wrapper",
|
||||||
|
@ -1230,6 +1233,8 @@ rtc_library("rtc_base_tests_utils") {
|
||||||
":threading",
|
":threading",
|
||||||
"../api/units:time_delta",
|
"../api/units:time_delta",
|
||||||
"../api/units:timestamp",
|
"../api/units:timestamp",
|
||||||
|
"../test:scoped_key_value_config",
|
||||||
|
"memory:always_valid_pointer",
|
||||||
"memory:fifo_buffer",
|
"memory:fifo_buffer",
|
||||||
"synchronization:mutex",
|
"synchronization:mutex",
|
||||||
"task_utils:to_queued_task",
|
"task_utils:to_queued_task",
|
||||||
|
@ -1546,6 +1551,7 @@ if (rtc_include_tests) {
|
||||||
"../test:field_trial",
|
"../test:field_trial",
|
||||||
"../test:fileutils",
|
"../test:fileutils",
|
||||||
"../test:rtc_expect_death",
|
"../test:rtc_expect_death",
|
||||||
|
"../test:scoped_key_value_config",
|
||||||
"../test:test_main",
|
"../test:test_main",
|
||||||
"../test:test_support",
|
"../test:test_support",
|
||||||
"memory:fifo_buffer",
|
"memory:fifo_buffer",
|
||||||
|
|
|
@ -41,6 +41,10 @@ class AlwaysValidPointer {
|
||||||
Interface* operator->() { return pointer_; }
|
Interface* operator->() { return pointer_; }
|
||||||
Interface& operator*() { return *pointer_; }
|
Interface& operator*() { return *pointer_; }
|
||||||
|
|
||||||
|
Interface* get() const { return pointer_; }
|
||||||
|
Interface* operator->() const { return pointer_; }
|
||||||
|
Interface& operator*() const { return *pointer_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::unique_ptr<Interface> owned_instance_;
|
const std::unique_ptr<Interface> owned_instance_;
|
||||||
Interface* const pointer_;
|
Interface* const pointer_;
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "rtc_base/thread.h"
|
#include "rtc_base/thread.h"
|
||||||
#include "rtc_base/virtual_socket_server.h"
|
#include "rtc_base/virtual_socket_server.h"
|
||||||
#include "test/gtest.h"
|
#include "test/gtest.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
namespace rtc {
|
namespace rtc {
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -219,8 +220,9 @@ bool TestConnectivity(const SocketAddress& src, const IPAddress& dst) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestPhysicalInternal(const SocketAddress& int_addr) {
|
void TestPhysicalInternal(const SocketAddress& int_addr) {
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials;
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager network_manager(nullptr, &socket_server);
|
BasicNetworkManager network_manager(nullptr, &socket_server, &field_trials);
|
||||||
network_manager.StartUpdating();
|
network_manager.StartUpdating();
|
||||||
// Process pending messages so the network list is updated.
|
// Process pending messages so the network list is updated.
|
||||||
Thread::Current()->ProcessMessages(0);
|
Thread::Current()->ProcessMessages(0);
|
||||||
|
|
|
@ -29,8 +29,10 @@
|
||||||
#include "absl/algorithm/container.h"
|
#include "absl/algorithm/container.h"
|
||||||
#include "absl/strings/match.h"
|
#include "absl/strings/match.h"
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
|
#include "api/transport/field_trial_based_config.h"
|
||||||
#include "rtc_base/checks.h"
|
#include "rtc_base/checks.h"
|
||||||
#include "rtc_base/logging.h"
|
#include "rtc_base/logging.h"
|
||||||
|
#include "rtc_base/memory/always_valid_pointer.h"
|
||||||
#include "rtc_base/network_monitor.h"
|
#include "rtc_base/network_monitor.h"
|
||||||
#include "rtc_base/socket.h" // includes something that makes windows happy
|
#include "rtc_base/socket.h" // includes something that makes windows happy
|
||||||
#include "rtc_base/string_encode.h"
|
#include "rtc_base/string_encode.h"
|
||||||
|
@ -38,7 +40,6 @@
|
||||||
#include "rtc_base/strings/string_builder.h"
|
#include "rtc_base/strings/string_builder.h"
|
||||||
#include "rtc_base/task_utils/to_queued_task.h"
|
#include "rtc_base/task_utils/to_queued_task.h"
|
||||||
#include "rtc_base/thread.h"
|
#include "rtc_base/thread.h"
|
||||||
#include "system_wrappers/include/field_trial.h"
|
|
||||||
|
|
||||||
namespace rtc {
|
namespace rtc {
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -280,10 +281,13 @@ webrtc::MdnsResponderInterface* NetworkManager::GetMdnsResponder() const {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkManagerBase::NetworkManagerBase()
|
NetworkManagerBase::NetworkManagerBase(
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
: enumeration_permission_(NetworkManager::ENUMERATION_ALLOWED),
|
: enumeration_permission_(NetworkManager::ENUMERATION_ALLOWED),
|
||||||
signal_network_preference_change_(webrtc::field_trial::IsEnabled(
|
signal_network_preference_change_(
|
||||||
"WebRTC-SignalNetworkPreferenceChange")) {}
|
field_trials
|
||||||
|
? field_trials->IsEnabled("WebRTC-SignalNetworkPreferenceChange")
|
||||||
|
: false) {}
|
||||||
|
|
||||||
NetworkManagerBase::~NetworkManagerBase() {
|
NetworkManagerBase::~NetworkManagerBase() {
|
||||||
for (const auto& kv : networks_map_) {
|
for (const auto& kv : networks_map_) {
|
||||||
|
@ -508,25 +512,17 @@ bool NetworkManagerBase::IsVpnMacAddress(
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BasicNetworkManager::BasicNetworkManager()
|
|
||||||
: BasicNetworkManager(nullptr, nullptr) {}
|
|
||||||
|
|
||||||
BasicNetworkManager::BasicNetworkManager(SocketFactory* socket_factory)
|
|
||||||
: BasicNetworkManager(nullptr, socket_factory) {}
|
|
||||||
|
|
||||||
BasicNetworkManager::BasicNetworkManager(
|
|
||||||
NetworkMonitorFactory* network_monitor_factory)
|
|
||||||
: BasicNetworkManager(network_monitor_factory, nullptr) {}
|
|
||||||
|
|
||||||
BasicNetworkManager::BasicNetworkManager(
|
BasicNetworkManager::BasicNetworkManager(
|
||||||
NetworkMonitorFactory* network_monitor_factory,
|
NetworkMonitorFactory* network_monitor_factory,
|
||||||
SocketFactory* socket_factory)
|
SocketFactory* socket_factory,
|
||||||
: network_monitor_factory_(network_monitor_factory),
|
const webrtc::WebRtcKeyValueConfig* field_trials)
|
||||||
|
: field_trials_(field_trials),
|
||||||
|
network_monitor_factory_(network_monitor_factory),
|
||||||
socket_factory_(socket_factory),
|
socket_factory_(socket_factory),
|
||||||
allow_mac_based_ipv6_(
|
allow_mac_based_ipv6_(
|
||||||
webrtc::field_trial::IsEnabled("WebRTC-AllowMACBasedIPv6")),
|
field_trials_->IsEnabled("WebRTC-AllowMACBasedIPv6")),
|
||||||
bind_using_ifname_(
|
bind_using_ifname_(
|
||||||
!webrtc::field_trial::IsDisabled("WebRTC-BindUsingInterfaceName")) {}
|
!field_trials_->IsDisabled("WebRTC-BindUsingInterfaceName")) {}
|
||||||
|
|
||||||
BasicNetworkManager::~BasicNetworkManager() {
|
BasicNetworkManager::~BasicNetworkManager() {
|
||||||
if (task_safety_flag_) {
|
if (task_safety_flag_) {
|
||||||
|
@ -936,7 +932,8 @@ void BasicNetworkManager::StartNetworkMonitor() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!network_monitor_) {
|
if (!network_monitor_) {
|
||||||
network_monitor_.reset(network_monitor_factory_->CreateNetworkMonitor());
|
network_monitor_.reset(
|
||||||
|
network_monitor_factory_->CreateNetworkMonitor(*field_trials_));
|
||||||
if (!network_monitor_) {
|
if (!network_monitor_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1057,24 +1054,6 @@ NetworkBindingResult BasicNetworkManager::BindSocketToNetwork(
|
||||||
return network_monitor_->BindSocketToNetwork(socket_fd, address, if_name);
|
return network_monitor_->BindSocketToNetwork(socket_fd, address, if_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
Network::Network(absl::string_view name,
|
|
||||||
absl::string_view desc,
|
|
||||||
const IPAddress& prefix,
|
|
||||||
int prefix_length)
|
|
||||||
: name_(name),
|
|
||||||
description_(desc),
|
|
||||||
prefix_(prefix),
|
|
||||||
prefix_length_(prefix_length),
|
|
||||||
key_(MakeNetworkKey(name, prefix, prefix_length)),
|
|
||||||
scope_id_(0),
|
|
||||||
ignored_(false),
|
|
||||||
type_(ADAPTER_TYPE_UNKNOWN),
|
|
||||||
preference_(0),
|
|
||||||
use_differentiated_cellular_costs_(webrtc::field_trial::IsEnabled(
|
|
||||||
"WebRTC-UseDifferentiatedCellularCosts")),
|
|
||||||
add_network_cost_to_vpn_(
|
|
||||||
webrtc::field_trial::IsEnabled("WebRTC-AddNetworkCostToVpn")) {}
|
|
||||||
|
|
||||||
Network::Network(absl::string_view name,
|
Network::Network(absl::string_view name,
|
||||||
absl::string_view desc,
|
absl::string_view desc,
|
||||||
const IPAddress& prefix,
|
const IPAddress& prefix,
|
||||||
|
@ -1088,11 +1067,7 @@ Network::Network(absl::string_view name,
|
||||||
scope_id_(0),
|
scope_id_(0),
|
||||||
ignored_(false),
|
ignored_(false),
|
||||||
type_(type),
|
type_(type),
|
||||||
preference_(0),
|
preference_(0) {}
|
||||||
use_differentiated_cellular_costs_(webrtc::field_trial::IsEnabled(
|
|
||||||
"WebRTC-UseDifferentiatedCellularCosts")),
|
|
||||||
add_network_cost_to_vpn_(
|
|
||||||
webrtc::field_trial::IsEnabled("WebRTC-AddNetworkCostToVpn")) {}
|
|
||||||
|
|
||||||
Network::Network(const Network&) = default;
|
Network::Network(const Network&) = default;
|
||||||
|
|
||||||
|
@ -1162,11 +1137,23 @@ webrtc::MdnsResponderInterface* Network::GetMdnsResponder() const {
|
||||||
return mdns_responder_provider_->GetMdnsResponder();
|
return mdns_responder_provider_->GetMdnsResponder();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t Network::GetCost() const {
|
uint16_t Network::GetCost(
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials) const {
|
||||||
|
return GetCost(
|
||||||
|
*webrtc::AlwaysValidPointer<const webrtc::WebRtcKeyValueConfig,
|
||||||
|
webrtc::FieldTrialBasedConfig>(field_trials));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t Network::GetCost(
|
||||||
|
const webrtc::WebRtcKeyValueConfig& field_trials) const {
|
||||||
AdapterType type = IsVpn() ? underlying_type_for_vpn_ : type_;
|
AdapterType type = IsVpn() ? underlying_type_for_vpn_ : type_;
|
||||||
|
const bool use_differentiated_cellular_costs =
|
||||||
|
field_trials.IsEnabled("WebRTC-UseDifferentiatedCellularCosts");
|
||||||
|
const bool add_network_cost_to_vpn =
|
||||||
|
field_trials.IsEnabled("WebRTC-AddNetworkCostToVpn");
|
||||||
return ComputeNetworkCostByType(type, IsVpn(),
|
return ComputeNetworkCostByType(type, IsVpn(),
|
||||||
use_differentiated_cellular_costs_,
|
use_differentiated_cellular_costs,
|
||||||
add_network_cost_to_vpn_);
|
add_network_cost_to_vpn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the inverse of ComputeNetworkCostByType().
|
// This is the inverse of ComputeNetworkCostByType().
|
||||||
|
|
|
@ -22,8 +22,11 @@
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "api/array_view.h"
|
#include "api/array_view.h"
|
||||||
#include "api/sequence_checker.h"
|
#include "api/sequence_checker.h"
|
||||||
|
#include "api/transport/field_trial_based_config.h"
|
||||||
|
#include "api/webrtc_key_value_config.h"
|
||||||
#include "rtc_base/ip_address.h"
|
#include "rtc_base/ip_address.h"
|
||||||
#include "rtc_base/mdns_responder_interface.h"
|
#include "rtc_base/mdns_responder_interface.h"
|
||||||
|
#include "rtc_base/memory/always_valid_pointer.h"
|
||||||
#include "rtc_base/network_monitor.h"
|
#include "rtc_base/network_monitor.h"
|
||||||
#include "rtc_base/network_monitor_factory.h"
|
#include "rtc_base/network_monitor_factory.h"
|
||||||
#include "rtc_base/socket_factory.h"
|
#include "rtc_base/socket_factory.h"
|
||||||
|
@ -205,7 +208,8 @@ class RTC_EXPORT NetworkManager : public DefaultLocalAddressProvider,
|
||||||
// Base class for NetworkManager implementations.
|
// Base class for NetworkManager implementations.
|
||||||
class RTC_EXPORT NetworkManagerBase : public NetworkManager {
|
class RTC_EXPORT NetworkManagerBase : public NetworkManager {
|
||||||
public:
|
public:
|
||||||
NetworkManagerBase();
|
NetworkManagerBase(
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr);
|
||||||
~NetworkManagerBase() override;
|
~NetworkManagerBase() override;
|
||||||
|
|
||||||
void GetNetworks(NetworkList* networks) const override;
|
void GetNetworks(NetworkList* networks) const override;
|
||||||
|
@ -273,15 +277,28 @@ class RTC_EXPORT BasicNetworkManager : public NetworkManagerBase,
|
||||||
public NetworkBinderInterface,
|
public NetworkBinderInterface,
|
||||||
public sigslot::has_slots<> {
|
public sigslot::has_slots<> {
|
||||||
public:
|
public:
|
||||||
|
// This version is used by chromium.
|
||||||
ABSL_DEPRECATED(
|
ABSL_DEPRECATED(
|
||||||
"Use the version with socket_factory, see bugs.webrtc.org/13145")
|
"Use the version with socket_factory, see bugs.webrtc.org/13145")
|
||||||
BasicNetworkManager();
|
explicit BasicNetworkManager(
|
||||||
explicit BasicNetworkManager(SocketFactory* socket_factory);
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr)
|
||||||
ABSL_DEPRECATED(
|
: BasicNetworkManager(
|
||||||
"Use the version with socket_factory, see bugs.webrtc.org/13145")
|
/* network_monitor_factory= */ nullptr,
|
||||||
explicit BasicNetworkManager(NetworkMonitorFactory* network_monitor_factory);
|
/* socket_factory= */ nullptr,
|
||||||
BasicNetworkManager(NetworkMonitorFactory* network_monitor_factory,
|
field_trials) {}
|
||||||
SocketFactory* socket_factory);
|
|
||||||
|
// This is used by lots of downstream code.
|
||||||
|
BasicNetworkManager(
|
||||||
|
SocketFactory* socket_factory,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr)
|
||||||
|
: BasicNetworkManager(/* network_monitor_factory= */ nullptr,
|
||||||
|
socket_factory,
|
||||||
|
field_trials) {}
|
||||||
|
|
||||||
|
BasicNetworkManager(
|
||||||
|
NetworkMonitorFactory* network_monitor_factory,
|
||||||
|
SocketFactory* socket_factory,
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr);
|
||||||
~BasicNetworkManager() override;
|
~BasicNetworkManager() override;
|
||||||
|
|
||||||
void StartUpdating() override;
|
void StartUpdating() override;
|
||||||
|
@ -354,6 +371,10 @@ class RTC_EXPORT BasicNetworkManager : public NetworkManagerBase,
|
||||||
Thread* thread_ = nullptr;
|
Thread* thread_ = nullptr;
|
||||||
bool sent_first_update_ = true;
|
bool sent_first_update_ = true;
|
||||||
int start_count_ = 0;
|
int start_count_ = 0;
|
||||||
|
// Chromium create BasicNetworkManager() w/o field trials.
|
||||||
|
webrtc::AlwaysValidPointer<const webrtc::WebRtcKeyValueConfig,
|
||||||
|
webrtc::FieldTrialBasedConfig>
|
||||||
|
field_trials_;
|
||||||
std::vector<std::string> network_ignore_list_;
|
std::vector<std::string> network_ignore_list_;
|
||||||
NetworkMonitorFactory* const network_monitor_factory_;
|
NetworkMonitorFactory* const network_monitor_factory_;
|
||||||
SocketFactory* const socket_factory_;
|
SocketFactory* const socket_factory_;
|
||||||
|
@ -372,13 +393,19 @@ class RTC_EXPORT Network {
|
||||||
Network(absl::string_view name,
|
Network(absl::string_view name,
|
||||||
absl::string_view description,
|
absl::string_view description,
|
||||||
const IPAddress& prefix,
|
const IPAddress& prefix,
|
||||||
int prefix_length);
|
int prefix_length)
|
||||||
|
: Network(name,
|
||||||
|
description,
|
||||||
|
prefix,
|
||||||
|
prefix_length,
|
||||||
|
rtc::ADAPTER_TYPE_UNKNOWN) {}
|
||||||
|
|
||||||
Network(absl::string_view name,
|
Network(absl::string_view name,
|
||||||
absl::string_view description,
|
absl::string_view description,
|
||||||
const IPAddress& prefix,
|
const IPAddress& prefix,
|
||||||
int prefix_length,
|
int prefix_length,
|
||||||
AdapterType type);
|
AdapterType type);
|
||||||
|
|
||||||
Network(const Network&);
|
Network(const Network&);
|
||||||
~Network();
|
~Network();
|
||||||
|
|
||||||
|
@ -515,7 +542,16 @@ class RTC_EXPORT Network {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t GetCost() const;
|
// Note: This function is called "rarely".
|
||||||
|
// Twice per Network in BasicPortAllocator if
|
||||||
|
// PORTALLOCATOR_DISABLE_COSTLY_NETWORKS. Once in Port::Construct() (and when
|
||||||
|
// Port::OnNetworkTypeChanged is called).
|
||||||
|
ABSL_DEPRECATED(
|
||||||
|
"Use the version with field trials, see bugs.webrtc.org/webrtc:10335")
|
||||||
|
uint16_t GetCost(
|
||||||
|
const webrtc::WebRtcKeyValueConfig* field_trials = nullptr) const;
|
||||||
|
uint16_t GetCost(const webrtc::WebRtcKeyValueConfig& field_trials) const;
|
||||||
|
|
||||||
// A unique id assigned by the network manager, which may be signaled
|
// A unique id assigned by the network manager, which may be signaled
|
||||||
// to the remote side in the candidate.
|
// to the remote side in the candidate.
|
||||||
uint16_t id() const { return id_; }
|
uint16_t id() const { return id_; }
|
||||||
|
@ -567,8 +603,6 @@ class RTC_EXPORT Network {
|
||||||
int preference_;
|
int preference_;
|
||||||
bool active_ = true;
|
bool active_ = true;
|
||||||
uint16_t id_ = 0;
|
uint16_t id_ = 0;
|
||||||
bool use_differentiated_cellular_costs_ = false;
|
|
||||||
bool add_network_cost_to_vpn_ = false;
|
|
||||||
NetworkPreference network_preference_ = NetworkPreference::NEUTRAL;
|
NetworkPreference network_preference_ = NetworkPreference::NEUTRAL;
|
||||||
|
|
||||||
friend class NetworkManager;
|
friend class NetworkManager;
|
||||||
|
|
|
@ -11,6 +11,10 @@
|
||||||
#ifndef RTC_BASE_NETWORK_MONITOR_FACTORY_H_
|
#ifndef RTC_BASE_NETWORK_MONITOR_FACTORY_H_
|
||||||
#define RTC_BASE_NETWORK_MONITOR_FACTORY_H_
|
#define RTC_BASE_NETWORK_MONITOR_FACTORY_H_
|
||||||
|
|
||||||
|
namespace webrtc {
|
||||||
|
class WebRtcKeyValueConfig;
|
||||||
|
} // namespace webrtc
|
||||||
|
|
||||||
namespace rtc {
|
namespace rtc {
|
||||||
|
|
||||||
// Forward declaring this so it's not part of the API surface; it's only
|
// Forward declaring this so it's not part of the API surface; it's only
|
||||||
|
@ -24,7 +28,8 @@ class NetworkMonitorInterface;
|
||||||
*/
|
*/
|
||||||
class NetworkMonitorFactory {
|
class NetworkMonitorFactory {
|
||||||
public:
|
public:
|
||||||
virtual NetworkMonitorInterface* CreateNetworkMonitor() = 0;
|
virtual NetworkMonitorInterface* CreateNetworkMonitor(
|
||||||
|
const webrtc::WebRtcKeyValueConfig& field_trials) = 0;
|
||||||
|
|
||||||
virtual ~NetworkMonitorFactory();
|
virtual ~NetworkMonitorFactory();
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "rtc_base/logging.h" // For RTC_LOG_GLE
|
#include "rtc_base/logging.h" // For RTC_LOG_GLE
|
||||||
#endif
|
#endif
|
||||||
#include "test/field_trial.h"
|
#include "test/field_trial.h"
|
||||||
|
#include "test/scoped_key_value_config.h"
|
||||||
|
|
||||||
using ::testing::Contains;
|
using ::testing::Contains;
|
||||||
using ::testing::Not;
|
using ::testing::Not;
|
||||||
|
@ -121,7 +122,8 @@ class FakeNetworkMonitor : public NetworkMonitorInterface {
|
||||||
class FakeNetworkMonitorFactory : public NetworkMonitorFactory {
|
class FakeNetworkMonitorFactory : public NetworkMonitorFactory {
|
||||||
public:
|
public:
|
||||||
FakeNetworkMonitorFactory() {}
|
FakeNetworkMonitorFactory() {}
|
||||||
NetworkMonitorInterface* CreateNetworkMonitor() override {
|
NetworkMonitorInterface* CreateNetworkMonitor(
|
||||||
|
const webrtc::WebRtcKeyValueConfig& field_trials) override {
|
||||||
return new FakeNetworkMonitor();
|
return new FakeNetworkMonitor();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -309,14 +311,18 @@ class NetworkTest : public ::testing::Test, public sigslot::has_slots<> {
|
||||||
#endif // defined(WEBRTC_POSIX)
|
#endif // defined(WEBRTC_POSIX)
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials_;
|
||||||
bool callback_called_;
|
bool callback_called_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TestBasicNetworkManager : public BasicNetworkManager {
|
class TestBasicNetworkManager : public BasicNetworkManager {
|
||||||
public:
|
public:
|
||||||
TestBasicNetworkManager(NetworkMonitorFactory* network_monitor_factory,
|
TestBasicNetworkManager(NetworkMonitorFactory* network_monitor_factory,
|
||||||
SocketFactory* socket_factory)
|
SocketFactory* socket_factory,
|
||||||
: BasicNetworkManager(network_monitor_factory, socket_factory) {}
|
const webrtc::WebRtcKeyValueConfig& field_trials)
|
||||||
|
: BasicNetworkManager(network_monitor_factory,
|
||||||
|
socket_factory,
|
||||||
|
&field_trials) {}
|
||||||
using BasicNetworkManager::QueryDefaultLocalAddress;
|
using BasicNetworkManager::QueryDefaultLocalAddress;
|
||||||
using BasicNetworkManager::set_default_local_addresses;
|
using BasicNetworkManager::set_default_local_addresses;
|
||||||
};
|
};
|
||||||
|
@ -404,7 +410,7 @@ TEST_F(NetworkTest, DISABLED_TestCreateNetworks) {
|
||||||
// ALLOWED.
|
// ALLOWED.
|
||||||
TEST_F(NetworkTest, TestUpdateNetworks) {
|
TEST_F(NetworkTest, TestUpdateNetworks) {
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager manager(nullptr, &socket_server);
|
BasicNetworkManager manager(nullptr, &socket_server, &field_trials_);
|
||||||
manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
|
manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
|
||||||
&NetworkTest::OnNetworksChanged);
|
&NetworkTest::OnNetworksChanged);
|
||||||
EXPECT_EQ(NetworkManager::ENUMERATION_ALLOWED,
|
EXPECT_EQ(NetworkManager::ENUMERATION_ALLOWED,
|
||||||
|
@ -798,7 +804,7 @@ TEST_F(NetworkTest, IPv6NetworksPreferredOverIPv4) {
|
||||||
// to be preference-ordered by name. For example, "eth0" before "eth1".
|
// to be preference-ordered by name. For example, "eth0" before "eth1".
|
||||||
TEST_F(NetworkTest, NetworksSortedByInterfaceName) {
|
TEST_F(NetworkTest, NetworksSortedByInterfaceName) {
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager manager(&socket_server);
|
BasicNetworkManager manager(&socket_server, &field_trials_);
|
||||||
Network* eth0 = new Network("test_eth0", "Test Network Adapter 1",
|
Network* eth0 = new Network("test_eth0", "Test Network Adapter 1",
|
||||||
IPAddress(0x65432100U), 24);
|
IPAddress(0x65432100U), 24);
|
||||||
eth0->AddIP(IPAddress(0x65432100U));
|
eth0->AddIP(IPAddress(0x65432100U));
|
||||||
|
@ -896,7 +902,8 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNetworkMonitor) {
|
||||||
std::string ipv6_address = "1000:2000:3000:4000:0:0:0:1";
|
std::string ipv6_address = "1000:2000:3000:4000:0:0:0:1";
|
||||||
std::string ipv6_mask = "FFFF:FFFF:FFFF:FFFF::";
|
std::string ipv6_mask = "FFFF:FFFF:FFFF:FFFF::";
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager manager_without_monitor(nullptr, &socket_server);
|
BasicNetworkManager manager_without_monitor(nullptr, &socket_server,
|
||||||
|
&field_trials_);
|
||||||
manager_without_monitor.StartUpdating();
|
manager_without_monitor.StartUpdating();
|
||||||
// A network created without a network monitor will get UNKNOWN type.
|
// A network created without a network monitor will get UNKNOWN type.
|
||||||
ifaddrs* addr_list = InstallIpv6Network(if_name, ipv6_address, ipv6_mask,
|
ifaddrs* addr_list = InstallIpv6Network(if_name, ipv6_address, ipv6_mask,
|
||||||
|
@ -906,7 +913,8 @@ TEST_F(NetworkTest, TestGetAdapterTypeFromNetworkMonitor) {
|
||||||
|
|
||||||
// With the fake network monitor the type should be correctly determined.
|
// With the fake network monitor the type should be correctly determined.
|
||||||
FakeNetworkMonitorFactory factory;
|
FakeNetworkMonitorFactory factory;
|
||||||
BasicNetworkManager manager_with_monitor(&factory, &socket_server);
|
BasicNetworkManager manager_with_monitor(&factory, &socket_server,
|
||||||
|
&field_trials_);
|
||||||
manager_with_monitor.StartUpdating();
|
manager_with_monitor.StartUpdating();
|
||||||
// Add the same ipv6 address as before but it has the right network type
|
// Add the same ipv6 address as before but it has the right network type
|
||||||
// detected by the network monitor now.
|
// detected by the network monitor now.
|
||||||
|
@ -1004,7 +1012,7 @@ TEST_F(NetworkTest, TestNetworkMonitorIsAdapterAvailable) {
|
||||||
// Sanity check that both interfaces are included by default.
|
// Sanity check that both interfaces are included by default.
|
||||||
FakeNetworkMonitorFactory factory;
|
FakeNetworkMonitorFactory factory;
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager manager(&factory, &socket_server);
|
BasicNetworkManager manager(&factory, &socket_server, &field_trials_);
|
||||||
manager.StartUpdating();
|
manager.StartUpdating();
|
||||||
CallConvertIfAddrs(manager, list, /*include_ignored=*/false, &result);
|
CallConvertIfAddrs(manager, list, /*include_ignored=*/false, &result);
|
||||||
EXPECT_EQ(2u, result.size());
|
EXPECT_EQ(2u, result.size());
|
||||||
|
@ -1151,7 +1159,7 @@ TEST_F(NetworkTest, TestIPv6Selection) {
|
||||||
TEST_F(NetworkTest, TestNetworkMonitoring) {
|
TEST_F(NetworkTest, TestNetworkMonitoring) {
|
||||||
FakeNetworkMonitorFactory factory;
|
FakeNetworkMonitorFactory factory;
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager manager(&factory, &socket_server);
|
BasicNetworkManager manager(&factory, &socket_server, &field_trials_);
|
||||||
manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
|
manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
|
||||||
&NetworkTest::OnNetworksChanged);
|
&NetworkTest::OnNetworksChanged);
|
||||||
manager.StartUpdating();
|
manager.StartUpdating();
|
||||||
|
@ -1182,7 +1190,7 @@ TEST_F(NetworkTest, MAYBE_DefaultLocalAddress) {
|
||||||
IPAddress ip;
|
IPAddress ip;
|
||||||
FakeNetworkMonitorFactory factory;
|
FakeNetworkMonitorFactory factory;
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
TestBasicNetworkManager manager(&factory, &socket_server);
|
TestBasicNetworkManager manager(&factory, &socket_server, field_trials_);
|
||||||
manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
|
manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
|
||||||
&NetworkTest::OnNetworksChanged);
|
&NetworkTest::OnNetworksChanged);
|
||||||
manager.StartUpdating();
|
manager.StartUpdating();
|
||||||
|
@ -1358,7 +1366,7 @@ TEST_F(NetworkTest, WebRTC_BindUsingInterfaceName) {
|
||||||
// Sanity check that both interfaces are included by default.
|
// Sanity check that both interfaces are included by default.
|
||||||
FakeNetworkMonitorFactory factory;
|
FakeNetworkMonitorFactory factory;
|
||||||
PhysicalSocketServer socket_server;
|
PhysicalSocketServer socket_server;
|
||||||
BasicNetworkManager manager(&factory, &socket_server);
|
BasicNetworkManager manager(&factory, &socket_server, &field_trials_);
|
||||||
manager.StartUpdating();
|
manager.StartUpdating();
|
||||||
CallConvertIfAddrs(manager, list, /*include_ignored=*/false, &result);
|
CallConvertIfAddrs(manager, list, /*include_ignored=*/false, &result);
|
||||||
EXPECT_EQ(2u, result.size());
|
EXPECT_EQ(2u, result.size());
|
||||||
|
@ -1390,6 +1398,7 @@ TEST_F(NetworkTest, WebRTC_BindUsingInterfaceName) {
|
||||||
TEST_F(NetworkTest, NetworkCostVpn_Default) {
|
TEST_F(NetworkTest, NetworkCostVpn_Default) {
|
||||||
IPAddress ip1;
|
IPAddress ip1;
|
||||||
EXPECT_TRUE(IPFromString("2400:4030:1:2c00:be30:0:0:1", &ip1));
|
EXPECT_TRUE(IPFromString("2400:4030:1:2c00:be30:0:0:1", &ip1));
|
||||||
|
webrtc::test::ScopedKeyValueConfig field_trials;
|
||||||
|
|
||||||
Network* net1 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
|
Network* net1 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
|
||||||
net1->set_type(ADAPTER_TYPE_VPN);
|
net1->set_type(ADAPTER_TYPE_VPN);
|
||||||
|
@ -1398,13 +1407,13 @@ TEST_F(NetworkTest, NetworkCostVpn_Default) {
|
||||||
Network* net2 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
|
Network* net2 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
|
||||||
net2->set_type(ADAPTER_TYPE_ETHERNET);
|
net2->set_type(ADAPTER_TYPE_ETHERNET);
|
||||||
|
|
||||||
EXPECT_EQ(net1->GetCost(), net2->GetCost());
|
EXPECT_EQ(net1->GetCost(field_trials), net2->GetCost(field_trials));
|
||||||
delete net1;
|
delete net1;
|
||||||
delete net2;
|
delete net2;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(NetworkTest, NetworkCostVpn_VpnMoreExpensive) {
|
TEST_F(NetworkTest, NetworkCostVpn_VpnMoreExpensive) {
|
||||||
webrtc::test::ScopedFieldTrials field_trials(
|
webrtc::test::ScopedKeyValueConfig field_trials(
|
||||||
"WebRTC-AddNetworkCostToVpn/Enabled/");
|
"WebRTC-AddNetworkCostToVpn/Enabled/");
|
||||||
|
|
||||||
IPAddress ip1;
|
IPAddress ip1;
|
||||||
|
@ -1417,13 +1426,13 @@ TEST_F(NetworkTest, NetworkCostVpn_VpnMoreExpensive) {
|
||||||
Network* net2 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
|
Network* net2 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
|
||||||
net2->set_type(ADAPTER_TYPE_ETHERNET);
|
net2->set_type(ADAPTER_TYPE_ETHERNET);
|
||||||
|
|
||||||
EXPECT_GT(net1->GetCost(), net2->GetCost());
|
EXPECT_GT(net1->GetCost(field_trials), net2->GetCost(field_trials));
|
||||||
delete net1;
|
delete net1;
|
||||||
delete net2;
|
delete net2;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(NetworkTest, GuessAdapterFromNetworkCost) {
|
TEST_F(NetworkTest, GuessAdapterFromNetworkCost) {
|
||||||
webrtc::test::ScopedFieldTrials field_trials(
|
webrtc::test::ScopedKeyValueConfig field_trials(
|
||||||
"WebRTC-AddNetworkCostToVpn/Enabled/"
|
"WebRTC-AddNetworkCostToVpn/Enabled/"
|
||||||
"WebRTC-UseDifferentiatedCellularCosts/Enabled/");
|
"WebRTC-UseDifferentiatedCellularCosts/Enabled/");
|
||||||
|
|
||||||
|
@ -1435,7 +1444,8 @@ TEST_F(NetworkTest, GuessAdapterFromNetworkCost) {
|
||||||
continue;
|
continue;
|
||||||
Network net1("em1", "em1", TruncateIP(ip1, 64), 64);
|
Network net1("em1", "em1", TruncateIP(ip1, 64), 64);
|
||||||
net1.set_type(type);
|
net1.set_type(type);
|
||||||
auto [guess, vpn] = Network::GuessAdapterFromNetworkCost(net1.GetCost());
|
auto [guess, vpn] =
|
||||||
|
Network::GuessAdapterFromNetworkCost(net1.GetCost(field_trials));
|
||||||
EXPECT_FALSE(vpn);
|
EXPECT_FALSE(vpn);
|
||||||
if (type == rtc::ADAPTER_TYPE_LOOPBACK) {
|
if (type == rtc::ADAPTER_TYPE_LOOPBACK) {
|
||||||
EXPECT_EQ(guess, rtc::ADAPTER_TYPE_ETHERNET);
|
EXPECT_EQ(guess, rtc::ADAPTER_TYPE_ETHERNET);
|
||||||
|
@ -1451,7 +1461,8 @@ TEST_F(NetworkTest, GuessAdapterFromNetworkCost) {
|
||||||
Network net1("em1", "em1", TruncateIP(ip1, 64), 64);
|
Network net1("em1", "em1", TruncateIP(ip1, 64), 64);
|
||||||
net1.set_type(rtc::ADAPTER_TYPE_VPN);
|
net1.set_type(rtc::ADAPTER_TYPE_VPN);
|
||||||
net1.set_underlying_type_for_vpn(type);
|
net1.set_underlying_type_for_vpn(type);
|
||||||
auto [guess, vpn] = Network::GuessAdapterFromNetworkCost(net1.GetCost());
|
auto [guess, vpn] =
|
||||||
|
Network::GuessAdapterFromNetworkCost(net1.GetCost(field_trials));
|
||||||
EXPECT_TRUE(vpn);
|
EXPECT_TRUE(vpn);
|
||||||
if (type == rtc::ADAPTER_TYPE_LOOPBACK) {
|
if (type == rtc::ADAPTER_TYPE_LOOPBACK) {
|
||||||
EXPECT_EQ(guess, rtc::ADAPTER_TYPE_ETHERNET);
|
EXPECT_EQ(guess, rtc::ADAPTER_TYPE_ETHERNET);
|
||||||
|
|
|
@ -1585,6 +1585,7 @@ if (is_ios || is_mac) {
|
||||||
":network_monitor_objc",
|
":network_monitor_objc",
|
||||||
":network_monitor_observer",
|
":network_monitor_observer",
|
||||||
"../api:sequence_checker",
|
"../api:sequence_checker",
|
||||||
|
"../api:webrtc_key_value_config",
|
||||||
"../rtc_base",
|
"../rtc_base",
|
||||||
"../rtc_base:threading",
|
"../rtc_base:threading",
|
||||||
"../rtc_base/task_utils:pending_task_safety_flag",
|
"../rtc_base/task_utils:pending_task_safety_flag",
|
||||||
|
|
|
@ -582,6 +582,7 @@ if (current_os == "linux" || is_android) {
|
||||||
"../../api:libjingle_peerconnection_api",
|
"../../api:libjingle_peerconnection_api",
|
||||||
"../../api:scoped_refptr",
|
"../../api:scoped_refptr",
|
||||||
"../../api:sequence_checker",
|
"../../api:sequence_checker",
|
||||||
|
"../../api:webrtc_key_value_config",
|
||||||
"../../rtc_base",
|
"../../rtc_base",
|
||||||
"../../rtc_base:checks",
|
"../../rtc_base:checks",
|
||||||
"../../rtc_base:ip_address",
|
"../../rtc_base:ip_address",
|
||||||
|
|
|
@ -577,7 +577,8 @@ AndroidNetworkMonitorFactory::AndroidNetworkMonitorFactory(
|
||||||
AndroidNetworkMonitorFactory::~AndroidNetworkMonitorFactory() = default;
|
AndroidNetworkMonitorFactory::~AndroidNetworkMonitorFactory() = default;
|
||||||
|
|
||||||
rtc::NetworkMonitorInterface*
|
rtc::NetworkMonitorInterface*
|
||||||
AndroidNetworkMonitorFactory::CreateNetworkMonitor() {
|
AndroidNetworkMonitorFactory::CreateNetworkMonitor(
|
||||||
|
const WebRtcKeyValueConfig& field_trials) {
|
||||||
return new AndroidNetworkMonitor(AttachCurrentThreadIfNeeded(),
|
return new AndroidNetworkMonitor(AttachCurrentThreadIfNeeded(),
|
||||||
j_application_context_);
|
j_application_context_);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "absl/types/optional.h"
|
#include "absl/types/optional.h"
|
||||||
|
#include "api/webrtc_key_value_config.h"
|
||||||
#include "rtc_base/network_monitor.h"
|
#include "rtc_base/network_monitor.h"
|
||||||
#include "rtc_base/network_monitor_factory.h"
|
#include "rtc_base/network_monitor_factory.h"
|
||||||
#include "rtc_base/string_utils.h"
|
#include "rtc_base/string_utils.h"
|
||||||
|
@ -165,7 +166,8 @@ class AndroidNetworkMonitorFactory : public rtc::NetworkMonitorFactory {
|
||||||
|
|
||||||
~AndroidNetworkMonitorFactory() override;
|
~AndroidNetworkMonitorFactory() override;
|
||||||
|
|
||||||
rtc::NetworkMonitorInterface* CreateNetworkMonitor() override;
|
rtc::NetworkMonitorInterface* CreateNetworkMonitor(
|
||||||
|
const WebRtcKeyValueConfig& field_trials) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ScopedJavaGlobalRef<jobject> j_application_context_;
|
ScopedJavaGlobalRef<jobject> j_application_context_;
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include "absl/strings/string_view.h"
|
#include "absl/strings/string_view.h"
|
||||||
#include "api/sequence_checker.h"
|
#include "api/sequence_checker.h"
|
||||||
|
#include "api/webrtc_key_value_config.h"
|
||||||
#include "rtc_base/network_monitor.h"
|
#include "rtc_base/network_monitor.h"
|
||||||
#include "rtc_base/network_monitor_factory.h"
|
#include "rtc_base/network_monitor_factory.h"
|
||||||
#include "rtc_base/string_utils.h"
|
#include "rtc_base/string_utils.h"
|
||||||
|
@ -31,7 +32,8 @@ class ObjCNetworkMonitorFactory : public rtc::NetworkMonitorFactory {
|
||||||
ObjCNetworkMonitorFactory() = default;
|
ObjCNetworkMonitorFactory() = default;
|
||||||
~ObjCNetworkMonitorFactory() override = default;
|
~ObjCNetworkMonitorFactory() override = default;
|
||||||
|
|
||||||
rtc::NetworkMonitorInterface* CreateNetworkMonitor() override;
|
rtc::NetworkMonitorInterface* CreateNetworkMonitor(
|
||||||
|
const WebRtcKeyValueConfig& field_trials) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObjCNetworkMonitor : public rtc::NetworkMonitorInterface,
|
class ObjCNetworkMonitor : public rtc::NetworkMonitorInterface,
|
||||||
|
|
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
rtc::NetworkMonitorInterface* ObjCNetworkMonitorFactory::CreateNetworkMonitor() {
|
rtc::NetworkMonitorInterface* ObjCNetworkMonitorFactory::CreateNetworkMonitor(
|
||||||
|
const WebRtcKeyValueConfig& field_trials) {
|
||||||
return new ObjCNetworkMonitor();
|
return new ObjCNetworkMonitor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ rtc_library("emulated_network") {
|
||||||
"../../api:sequence_checker",
|
"../../api:sequence_checker",
|
||||||
"../../api:simulated_network_api",
|
"../../api:simulated_network_api",
|
||||||
"../../api:time_controller",
|
"../../api:time_controller",
|
||||||
|
"../../api:webrtc_key_value_config",
|
||||||
"../../api/numerics",
|
"../../api/numerics",
|
||||||
"../../api/test/network_emulation",
|
"../../api/test/network_emulation",
|
||||||
"../../api/transport:stun_types",
|
"../../api/transport:stun_types",
|
||||||
|
@ -67,11 +68,13 @@ rtc_library("emulated_network") {
|
||||||
"../../rtc_base:stringutils",
|
"../../rtc_base:stringutils",
|
||||||
"../../rtc_base:task_queue_for_test",
|
"../../rtc_base:task_queue_for_test",
|
||||||
"../../rtc_base:threading",
|
"../../rtc_base:threading",
|
||||||
|
"../../rtc_base/memory:always_valid_pointer",
|
||||||
"../../rtc_base/synchronization:mutex",
|
"../../rtc_base/synchronization:mutex",
|
||||||
"../../rtc_base/task_utils:pending_task_safety_flag",
|
"../../rtc_base/task_utils:pending_task_safety_flag",
|
||||||
"../../rtc_base/task_utils:repeating_task",
|
"../../rtc_base/task_utils:repeating_task",
|
||||||
"../../rtc_base/task_utils:to_queued_task",
|
"../../rtc_base/task_utils:to_queued_task",
|
||||||
"../../system_wrappers",
|
"../../system_wrappers",
|
||||||
|
"../../test:scoped_key_value_config",
|
||||||
"../scenario:column_printer",
|
"../scenario:column_printer",
|
||||||
"../time_controller",
|
"../time_controller",
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue