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

Side by Side Diff: components/wifi/wifi_service_win.cc

Issue 250223002: Ignore ERROR_ADDRESS_NOT_ASSOCIATED from IpReleaseAddress in WiFiService::ResetDHCP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase and format Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | components/wifi/wifi_test.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 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/wifi/wifi_service.h" 5 #include "components/wifi/wifi_service.h"
6 6
7 #include <iphlpapi.h> 7 #include <iphlpapi.h>
8 #include <objbase.h> 8 #include <objbase.h>
9 #include <wlanapi.h> 9 #include <wlanapi.h>
10 10
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after
899 NetworkProperties current_properties; 899 NetworkProperties current_properties;
900 DWORD error = GetCurrentProperties(&current_properties); 900 DWORD error = GetCurrentProperties(&current_properties);
901 if (network_guid == current_properties.guid && 901 if (network_guid == current_properties.guid &&
902 current_properties.connection_state == 902 current_properties.connection_state ==
903 onc::connection_state::kConnected) { 903 onc::connection_state::kConnected) {
904 DVLOG(1) << "WiFi Connected, Reset DHCP: " << network_guid; 904 DVLOG(1) << "WiFi Connected, Reset DHCP: " << network_guid;
905 // Even though wireless network is now connected, it may still be unusable, 905 // Even though wireless network is now connected, it may still be unusable,
906 // e.g. after Chromecast device reset. Reset DHCP on wireless network to 906 // e.g. after Chromecast device reset. Reset DHCP on wireless network to
907 // work around this issue. 907 // work around this issue.
908 error = ResetDHCP(); 908 error = ResetDHCP();
909 if (error != ERROR_SUCCESS)
910 LOG(ERROR) << error;
909 // There is no need to keep created profile as network is connected. 911 // There is no need to keep created profile as network is connected.
910 created_profiles_.RemoveWithoutPathExpansion(network_guid, NULL); 912 created_profiles_.RemoveWithoutPathExpansion(network_guid, NULL);
911 // Restore previously suppressed notifications. 913 // Restore previously suppressed notifications.
912 enable_notify_network_changed_ = true; 914 enable_notify_network_changed_ = true;
913 RestoreNwCategoryWizard(); 915 RestoreNwCategoryWizard();
914 NotifyNetworkChanged(network_guid); 916 NotifyNetworkChanged(network_guid);
915 } else { 917 } else {
916 // Continue waiting for network connection state change. 918 // Continue waiting for network connection state change.
917 task_runner_->PostDelayedTask( 919 task_runner_->PostDelayedTask(
918 FROM_HERE, 920 FROM_HERE,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 } 968 }
967 969
968 void WiFiServiceImpl::SortNetworks(NetworkList* networks) { 970 void WiFiServiceImpl::SortNetworks(NetworkList* networks) {
969 networks->sort(NetworkProperties::OrderByType); 971 networks->sort(NetworkProperties::OrderByType);
970 } 972 }
971 973
972 DWORD WiFiServiceImpl::LoadWlanLibrary() { 974 DWORD WiFiServiceImpl::LoadWlanLibrary() {
973 // Use an absolute path to load the DLL to avoid DLL preloading attacks. 975 // Use an absolute path to load the DLL to avoid DLL preloading attacks.
974 base::FilePath path; 976 base::FilePath path;
975 if (!PathService::Get(base::DIR_SYSTEM, &path)) { 977 if (!PathService::Get(base::DIR_SYSTEM, &path)) {
976 DLOG(ERROR) << "Unable to get system path."; 978 LOG(ERROR) << "Unable to get system path.";
977 return ERROR_NOT_FOUND; 979 return ERROR_NOT_FOUND;
978 } 980 }
979 wlan_api_library_ = ::LoadLibraryEx(path.Append(kWlanApiDll).value().c_str(), 981 wlan_api_library_ = ::LoadLibraryEx(path.Append(kWlanApiDll).value().c_str(),
980 NULL, 982 NULL,
981 LOAD_WITH_ALTERED_SEARCH_PATH); 983 LOAD_WITH_ALTERED_SEARCH_PATH);
982 if (!wlan_api_library_) { 984 if (!wlan_api_library_) {
983 DLOG(ERROR) << "Unable to load WlanApi.dll."; 985 LOG(ERROR) << "Unable to load WlanApi.dll.";
984 return ERROR_NOT_FOUND; 986 return ERROR_NOT_FOUND;
985 } 987 }
986 988
987 // Initialize WlanApi function pointers 989 // Initialize WlanApi function pointers
988 WlanConnect_function_ = 990 WlanConnect_function_ =
989 reinterpret_cast<WlanConnectFunction>( 991 reinterpret_cast<WlanConnectFunction>(
990 ::GetProcAddress(wlan_api_library_, kWlanConnect)); 992 ::GetProcAddress(wlan_api_library_, kWlanConnect));
991 WlanCloseHandle_function_ = 993 WlanCloseHandle_function_ =
992 reinterpret_cast<WlanCloseHandleFunction>( 994 reinterpret_cast<WlanCloseHandleFunction>(
993 ::GetProcAddress(wlan_api_library_, kWlanCloseHandle)); 995 ::GetProcAddress(wlan_api_library_, kWlanCloseHandle));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 !WlanDisconnect_function_ || 1039 !WlanDisconnect_function_ ||
1038 !WlanEnumInterfaces_function_ || 1040 !WlanEnumInterfaces_function_ ||
1039 !WlanFreeMemory_function_ || 1041 !WlanFreeMemory_function_ ||
1040 !WlanGetAvailableNetworkList_function_ || 1042 !WlanGetAvailableNetworkList_function_ ||
1041 !WlanGetProfile_function_ || 1043 !WlanGetProfile_function_ ||
1042 !WlanOpenHandle_function_ || 1044 !WlanOpenHandle_function_ ||
1043 !WlanQueryInterface_function_ || 1045 !WlanQueryInterface_function_ ||
1044 !WlanRegisterNotification_function_ || 1046 !WlanRegisterNotification_function_ ||
1045 !WlanScan_function_ || 1047 !WlanScan_function_ ||
1046 !WlanSetProfile_function_) { 1048 !WlanSetProfile_function_) {
1047 DLOG(ERROR) << "Unable to find required WlanApi function."; 1049 LOG(ERROR) << "Unable to find required WlanApi function.";
1048 FreeLibrary(wlan_api_library_); 1050 FreeLibrary(wlan_api_library_);
1049 wlan_api_library_ = NULL; 1051 wlan_api_library_ = NULL;
1050 return ERROR_NOT_FOUND; 1052 return ERROR_NOT_FOUND;
1051 } 1053 }
1052 1054
1053 // Some WlanApi functions may not be available on XP. 1055 // Some WlanApi functions may not be available on XP.
1054 if (!WlanGetNetworkBssList_function_ || 1056 if (!WlanGetNetworkBssList_function_ ||
1055 !WlanSaveTemporaryProfile_function_) { 1057 !WlanSaveTemporaryProfile_function_) {
1056 DVLOG(1) << "WlanApi function is not be available on XP."; 1058 DVLOG(1) << "WlanApi function is not be available on XP.";
1057 } 1059 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 // Clean up.. 1095 // Clean up..
1094 if (interface_list != NULL) 1096 if (interface_list != NULL)
1095 WlanFreeMemory_function_(interface_list); 1097 WlanFreeMemory_function_(interface_list);
1096 } 1098 }
1097 return error; 1099 return error;
1098 } 1100 }
1099 1101
1100 DWORD WiFiServiceImpl::ResetDHCP() { 1102 DWORD WiFiServiceImpl::ResetDHCP() {
1101 IP_ADAPTER_INDEX_MAP adapter_index_map = {0}; 1103 IP_ADAPTER_INDEX_MAP adapter_index_map = {0};
1102 DWORD error = FindAdapterIndexMapByGUID(interface_guid_, &adapter_index_map); 1104 DWORD error = FindAdapterIndexMapByGUID(interface_guid_, &adapter_index_map);
1103 if (error == ERROR_SUCCESS) { 1105 if (error != ERROR_SUCCESS) {
1104 error = ::IpReleaseAddress(&adapter_index_map); 1106 LOG(ERROR) << error;
1105 if (error == ERROR_SUCCESS) { 1107 return error;
1106 error = ::IpRenewAddress(&adapter_index_map); 1108 }
1109 error = ::IpReleaseAddress(&adapter_index_map);
1110 if (error != ERROR_SUCCESS) {
1111 if (error != ERROR_ADDRESS_NOT_ASSOCIATED) {
1112 LOG(ERROR) << error;
1113 return error;
1107 } 1114 }
1115 DVLOG(1) << "Ignoring IpReleaseAddress Error: " << error;
1108 } 1116 }
1117 error = ::IpRenewAddress(&adapter_index_map);
1118 if (error != ERROR_SUCCESS)
1119 LOG(ERROR) << error;
1109 return error; 1120 return error;
1110 } 1121 }
1111 1122
1112 DWORD WiFiServiceImpl::FindAdapterIndexMapByGUID( 1123 DWORD WiFiServiceImpl::FindAdapterIndexMapByGUID(
1113 const GUID& interface_guid, 1124 const GUID& interface_guid,
1114 IP_ADAPTER_INDEX_MAP* adapter_index_map) { 1125 IP_ADAPTER_INDEX_MAP* adapter_index_map) {
1115 base::string16 guid_string; 1126 base::string16 guid_string;
1116 const int kGUIDSize = 39; 1127 const int kGUIDSize = 39;
1117 ::StringFromGUID2( 1128 ::StringFromGUID2(
1118 interface_guid, WriteInto(&guid_string, kGUIDSize), kGUIDSize); 1129 interface_guid, WriteInto(&guid_string, kGUIDSize), kGUIDSize);
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 NetworkGuidList changed_networks(1, network_guid); 1829 NetworkGuidList changed_networks(1, network_guid);
1819 message_loop_proxy_->PostTask( 1830 message_loop_proxy_->PostTask(
1820 FROM_HERE, 1831 FROM_HERE,
1821 base::Bind(networks_changed_observer_, changed_networks)); 1832 base::Bind(networks_changed_observer_, changed_networks));
1822 } 1833 }
1823 } 1834 }
1824 1835
1825 WiFiService* WiFiService::Create() { return new WiFiServiceImpl(); } 1836 WiFiService* WiFiService::Create() { return new WiFiServiceImpl(); }
1826 1837
1827 } // namespace wifi 1838 } // namespace wifi
OLDNEW
« no previous file with comments | « no previous file | components/wifi/wifi_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698