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

Side by Side Diff: webrtc/base/network.cc

Issue 1976683003: Update the type and cost of existing networks if its type is found later by network monitor (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Minor changes Created 4 years, 7 months 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 unified diff | Download patch
« no previous file with comments | « webrtc/base/network.h ('k') | webrtc/base/network_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 net->set_id(next_available_network_id_++); 285 net->set_id(next_available_network_id_++);
286 // Also, we might have accumulated IPAddresses from the first 286 // Also, we might have accumulated IPAddresses from the first
287 // step, set it here. 287 // step, set it here.
288 net->SetIPs(kv.second.ips, true); 288 net->SetIPs(kv.second.ips, true);
289 *changed = true; 289 *changed = true;
290 } else { 290 } else {
291 // This network exists in the map already. Reset its IP addresses. 291 // This network exists in the map already. Reset its IP addresses.
292 Network* existing_net = existing->second; 292 Network* existing_net = existing->second;
293 *changed = existing_net->SetIPs(kv.second.ips, *changed); 293 *changed = existing_net->SetIPs(kv.second.ips, *changed);
294 merged_list.push_back(existing_net); 294 merged_list.push_back(existing_net);
295 if (net->type() != ADAPTER_TYPE_UNKNOWN &&
296 net->type() != existing_net->type()) {
297 existing_net->set_type(net->type());
298 *changed = true;
299 }
295 // If the existing network was not active, networks have changed. 300 // If the existing network was not active, networks have changed.
296 if (!existing_net->active()) { 301 if (!existing_net->active()) {
297 *changed = true; 302 *changed = true;
298 } 303 }
299 ASSERT(net->active()); 304 ASSERT(net->active());
300 if (existing_net != net) { 305 if (existing_net != net) {
301 delete net; 306 delete net;
302 } 307 }
303 } 308 }
304 } 309 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 392
388 BasicNetworkManager::BasicNetworkManager() 393 BasicNetworkManager::BasicNetworkManager()
389 : thread_(NULL), sent_first_update_(false), start_count_(0), 394 : thread_(NULL), sent_first_update_(false), start_count_(0),
390 ignore_non_default_routes_(false) { 395 ignore_non_default_routes_(false) {
391 } 396 }
392 397
393 BasicNetworkManager::~BasicNetworkManager() { 398 BasicNetworkManager::~BasicNetworkManager() {
394 } 399 }
395 400
396 void BasicNetworkManager::OnNetworksChanged() { 401 void BasicNetworkManager::OnNetworksChanged() {
397 LOG(LS_VERBOSE) << "Network change was observed at the network manager"; 402 LOG(LS_INFO) << "Network change was observed";
398 UpdateNetworksOnce(); 403 UpdateNetworksOnce();
399 } 404 }
400 405
401 #if defined(__native_client__) 406 #if defined(__native_client__)
402 407
403 bool BasicNetworkManager::CreateNetworks(bool include_ignored, 408 bool BasicNetworkManager::CreateNetworks(bool include_ignored,
404 NetworkList* networks) const { 409 NetworkList* networks) const {
405 ASSERT(false); 410 ASSERT(false);
406 LOG(LS_WARNING) << "BasicNetworkManager doesn't work on NaCl yet"; 411 LOG(LS_WARNING) << "BasicNetworkManager doesn't work on NaCl yet";
407 return false; 412 return false;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 450
446 // Special case for IPv6 address. 451 // Special case for IPv6 address.
447 if (cursor->ifa_addr->sa_family == AF_INET6) { 452 if (cursor->ifa_addr->sa_family == AF_INET6) {
448 if (IsIgnoredIPv6(ip)) { 453 if (IsIgnoredIPv6(ip)) {
449 continue; 454 continue;
450 } 455 }
451 scope_id = 456 scope_id =
452 reinterpret_cast<sockaddr_in6*>(cursor->ifa_addr)->sin6_scope_id; 457 reinterpret_cast<sockaddr_in6*>(cursor->ifa_addr)->sin6_scope_id;
453 } 458 }
454 459
460 AdapterType adapter_type = ADAPTER_TYPE_UNKNOWN;
461 if (cursor->ifa_flags & IFF_LOOPBACK) {
462 adapter_type = ADAPTER_TYPE_LOOPBACK;
463 } else {
464 adapter_type = GetAdapterTypeFromName(cursor->ifa_name);
465 }
455 int prefix_length = CountIPMaskBits(mask); 466 int prefix_length = CountIPMaskBits(mask);
456 prefix = TruncateIP(ip, prefix_length); 467 prefix = TruncateIP(ip, prefix_length);
457 std::string key = MakeNetworkKey(std::string(cursor->ifa_name), 468 std::string key = MakeNetworkKey(std::string(cursor->ifa_name),
458 prefix, prefix_length); 469 prefix, prefix_length);
459 auto existing_network = current_networks.find(key); 470 auto iter = current_networks.find(key);
460 if (existing_network == current_networks.end()) { 471 if (iter == current_networks.end()) {
461 AdapterType adapter_type = ADAPTER_TYPE_UNKNOWN;
462 if (cursor->ifa_flags & IFF_LOOPBACK) {
463 adapter_type = ADAPTER_TYPE_LOOPBACK;
464 } else if (network_monitor_) {
465 adapter_type = network_monitor_->GetAdapterType(cursor->ifa_name);
466 }
467 #if defined(WEBRTC_IOS)
468 // Cell networks are pdp_ipN on iOS.
469 if (strncmp(cursor->ifa_name, "pdp_ip", 6) == 0) {
470 adapter_type = ADAPTER_TYPE_CELLULAR;
471 }
472 #endif
473 // TODO(phoglund): Need to recognize other types as well. 472 // TODO(phoglund): Need to recognize other types as well.
474 std::unique_ptr<Network> network( 473 std::unique_ptr<Network> network(
475 new Network(cursor->ifa_name, cursor->ifa_name, prefix, prefix_length, 474 new Network(cursor->ifa_name, cursor->ifa_name, prefix, prefix_length,
476 adapter_type)); 475 adapter_type));
477 network->set_default_local_address_provider(this); 476 network->set_default_local_address_provider(this);
478 network->set_scope_id(scope_id); 477 network->set_scope_id(scope_id);
479 network->AddIP(ip); 478 network->AddIP(ip);
480 network->set_ignored(IsIgnoredNetwork(*network)); 479 network->set_ignored(IsIgnoredNetwork(*network));
481 if (include_ignored || !network->ignored()) { 480 if (include_ignored || !network->ignored()) {
482 current_networks[key] = network.get(); 481 current_networks[key] = network.get();
483 networks->push_back(network.release()); 482 networks->push_back(network.release());
484 } 483 }
485 } else { 484 } else {
486 (*existing_network).second->AddIP(ip); 485 Network* existing_network = iter->second;
486 existing_network->AddIP(ip);
487 if (adapter_type != ADAPTER_TYPE_UNKNOWN) {
488 existing_network->set_type(adapter_type);
489 }
487 } 490 }
488 } 491 }
489 } 492 }
490 493
491 bool BasicNetworkManager::CreateNetworks(bool include_ignored, 494 bool BasicNetworkManager::CreateNetworks(bool include_ignored,
492 NetworkList* networks) const { 495 NetworkList* networks) const {
493 struct ifaddrs* interfaces; 496 struct ifaddrs* interfaces;
494 int error = getifaddrs(&interfaces); 497 int error = getifaddrs(&interfaces);
495 if (error != 0) { 498 if (error != 0) {
496 LOG_ERR(LERROR) << "getifaddrs failed to gather interface data: " << error; 499 LOG_ERR(LERROR) << "getifaddrs failed to gather interface data: " << error;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 } 783 }
781 case kSignalNetworksMessage: { 784 case kSignalNetworksMessage: {
782 SignalNetworksChanged(); 785 SignalNetworksChanged();
783 break; 786 break;
784 } 787 }
785 default: 788 default:
786 ASSERT(false); 789 ASSERT(false);
787 } 790 }
788 } 791 }
789 792
793 AdapterType BasicNetworkManager::GetAdapterTypeFromName(
794 const char* network_name) const {
795 // If there is a network_monitor, use it to get the adapter type.
796 // Otherwise, get the adapter type based on a few name matching rules.
797 if (network_monitor_) {
798 AdapterType type = network_monitor_->GetAdapterType(network_name);
799 if (type != ADAPTER_TYPE_UNKNOWN) {
800 return type;
801 }
802 }
803 #if defined(WEBRTC_IOS)
804 // Cell networks are pdp_ipN on iOS.
805 if (strncmp(network_name, "pdp_ip", 6) == 0) {
806 return ADAPTER_TYPE_CELLULAR;
807 }
808 #elif defined(WEBRTC_ANDROID)
809 if (strncmp(network_name, "rmnet", 5) == 0 ||
810 strncmp(network_name, "v4-rmnet", 8) == 0) {
811 return ADAPTER_TYPE_CELLULAR;
812 }
813 if (strncmp(network_name, "wlan", 4) == 0) {
814 return ADAPTER_TYPE_WIFI;
815 }
816 #endif
817
818 return ADAPTER_TYPE_UNKNOWN;
819 }
820
790 IPAddress BasicNetworkManager::QueryDefaultLocalAddress(int family) const { 821 IPAddress BasicNetworkManager::QueryDefaultLocalAddress(int family) const {
791 ASSERT(thread_ == Thread::Current()); 822 ASSERT(thread_ == Thread::Current());
792 ASSERT(thread_->socketserver() != nullptr); 823 ASSERT(thread_->socketserver() != nullptr);
793 ASSERT(family == AF_INET || family == AF_INET6); 824 ASSERT(family == AF_INET || family == AF_INET6);
794 825
795 std::unique_ptr<AsyncSocket> socket( 826 std::unique_ptr<AsyncSocket> socket(
796 thread_->socketserver()->CreateAsyncSocket(family, SOCK_DGRAM)); 827 thread_->socketserver()->CreateAsyncSocket(family, SOCK_DGRAM));
797 if (!socket) { 828 if (!socket) {
798 LOG_ERR(LERROR) << "Socket creation failed"; 829 LOG_ERR(LERROR) << "Socket creation failed";
799 return IPAddress(); 830 return IPAddress();
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 std::stringstream ss; 969 std::stringstream ss;
939 // Print out the first space-terminated token of the network desc, plus 970 // Print out the first space-terminated token of the network desc, plus
940 // the IP address. 971 // the IP address.
941 ss << "Net[" << description_.substr(0, description_.find(' ')) 972 ss << "Net[" << description_.substr(0, description_.find(' '))
942 << ":" << prefix_.ToSensitiveString() << "/" << prefix_length_ 973 << ":" << prefix_.ToSensitiveString() << "/" << prefix_length_
943 << ":" << AdapterTypeToString(type_) << "]"; 974 << ":" << AdapterTypeToString(type_) << "]";
944 return ss.str(); 975 return ss.str();
945 } 976 }
946 977
947 } // namespace rtc 978 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/network.h ('k') | webrtc/base/network_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698