Index: webrtc/base/network.h |
diff --git a/webrtc/base/network.h b/webrtc/base/network.h |
index ab3a88dc7dc0c4dd511d5da7aee4b7c035975657..a2753a51755bd6305a9f11c5406fe53219f7342e 100644 |
--- a/webrtc/base/network.h |
+++ b/webrtc/base/network.h |
@@ -28,6 +28,9 @@ struct ifaddrs; |
namespace rtc { |
+extern char kPublicIPv4Host[]; |
juberti
2015/10/28 23:57:40
Do these need to be exported? They seem like imple
guoweis_webrtc
2015/10/29 03:41:00
I made them exported so chrome could use the same
|
+extern char kPublicIPv6Host[]; |
+ |
class Network; |
class NetworkMonitorInterface; |
class Thread; |
@@ -51,9 +54,16 @@ const int kDefaultNetworkIgnoreMask = ADAPTER_TYPE_LOOPBACK; |
std::string MakeNetworkKey(const std::string& name, const IPAddress& prefix, |
int prefix_length); |
+class DefaultAddressProvider { |
+ public: |
+ virtual ~DefaultAddressProvider() = default; |
+ virtual bool GetDefaultPrivateAddress(int family, |
juberti
2015/10/28 23:57:40
The address may not be private. Perhaps GetDefault
guoweis_webrtc
2015/10/29 03:41:00
Done.
|
+ IPAddress* ipaddr) const = 0; |
+}; |
+ |
// Generic network manager interface. It provides list of local |
// networks. |
-class NetworkManager { |
+class NetworkManager : public DefaultAddressProvider { |
public: |
typedef std::vector<Network*> NetworkList; |
@@ -67,7 +77,7 @@ class NetworkManager { |
}; |
NetworkManager(); |
- virtual ~NetworkManager(); |
+ ~NetworkManager() override; |
// Called when network list is updated. |
sigslot::signal0<> SignalNetworksChanged; |
@@ -99,6 +109,8 @@ class NetworkManager { |
// TODO(guoweis): remove this body when chromium implements this. |
virtual void GetAnyAddressNetworks(NetworkList* networks) {} |
+ bool GetDefaultPrivateAddress(int family, IPAddress* ipaddr) const override; |
+ |
// Dumps a list of networks available to LS_INFO. |
virtual void DumpNetworks(bool include_ignored) {} |
@@ -128,6 +140,8 @@ class NetworkManagerBase : public NetworkManager { |
EnumerationPermission enumeration_permission() const override; |
+ bool GetDefaultPrivateAddress(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 +160,8 @@ class NetworkManagerBase : public NetworkManager { |
enumeration_permission_ = state; |
} |
+ void set_default_private_address(const IPAddress& ip); |
+ |
private: |
friend class NetworkTest; |
@@ -159,6 +175,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_; |
}; |
// Basic implementation of the NetworkManager interface that gets list |
@@ -220,6 +239,8 @@ class BasicNetworkManager : public NetworkManagerBase, |
// based on the network's property instead of any individual IP. |
bool IsIgnoredNetwork(const Network& network) const; |
+ IPAddress UpdateDefaultPrivateAddress(int family); |
+ |
private: |
friend class NetworkTest; |
@@ -247,13 +268,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_; } |
+ 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 +354,7 @@ class Network { |
std::string ToString() const; |
private: |
+ const DefaultAddressProvider* provider_ = nullptr; |
std::string name_; |
std::string description_; |
IPAddress prefix_; |