Chromium Code Reviews| 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_; |