Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Unified Diff: webrtc/base/network.h

Issue 1411253008: WebRTC should generate default private address even when adapter enumeration is disabled. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: rename set_default_private_address to set_default_local_address Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/base/network.h
diff --git a/webrtc/base/network.h b/webrtc/base/network.h
index ab3a88dc7dc0c4dd511d5da7aee4b7c035975657..94cf366afcb41bc46e3b487274f07120de321960 100644
--- a/webrtc/base/network.h
+++ b/webrtc/base/network.h
@@ -28,6 +28,9 @@ struct ifaddrs;
namespace rtc {
+extern const char kPublicIPv4Host[];
+extern const char kPublicIPv6Host[];
+
class Network;
class NetworkMonitorInterface;
class Thread;
@@ -51,9 +54,17 @@ const int kDefaultNetworkIgnoreMask = ADAPTER_TYPE_LOOPBACK;
std::string MakeNetworkKey(const std::string& name, const IPAddress& prefix,
int prefix_length);
+class DefaultAddressProvider {
pthatcher1 2015/11/10 18:52:34 The DefaultAddressProvider has a GetDefaultLocalAd
guoweis_webrtc 2015/11/10 20:37:29 Done.
+ public:
+ virtual ~DefaultAddressProvider() = default;
+ // Default local address is the interface used to route to public internet on
+ // a multi-homed endpoint.
pthatcher1 2015/11/10 18:52:34 This could be more clear. Perhaps "The default lo
guoweis_webrtc 2015/11/10 20:37:29 Done.
pthatcher1 2015/11/10 21:29:01 It doesn't appear changed.
+ virtual bool GetDefaultLocalAddress(int family, IPAddress* ipaddr) const = 0;
pthatcher1 2015/11/10 18:52:34 Would this be more simple as GetDefaultLocalAddres
guoweis_webrtc 2015/11/10 20:37:29 I like returning a bool which makes the caller to
+};
+
// Generic network manager interface. It provides list of local
// networks.
-class NetworkManager {
+class NetworkManager : public DefaultAddressProvider {
public:
typedef std::vector<Network*> NetworkList;
@@ -67,7 +78,7 @@ class NetworkManager {
};
NetworkManager();
- virtual ~NetworkManager();
+ ~NetworkManager() override;
// Called when network list is updated.
sigslot::signal0<> SignalNetworksChanged;
@@ -99,6 +110,8 @@ class NetworkManager {
// TODO(guoweis): remove this body when chromium implements this.
virtual void GetAnyAddressNetworks(NetworkList* networks) {}
+ bool GetDefaultLocalAddress(int family, IPAddress* ipaddr) const override;
+
// Dumps a list of networks available to LS_INFO.
virtual void DumpNetworks(bool include_ignored) {}
@@ -128,6 +141,8 @@ class NetworkManagerBase : public NetworkManager {
EnumerationPermission enumeration_permission() const override;
+ bool GetDefaultLocalAddress(int family, IPAddress* ipaddr) const override;
+
protected:
typedef std::map<std::string, Network*> NetworkMap;
// Updates |networks_| with the networks listed in |list|. If
@@ -146,6 +161,8 @@ class NetworkManagerBase : public NetworkManager {
enumeration_permission_ = state;
}
+ void set_default_local_address(const IPAddress& ip);
pthatcher1 2015/11/10 18:52:34 This is kind of awkward that we have a "set_foo" w
guoweis_webrtc 2015/11/10 20:37:29 Done.
+
private:
friend class NetworkTest;
@@ -159,6 +176,9 @@ class NetworkManagerBase : public NetworkManager {
rtc::scoped_ptr<rtc::Network> ipv4_any_address_network_;
rtc::scoped_ptr<rtc::Network> ipv6_any_address_network_;
+
+ IPAddress default_ipv4_address_;
+ IPAddress default_ipv6_address_;
pthatcher1 2015/11/10 18:52:34 To be consistent, this should be default_local_ipX
guoweis_webrtc 2015/11/10 20:37:29 Done.
};
// Basic implementation of the NetworkManager interface that gets list
@@ -220,6 +240,8 @@ class BasicNetworkManager : public NetworkManagerBase,
// based on the network's property instead of any individual IP.
bool IsIgnoredNetwork(const Network& network) const;
+ IPAddress QueryDefaultAddress(int family) const;
pthatcher1 2015/11/10 18:52:34 This could use a comment to make clear the differe
guoweis_webrtc 2015/11/10 20:37:29 Done.
+
private:
friend class NetworkTest;
@@ -247,13 +269,23 @@ class BasicNetworkManager : public NetworkManagerBase,
// Represents a Unix-type network interface, with a name and single address.
class Network {
public:
- Network(const std::string& name, const std::string& description,
- const IPAddress& prefix, int prefix_length);
-
- Network(const std::string& name, const std::string& description,
- const IPAddress& prefix, int prefix_length, AdapterType type);
+ Network(const std::string& name,
+ const std::string& description,
+ const IPAddress& prefix,
+ int prefix_length);
+
+ Network(const std::string& name,
+ const std::string& description,
+ const IPAddress& prefix,
+ int prefix_length,
+ AdapterType type);
~Network();
+ const DefaultAddressProvider* default_address_provider() { return provider_; }
pthatcher1 2015/11/10 18:52:34 Between Network and DefaultAddressProvider, you em
guoweis_webrtc 2015/11/10 20:37:29 This is to reflect the fact that a single network
+ void set_default_address_provider(const DefaultAddressProvider* provider) {
+ provider_ = provider;
+ }
+
// Returns the name of the interface this network is associated wtih.
const std::string& name() const { return name_; }
@@ -323,6 +355,7 @@ class Network {
std::string ToString() const;
private:
+ const DefaultAddressProvider* provider_ = nullptr;
pthatcher1 2015/11/10 18:52:34 To be consistent, this should be default_address_p
guoweis_webrtc 2015/11/10 20:37:29 Done.
std::string name_;
std::string description_;
IPAddress prefix_;
« no previous file with comments | « webrtc/base/ipaddress.cc ('k') | webrtc/base/network.cc » ('j') | webrtc/base/network.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698