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

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

Issue 1535943004: Multi-networking with Android L. Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years 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/networkmonitor.h » ('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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 case ADAPTER_TYPE_VPN: 122 case ADAPTER_TYPE_VPN:
123 return "VPN"; 123 return "VPN";
124 case ADAPTER_TYPE_LOOPBACK: 124 case ADAPTER_TYPE_LOOPBACK:
125 return "Loopback"; 125 return "Loopback";
126 default: 126 default:
127 RTC_DCHECK(false) << "Invalid type " << type; 127 RTC_DCHECK(false) << "Invalid type " << type;
128 return std::string(); 128 return std::string();
129 } 129 }
130 } 130 }
131 131
132 AdapterType FromNetworkType(NetworkType network_type) {
133 switch (network_type) {
134 case NETWORK_UNKNOWN:
135 return ADAPTER_TYPE_UNKNOWN;
136 case NETWORK_ETHERNET:
137 return ADAPTER_TYPE_ETHERNET;
138 case NETWORK_WIFI:
139 return ADAPTER_TYPE_WIFI;
140 case NETWORK_4G:
141 case NETWORK_3G:
142 case NETWORK_2G:
143 return ADAPTER_TYPE_CELLULAR;
144 case NETWORK_BLUETOOTH:
145 case NETWORK_NONE:
146 return ADAPTER_TYPE_LOOPBACK;
147 default:
148 RTC_DCHECK(false) << "Invalid network type " << network_type;
149 return ADAPTER_TYPE_UNKNOWN;
150 }
151 }
152
132 bool IsIgnoredIPv6(const IPAddress& ip) { 153 bool IsIgnoredIPv6(const IPAddress& ip) {
133 if (ip.family() != AF_INET6) { 154 if (ip.family() != AF_INET6) {
134 return false; 155 return false;
135 } 156 }
136 157
137 // Link-local addresses require scope id to be bound successfully. 158 // Link-local addresses require scope id to be bound successfully.
138 // However, our IPAddress structure doesn't carry that so the 159 // However, our IPAddress structure doesn't carry that so the
139 // information is lost and causes binding failure. 160 // information is lost and causes binding failure.
140 if (IPIsLinkLocal(ip)) { 161 if (IPIsLinkLocal(ip)) {
141 return true; 162 return true;
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 if (family == AF_INET && !default_local_ipv4_address_.IsNil()) { 369 if (family == AF_INET && !default_local_ipv4_address_.IsNil()) {
349 *ipaddr = default_local_ipv4_address_; 370 *ipaddr = default_local_ipv4_address_;
350 return true; 371 return true;
351 } else if (family == AF_INET6 && !default_local_ipv6_address_.IsNil()) { 372 } else if (family == AF_INET6 && !default_local_ipv6_address_.IsNil()) {
352 *ipaddr = default_local_ipv6_address_; 373 *ipaddr = default_local_ipv6_address_;
353 return true; 374 return true;
354 } 375 }
355 return false; 376 return false;
356 } 377 }
357 378
379 void BasicNetworkManager::GetAndUpdateNetworkInfos() {
380 std::vector<NetworkInformation> network_infos;
381 LOG(LS_INFO) << "start to get network info";
382 if (network_monitor_->GetAllNetworkInfos(&network_infos)) {
383 LOG(LS_INFO) << "done to get network info";
384 network_infos_.clear();
385 for (NetworkInformation& network_info : network_infos) {
386 network_infos_[network_info.interface_name] = network_info;
387 }
388 for (auto kv : networks_map()) {
389 UpdateNetworkInfo(kv.second);
390 }
391 LOG(LS_INFO) << "done to update network info";
392 }
393 }
394
395 void BasicNetworkManager::UpdateNetworkInfo(Network* network) const {
396 auto it = network_infos_.find(network->name());
397 if (it != network_infos_.end()) {
398 const NetworkInformation& network_info = it->second;
399 network->set_handle(network_info.handle);
400 network->set_type(FromNetworkType(network_info.type));
401 LOG(LS_INFO) << "Set network " << network->ToString()
402 << " handle " << network->handle()
403 << " type " << network->type();
404 }
405 }
406
407
358 BasicNetworkManager::BasicNetworkManager() 408 BasicNetworkManager::BasicNetworkManager()
359 : thread_(NULL), sent_first_update_(false), start_count_(0), 409 : thread_(NULL), sent_first_update_(false), start_count_(0),
360 network_ignore_mask_(kDefaultNetworkIgnoreMask), 410 network_ignore_mask_(kDefaultNetworkIgnoreMask),
361 ignore_non_default_routes_(false) { 411 ignore_non_default_routes_(false) {
362 } 412 }
363 413
364 BasicNetworkManager::~BasicNetworkManager() { 414 BasicNetworkManager::~BasicNetworkManager() {
365 } 415 }
366 416
367 void BasicNetworkManager::OnNetworksChanged() { 417 void BasicNetworkManager::OnNetworksChanged() {
368 LOG(LS_VERBOSE) << "Network change was observed at the network manager"; 418 LOG(LS_VERBOSE) << "Network change was observed at the network manager";
419 std::vector<NetworkInformation> network_infos;
420
369 UpdateNetworksOnce(); 421 UpdateNetworksOnce();
370 } 422 }
371 423
424 void BasicNetworkManager::OnNetworkAvailable(const NetworkInformation& network_i nfo) {
425 LOG(LS_VERBOSE) << "Network available at network manager: " << network_info.in terface_name;
426 ASSERT(Thread::Current() == thread_);
427 network_infos_[network_info.interface_name] = network_info;
428 // Only need to update one.
429 for (auto kv : networks_map()) {
430 UpdateNetworkInfo(kv.second);
431 }
432 }
433
372 #if defined(__native_client__) 434 #if defined(__native_client__)
373 435
374 bool BasicNetworkManager::CreateNetworks(bool include_ignored, 436 bool BasicNetworkManager::CreateNetworks(bool include_ignored,
375 NetworkList* networks) const { 437 NetworkList* networks) const {
376 ASSERT(false); 438 ASSERT(false);
377 LOG(LS_WARNING) << "BasicNetworkManager doesn't work on NaCl yet"; 439 LOG(LS_WARNING) << "BasicNetworkManager doesn't work on NaCl yet";
378 return false; 440 return false;
379 } 441 }
380 442
381 #elif defined(WEBRTC_POSIX) 443 #elif defined(WEBRTC_POSIX)
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 } 504 }
443 #endif 505 #endif
444 // TODO(phoglund): Need to recognize other types as well. 506 // TODO(phoglund): Need to recognize other types as well.
445 scoped_ptr<Network> network(new Network(cursor->ifa_name, 507 scoped_ptr<Network> network(new Network(cursor->ifa_name,
446 cursor->ifa_name, prefix, 508 cursor->ifa_name, prefix,
447 prefix_length, adapter_type)); 509 prefix_length, adapter_type));
448 network->set_default_local_address_provider(this); 510 network->set_default_local_address_provider(this);
449 network->set_scope_id(scope_id); 511 network->set_scope_id(scope_id);
450 network->AddIP(ip); 512 network->AddIP(ip);
451 network->set_ignored(IsIgnoredNetwork(*network)); 513 network->set_ignored(IsIgnoredNetwork(*network));
514 UpdateNetworkInfo(network.get());
452 if (include_ignored || !network->ignored()) { 515 if (include_ignored || !network->ignored()) {
453 networks->push_back(network.release()); 516 networks->push_back(network.release());
454 } 517 }
455 } else { 518 } else {
456 (*existing_network).second->AddIP(ip); 519 (*existing_network).second->AddIP(ip);
457 } 520 }
458 } 521 }
459 } 522 }
460 523
461 bool BasicNetworkManager::CreateNetworks(bool include_ignored, 524 bool BasicNetworkManager::CreateNetworks(bool include_ignored,
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 783
721 void BasicNetworkManager::StartNetworkMonitor() { 784 void BasicNetworkManager::StartNetworkMonitor() {
722 NetworkMonitorFactory* factory = NetworkMonitorFactory::GetFactory(); 785 NetworkMonitorFactory* factory = NetworkMonitorFactory::GetFactory();
723 if (factory == nullptr) { 786 if (factory == nullptr) {
724 return; 787 return;
725 } 788 }
726 network_monitor_.reset(factory->CreateNetworkMonitor()); 789 network_monitor_.reset(factory->CreateNetworkMonitor());
727 if (!network_monitor_) { 790 if (!network_monitor_) {
728 return; 791 return;
729 } 792 }
793
730 network_monitor_->SignalNetworksChanged.connect( 794 network_monitor_->SignalNetworksChanged.connect(
731 this, &BasicNetworkManager::OnNetworksChanged); 795 this, &BasicNetworkManager::OnNetworksChanged);
796 network_monitor_->SignalNetworkAvailable.connect(
797 this, &BasicNetworkManager::OnNetworkAvailable);
732 network_monitor_->Start(); 798 network_monitor_->Start();
799
800 GetAndUpdateNetworkInfos();
733 } 801 }
734 802
735 void BasicNetworkManager::StopNetworkMonitor() { 803 void BasicNetworkManager::StopNetworkMonitor() {
736 if (!network_monitor_) { 804 if (!network_monitor_) {
737 return; 805 return;
738 } 806 }
739 network_monitor_->Stop(); 807 network_monitor_->Stop();
740 network_monitor_.reset(); 808 network_monitor_.reset();
741 } 809 }
742 810
811
743 void BasicNetworkManager::OnMessage(Message* msg) { 812 void BasicNetworkManager::OnMessage(Message* msg) {
744 switch (msg->message_id) { 813 switch (msg->message_id) {
745 case kUpdateNetworksMessage: { 814 case kUpdateNetworksMessage: {
746 UpdateNetworksContinually(); 815 UpdateNetworksContinually();
747 break; 816 break;
748 } 817 }
749 case kSignalNetworksMessage: { 818 case kSignalNetworksMessage: {
750 SignalNetworksChanged(); 819 SignalNetworksChanged();
751 break; 820 break;
752 } 821 }
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 std::stringstream ss; 980 std::stringstream ss;
912 // Print out the first space-terminated token of the network desc, plus 981 // Print out the first space-terminated token of the network desc, plus
913 // the IP address. 982 // the IP address.
914 ss << "Net[" << description_.substr(0, description_.find(' ')) 983 ss << "Net[" << description_.substr(0, description_.find(' '))
915 << ":" << prefix_.ToSensitiveString() << "/" << prefix_length_ 984 << ":" << prefix_.ToSensitiveString() << "/" << prefix_length_
916 << ":" << AdapterTypeToString(type_) << "]"; 985 << ":" << AdapterTypeToString(type_) << "]";
917 return ss.str(); 986 return ss.str();
918 } 987 }
919 988
920 } // namespace rtc 989 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/network.h ('k') | webrtc/base/networkmonitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698