Use a provider in rtc::Network to access the mDNS responder.
Bug: chromium:930339 Change-Id: I42c22f4417f2f12b606bb9791edc074561c78518 Reviewed-on: https://webrtc-review.googlesource.com/c/122680 Commit-Queue: Qingsi Wang <qingsi@google.com> Reviewed-by: Steve Anton <steveanton@webrtc.org> Reviewed-by: Sergey Ulanov <sergeyu@chromium.org> Cr-Commit-Position: refs/heads/master@{#26674}
This commit is contained in:
parent
616b233688
commit
5ae259ee4f
@ -283,8 +283,8 @@ void NetworkManagerBase::GetAnyAddressNetworks(NetworkList* networks) {
|
||||
ipv4_any_address_network_.reset(
|
||||
new rtc::Network("any", "any", ipv4_any_address, 0, ADAPTER_TYPE_ANY));
|
||||
ipv4_any_address_network_->set_default_local_address_provider(this);
|
||||
ipv4_any_address_network_->set_mdns_responder_provider(this);
|
||||
ipv4_any_address_network_->AddIP(ipv4_any_address);
|
||||
ipv4_any_address_network_->SetMdnsResponder(GetMdnsResponder());
|
||||
}
|
||||
networks->push_back(ipv4_any_address_network_.get());
|
||||
|
||||
@ -293,8 +293,8 @@ void NetworkManagerBase::GetAnyAddressNetworks(NetworkList* networks) {
|
||||
ipv6_any_address_network_.reset(
|
||||
new rtc::Network("any", "any", ipv6_any_address, 0, ADAPTER_TYPE_ANY));
|
||||
ipv6_any_address_network_->set_default_local_address_provider(this);
|
||||
ipv6_any_address_network_->set_mdns_responder_provider(this);
|
||||
ipv6_any_address_network_->AddIP(ipv6_any_address);
|
||||
ipv6_any_address_network_->SetMdnsResponder(GetMdnsResponder());
|
||||
}
|
||||
networks->push_back(ipv6_any_address_network_.get());
|
||||
}
|
||||
@ -383,7 +383,7 @@ void NetworkManagerBase::MergeNetworkList(const NetworkList& new_networks,
|
||||
delete net;
|
||||
}
|
||||
}
|
||||
networks_map_[key]->SetMdnsResponder(GetMdnsResponder());
|
||||
networks_map_[key]->set_mdns_responder_provider(this);
|
||||
}
|
||||
// It may still happen that the merged list is a subset of |networks_|.
|
||||
// To detect this change, we compare their sizes.
|
||||
@ -739,6 +739,7 @@ bool BasicNetworkManager::CreateNetworks(bool include_ignored,
|
||||
std::unique_ptr<Network> network(new Network(
|
||||
name, description, prefix, prefix_length, adapter_type));
|
||||
network->set_default_local_address_provider(this);
|
||||
network->set_mdns_responder_provider(this);
|
||||
network->set_scope_id(scope_id);
|
||||
network->AddIP(ip);
|
||||
bool ignored = IsIgnoredNetwork(*network);
|
||||
@ -1049,6 +1050,13 @@ IPAddress Network::GetBestIP() const {
|
||||
return static_cast<IPAddress>(selected_ip);
|
||||
}
|
||||
|
||||
webrtc::MdnsResponderInterface* Network::GetMdnsResponder() const {
|
||||
if (mdns_responder_provider_ == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
return mdns_responder_provider_->GetMdnsResponder();
|
||||
}
|
||||
|
||||
uint16_t Network::GetCost() const {
|
||||
AdapterType type = IsVpn() ? underlying_type_for_vpn_ : type_;
|
||||
return ComputeNetworkCostByType(type);
|
||||
|
||||
@ -57,12 +57,24 @@ AdapterType GetAdapterTypeFromName(const char* network_name);
|
||||
class DefaultLocalAddressProvider {
|
||||
public:
|
||||
virtual ~DefaultLocalAddressProvider() = default;
|
||||
|
||||
// The default local address is the local address used in multi-homed endpoint
|
||||
// when the any address (0.0.0.0 or ::) is used as the local address. It's
|
||||
// important to check the return value as a IP family may not be enabled.
|
||||
virtual bool GetDefaultLocalAddress(int family, IPAddress* ipaddr) const = 0;
|
||||
};
|
||||
|
||||
class MdnsResponderProvider {
|
||||
public:
|
||||
virtual ~MdnsResponderProvider() = default;
|
||||
|
||||
// Returns the mDNS responder that can be used to obfuscate the local IP
|
||||
// addresses of ICE host candidates by mDNS hostnames.
|
||||
//
|
||||
// The provider MUST outlive the mDNS responder.
|
||||
virtual webrtc::MdnsResponderInterface* GetMdnsResponder() const = 0;
|
||||
};
|
||||
|
||||
// Generic network manager interface. It provides list of local
|
||||
// networks.
|
||||
//
|
||||
@ -72,7 +84,8 @@ class DefaultLocalAddressProvider {
|
||||
//
|
||||
// This allows constructing a NetworkManager subclass on one thread and
|
||||
// passing it into an object that uses it on a different thread.
|
||||
class NetworkManager : public DefaultLocalAddressProvider {
|
||||
class NetworkManager : public DefaultLocalAddressProvider,
|
||||
public MdnsResponderProvider {
|
||||
public:
|
||||
typedef std::vector<Network*> NetworkList;
|
||||
|
||||
@ -139,9 +152,8 @@ class NetworkManager : public DefaultLocalAddressProvider {
|
||||
}
|
||||
};
|
||||
|
||||
// Returns the mDNS responder that can be used to obfuscate the local IP
|
||||
// addresses of ICE host candidates by mDNS hostnames.
|
||||
virtual webrtc::MdnsResponderInterface* GetMdnsResponder() const;
|
||||
// MdnsResponderProvider interface.
|
||||
webrtc::MdnsResponderInterface* GetMdnsResponder() const override;
|
||||
};
|
||||
|
||||
// Base class for NetworkManager implementations.
|
||||
@ -303,7 +315,11 @@ class Network {
|
||||
default_local_address_provider_ = provider;
|
||||
}
|
||||
|
||||
// Returns the name of the interface this network is associated wtih.
|
||||
void set_mdns_responder_provider(const MdnsResponderProvider* provider) {
|
||||
mdns_responder_provider_ = provider;
|
||||
}
|
||||
|
||||
// Returns the name of the interface this network is associated with.
|
||||
const std::string& name() const { return name_; }
|
||||
|
||||
// Returns the OS-assigned name for this network. This is useful for
|
||||
@ -322,7 +338,7 @@ class Network {
|
||||
// Returns the Network's current idea of the 'best' IP it has.
|
||||
// Or return an unset IP if this network has no active addresses.
|
||||
// Here is the rule on how we mark the IPv6 address as ignorable for WebRTC.
|
||||
// 1) return all global temporary dynamic and non-deprecrated ones.
|
||||
// 1) return all global temporary dynamic and non-deprecated ones.
|
||||
// 2) if #1 not available, return global ones.
|
||||
// 3) if #2 not available, use ULA ipv6 as last resort. (ULA stands
|
||||
// for unique local address, which is not route-able in open
|
||||
@ -354,19 +370,11 @@ class Network {
|
||||
const std::vector<InterfaceAddress>& GetIPs() const { return ips_; }
|
||||
// Clear the network's list of addresses.
|
||||
void ClearIPs() { ips_.clear(); }
|
||||
// Sets the mDNS responder that can be used to obfuscate the local IP
|
||||
// Returns the mDNS responder that can be used to obfuscate the local IP
|
||||
// addresses of host candidates by mDNS names in ICE gathering. After a
|
||||
// name-address mapping is created by the mDNS responder, queries for the
|
||||
// created name will be resolved by the responder.
|
||||
//
|
||||
// The mDNS responder, if not null, should outlive this rtc::Network.
|
||||
void SetMdnsResponder(webrtc::MdnsResponderInterface* mdns_responder) {
|
||||
mdns_responder_ = mdns_responder;
|
||||
}
|
||||
// Returns the mDNS responder, which is null by default.
|
||||
webrtc::MdnsResponderInterface* GetMdnsResponder() const {
|
||||
return mdns_responder_;
|
||||
}
|
||||
webrtc::MdnsResponderInterface* GetMdnsResponder() const;
|
||||
|
||||
// Returns the scope-id of the network's address.
|
||||
// Should only be relevant for link-local IPv6 addresses.
|
||||
@ -433,13 +441,13 @@ class Network {
|
||||
|
||||
private:
|
||||
const DefaultLocalAddressProvider* default_local_address_provider_ = nullptr;
|
||||
const MdnsResponderProvider* mdns_responder_provider_ = nullptr;
|
||||
std::string name_;
|
||||
std::string description_;
|
||||
IPAddress prefix_;
|
||||
int prefix_length_;
|
||||
std::string key_;
|
||||
std::vector<InterfaceAddress> ips_;
|
||||
webrtc::MdnsResponderInterface* mdns_responder_ = nullptr;
|
||||
int scope_id_;
|
||||
bool ignored_;
|
||||
AdapterType type_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user