| Index: webrtc/base/network.cc
|
| diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc
|
| index 678541d0b11025b0d8e17023828cc479c000026b..9e4be58fcbf0d4c6170a57e54c5872020b071884 100644
|
| --- a/webrtc/base/network.cc
|
| +++ b/webrtc/base/network.cc
|
| @@ -129,6 +129,27 @@ std::string AdapterTypeToString(AdapterType type) {
|
| }
|
| }
|
|
|
| +AdapterType FromNetworkType(NetworkType network_type) {
|
| + switch (network_type) {
|
| + case NETWORK_UNKNOWN:
|
| + return ADAPTER_TYPE_UNKNOWN;
|
| + case NETWORK_ETHERNET:
|
| + return ADAPTER_TYPE_ETHERNET;
|
| + case NETWORK_WIFI:
|
| + return ADAPTER_TYPE_WIFI;
|
| + case NETWORK_4G:
|
| + case NETWORK_3G:
|
| + case NETWORK_2G:
|
| + return ADAPTER_TYPE_CELLULAR;
|
| + case NETWORK_BLUETOOTH:
|
| + case NETWORK_NONE:
|
| + return ADAPTER_TYPE_LOOPBACK;
|
| + default:
|
| + RTC_DCHECK(false) << "Invalid network type " << network_type;
|
| + return ADAPTER_TYPE_UNKNOWN;
|
| + }
|
| +}
|
| +
|
| bool IsIgnoredIPv6(const IPAddress& ip) {
|
| if (ip.family() != AF_INET6) {
|
| return false;
|
| @@ -355,6 +376,35 @@ bool NetworkManagerBase::GetDefaultLocalAddress(int family,
|
| return false;
|
| }
|
|
|
| +void BasicNetworkManager::GetAndUpdateNetworkInfos() {
|
| + std::vector<NetworkInformation> network_infos;
|
| + LOG(LS_INFO) << "start to get network info";
|
| + if (network_monitor_->GetAllNetworkInfos(&network_infos)) {
|
| + LOG(LS_INFO) << "done to get network info";
|
| + network_infos_.clear();
|
| + for (NetworkInformation& network_info : network_infos) {
|
| + network_infos_[network_info.interface_name] = network_info;
|
| + }
|
| + for (auto kv : networks_map()) {
|
| + UpdateNetworkInfo(kv.second);
|
| + }
|
| + LOG(LS_INFO) << "done to update network info";
|
| + }
|
| +}
|
| +
|
| +void BasicNetworkManager::UpdateNetworkInfo(Network* network) const {
|
| + auto it = network_infos_.find(network->name());
|
| + if (it != network_infos_.end()) {
|
| + const NetworkInformation& network_info = it->second;
|
| + network->set_handle(network_info.handle);
|
| + network->set_type(FromNetworkType(network_info.type));
|
| + LOG(LS_INFO) << "Set network " << network->ToString()
|
| + << " handle " << network->handle()
|
| + << " type " << network->type();
|
| + }
|
| +}
|
| +
|
| +
|
| BasicNetworkManager::BasicNetworkManager()
|
| : thread_(NULL), sent_first_update_(false), start_count_(0),
|
| network_ignore_mask_(kDefaultNetworkIgnoreMask),
|
| @@ -366,9 +416,21 @@ BasicNetworkManager::~BasicNetworkManager() {
|
|
|
| void BasicNetworkManager::OnNetworksChanged() {
|
| LOG(LS_VERBOSE) << "Network change was observed at the network manager";
|
| + std::vector<NetworkInformation> network_infos;
|
| +
|
| UpdateNetworksOnce();
|
| }
|
|
|
| +void BasicNetworkManager::OnNetworkAvailable(const NetworkInformation& network_info) {
|
| + LOG(LS_VERBOSE) << "Network available at network manager: " << network_info.interface_name;
|
| + ASSERT(Thread::Current() == thread_);
|
| + network_infos_[network_info.interface_name] = network_info;
|
| + // Only need to update one.
|
| + for (auto kv : networks_map()) {
|
| + UpdateNetworkInfo(kv.second);
|
| + }
|
| +}
|
| +
|
| #if defined(__native_client__)
|
|
|
| bool BasicNetworkManager::CreateNetworks(bool include_ignored,
|
| @@ -449,6 +511,7 @@ void BasicNetworkManager::ConvertIfAddrs(struct ifaddrs* interfaces,
|
| network->set_scope_id(scope_id);
|
| network->AddIP(ip);
|
| network->set_ignored(IsIgnoredNetwork(*network));
|
| + UpdateNetworkInfo(network.get());
|
| if (include_ignored || !network->ignored()) {
|
| networks->push_back(network.release());
|
| }
|
| @@ -727,9 +790,14 @@ void BasicNetworkManager::StartNetworkMonitor() {
|
| if (!network_monitor_) {
|
| return;
|
| }
|
| +
|
| network_monitor_->SignalNetworksChanged.connect(
|
| this, &BasicNetworkManager::OnNetworksChanged);
|
| + network_monitor_->SignalNetworkAvailable.connect(
|
| + this, &BasicNetworkManager::OnNetworkAvailable);
|
| network_monitor_->Start();
|
| +
|
| + GetAndUpdateNetworkInfos();
|
| }
|
|
|
| void BasicNetworkManager::StopNetworkMonitor() {
|
| @@ -740,6 +808,7 @@ void BasicNetworkManager::StopNetworkMonitor() {
|
| network_monitor_.reset();
|
| }
|
|
|
| +
|
| void BasicNetworkManager::OnMessage(Message* msg) {
|
| switch (msg->message_id) {
|
| case kUpdateNetworksMessage: {
|
|
|