| Index: webrtc/base/network.h
|
| diff --git a/webrtc/base/network.h b/webrtc/base/network.h
|
| index ab3a88dc7dc0c4dd511d5da7aee4b7c035975657..3cdc1253a1fd464d4b020f502a9b58dd43a48c93 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 DefaultLocalAddressProvider {
|
| + public:
|
| + virtual ~DefaultLocalAddressProvider() = default;
|
| + // Default local address is the interface used to route to public internet on
|
| + // a multi-homed endpoint.
|
| + virtual bool GetDefaultLocalAddress(int family, IPAddress* ipaddr) const = 0;
|
| +};
|
| +
|
| // Generic network manager interface. It provides list of local
|
| // networks.
|
| -class NetworkManager {
|
| +class NetworkManager : public DefaultLocalAddressProvider {
|
| 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,9 @@ class NetworkManagerBase : public NetworkManager {
|
| enumeration_permission_ = state;
|
| }
|
|
|
| + void set_default_local_addresses(const IPAddress& ipv4,
|
| + const IPAddress& ipv6);
|
| +
|
| private:
|
| friend class NetworkTest;
|
|
|
| @@ -159,6 +177,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_local_ipv4_address_;
|
| + IPAddress default_local_ipv6_address_;
|
| };
|
|
|
| // Basic implementation of the NetworkManager interface that gets list
|
| @@ -220,6 +241,11 @@ class BasicNetworkManager : public NetworkManagerBase,
|
| // based on the network's property instead of any individual IP.
|
| bool IsIgnoredNetwork(const Network& network) const;
|
|
|
| + // This function connects a UDP socket to a public address and returns the
|
| + // local address associated it. Since it binds to the "any" address
|
| + // internally, it returns the default local address on a multi-homed endpoint.
|
| + IPAddress QueryDefaultLocalAddress(int family) const;
|
| +
|
| private:
|
| friend class NetworkTest;
|
|
|
| @@ -247,13 +273,26 @@ 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 DefaultLocalAddressProvider* default_local_address_provider() {
|
| + return default_local_address_provider_;
|
| + }
|
| + void set_default_local_address_provider(
|
| + const DefaultLocalAddressProvider* provider) {
|
| + default_local_address_provider_ = provider;
|
| + }
|
| +
|
| // Returns the name of the interface this network is associated wtih.
|
| const std::string& name() const { return name_; }
|
|
|
| @@ -323,6 +362,7 @@ class Network {
|
| std::string ToString() const;
|
|
|
| private:
|
| + const DefaultLocalAddressProvider* default_local_address_provider_ = nullptr;
|
| std::string name_;
|
| std::string description_;
|
| IPAddress prefix_;
|
|
|