WifiConfiguration.java revision 2e93c38fa6fad224e56a45ff4244bdd538aec846
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net.wifi; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrickimport android.annotation.SystemApi; 206346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration; 216346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration.ProxySettings; 226346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration.IpAssignment; 236346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.ProxyInfo; 240a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colittiimport android.net.StaticIpConfiguration; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 266346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.os.Parcelable; 2726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriffimport android.text.TextUtils; 28154b2cf6bbb99ee258b289846183172139a87dbavandwalleimport android.annotation.SystemApi; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 307c3606c103e95d3991267cca2592402a68779cafvandwalleimport java.util.HashMap; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.BitSet; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class representing a configured Wi-Fi network, including the 359b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff * security configuration. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37678979748585c5903125a404e448ad6c111dedadJaewan Kimpublic class WifiConfiguration implements Parcelable { 389b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff private static final String TAG = "WifiConfiguration"; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ssidVarName = "ssid"; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String bssidVarName = "bssid"; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String pskVarName = "psk"; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] wepKeyVarNames = { "wep_key0", "wep_key1", "wep_key2", "wep_key3" }; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String wepTxKeyIdxVarName = "wep_tx_keyidx"; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String priorityVarName = "priority"; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String hiddenSSIDVarName = "scan_ssid"; 535ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff /** {@hide} */ 545f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String pmfVarName = "ieee80211w"; 555f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 565f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String updateIdentiferVarName = "update_identifier"; 575f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 585ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff public static final int INVALID_NETWORK_ID = -1; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized key management schemes. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class KeyMgmt { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private KeyMgmt() { } 645069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA is not used; plaintext or static WEP could be used. */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA pre-shared key (requires {@code preSharedKey} to be specified). */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_PSK = 1; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA using EAP authentication. Generally used with an external authentication server. */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_EAP = 2; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IEEE 802.1X using EAP authentication and (optionally) dynamically 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generated WEP keys. */ 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IEEE8021X = 3; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 75ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** WPA2 pre-shared key for use with soft access point 76ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * (requires {@code preSharedKey} to be specified). 77ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * @hide 78ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff */ 79ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final int WPA2_PSK = 4; 80ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "key_mgmt"; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 83ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final String[] strings = { "NONE", "WPA_PSK", "WPA_EAP", "IEEE8021X", 84ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff "WPA2_PSK" }; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 865069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized security protocols. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Protocol { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Protocol() { } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA/IEEE 802.11i/D3.0 */ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA = 0; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA2/IEEE 802.11i */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RSN = 1; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "proto"; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "WPA", "RSN" }; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized IEEE 802.11 authentication algorithms. 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class AuthAlgorithm { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AuthAlgorithm() { } 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Open System authentication (required for WPA/WPA2) */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OPEN = 0; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Shared Key authentication (requires static WEP keys) */ 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SHARED = 1; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** LEAP/Network EAP (only used with LEAP) */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LEAP = 2; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "auth_alg"; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "OPEN", "SHARED", "LEAP" }; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized pairwise ciphers for WPA. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PairwiseCipher { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PairwiseCipher() { } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Use only Group keys (deprecated) */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 1; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 2; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "pairwise"; 1355069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "NONE", "TKIP", "CCMP" }; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized group ciphers. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class GroupCipher { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GroupCipher() { } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP40 = 0; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP104 = 1; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 2; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 3; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "group"; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "WEP40", "WEP104", "TKIP", "CCMP" }; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Possible status of a network configuration. */ 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Status { 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Status() { } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** this is the network we are currently connected to */ 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CURRENT = 0; 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will not attempt to use this network */ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DISABLED = 1; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will consider this network available for association */ 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ENABLED = 2; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "current", "disabled", "enabled" }; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1798dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1808dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_UNKNOWN_REASON = 0; 1818dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1828dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_DNS_FAILURE = 1; 1838dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1848dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_DHCP_FAILURE = 2; 1858dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1868dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_AUTH_FAILURE = 3; 187c1b631e757999232674e53e9a1bc21abed6b1862Deepthi Gowri /** @hide */ 188c1b631e757999232674e53e9a1bc21abed6b1862Deepthi Gowri public static final int DISABLED_ASSOCIATION_REJECT = 4; 18994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle /** @hide */ 19094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public static final int DISABLED_BY_WIFI_MANAGER = 5; 1918dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID number that the supplicant uses to identify this 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network configuration entry. This must be passed as an argument 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to most calls into the supplicant. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int networkId; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The current status of this network configuration entry. 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Status 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int status; 2048dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 2058dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** 2068dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy * The code referring to a reason for disabling the network 2078dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy * Valid when {@link #status} == Status.DISABLED 2088dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy * @hide 2098dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy */ 2108dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public int disableReason; 2118dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The network's SSID. Can either be an ASCII string, 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which must be enclosed in double quotation marks 2154e8620f868e2490782ebb960404140ea9482c91dBen Dodson * (e.g., {@code "MyNetwork"}, or a string of 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hex digits,which are not enclosed in quotes 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (e.g., {@code 01a243f405}). 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When set, this network configuration entry should only be used when 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associating with the AP having the specified BSSID. The value is 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a string in the format of an Ethernet MAC address, e.g., 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 2278a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng /** 228c8505931420dd9a76acf940a56b31354cd0105b0Vinit Deshpande * Fully qualified domain name (FQDN) of AAA server or RADIUS server 2298a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng * e.g. {@code "mail.example.com"}. 2308a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng */ 2318a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng public String FQDN; 2328a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng /** 2338a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng * Network access identifier (NAI) realm, for Passpoint credential. 2348a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng * e.g. {@code "myhost.example.com"}. 2358a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng * @hide 2368a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng */ 2378a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng public String naiRealm; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pre-shared key for use with WPA-PSK. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of this key is read, the actual key is 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String preSharedKey; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Up to four WEP keys. Either an ASCII string enclosed in double 2494e8620f868e2490782ebb960404140ea9482c91dBen Dodson * quotation marks (e.g., {@code "abcdef"} or a string 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of hex digits (e.g., {@code 0102030405}). 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of one of these keys is read, the actual key is 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] wepKeys; 2575069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default WEP key index, ranging from 0 to 3. */ 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int wepTxKeyIndex; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority determines the preference given to a network by {@code wpa_supplicant} 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when choosing an access point with which to associate. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a network that does not broadcast its SSID, so an 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID-specific probe request must be used for scans. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hiddenSSID; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2745f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * This is a network that requries Protected Management Frames (PMF). 2755f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 2765f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 2775f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public boolean requirePMF; 2785f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 2795f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 2805f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * Update identifier, for Passpoint network. 2815f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 2825f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 2835f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public String updateIdentifier; 2845f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 2855f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of key management protocols supported by this configuration. 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link KeyMgmt} for descriptions of the values. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA-PSK WPA-EAP. 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedKeyManagement; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of security protocols supported by this configuration. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link Protocol} for descriptions of the values. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA RSN. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedProtocols; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of authentication protocols supported by this configuration. 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link AuthAlgorithm} for descriptions of the values. 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to automatic selection. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedAuthAlgorithms; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of pairwise ciphers for WPA supported by this configuration. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link PairwiseCipher} for descriptions of the values. 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedPairwiseCiphers; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of group ciphers supported by this configuration. 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link GroupCipher} for descriptions of the values. 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP WEP104 WEP40. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedGroupCiphers; 3159b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff /** 31626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * The enterprise configuration details specifying the EAP method, 31726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * certificates and other settings associated with the EAP. 3189b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff */ 3199b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff public WifiEnterpriseConfig enterpriseConfig; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 321678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 322678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 323678979748585c5903125a404e448ad6c111dedadJaewan Kim */ 3246346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim private IpConfiguration mIpConfiguration; 325678979748585c5903125a404e448ad6c111dedadJaewan Kim 326678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 327678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 3287c3606c103e95d3991267cca2592402a68779cafvandwalle * dhcp server MAC address if known 3297c3606c103e95d3991267cca2592402a68779cafvandwalle */ 3307c3606c103e95d3991267cca2592402a68779cafvandwalle public String dhcpServer; 3317c3606c103e95d3991267cca2592402a68779cafvandwalle 3327c3606c103e95d3991267cca2592402a68779cafvandwalle /** 3337c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 3347c3606c103e95d3991267cca2592402a68779cafvandwalle * default Gateway MAC address if known 3357c3606c103e95d3991267cca2592402a68779cafvandwalle */ 3367c3606c103e95d3991267cca2592402a68779cafvandwalle public String defaultGwMacAddress; 3377c3606c103e95d3991267cca2592402a68779cafvandwalle 3387c3606c103e95d3991267cca2592402a68779cafvandwalle /** 3397c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 3403a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle * last failure 3413a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle */ 3423a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle public String lastFailure; 3433a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 3443a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle /** 3453a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle * @hide 346448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * last time we connected, this configuration had no internet access 347448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 348448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public boolean noInternetAccess; 349448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 350448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 351448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 3528f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of app creating the configuration 3538f13548615f647a1208ace5369b504cb41149965vandwalle */ 354adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrick @SystemApi 3558f13548615f647a1208ace5369b504cb41149965vandwalle public int creatorUid; 3568f13548615f647a1208ace5369b504cb41149965vandwalle 3578f13548615f647a1208ace5369b504cb41149965vandwalle /** 3588f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 3598f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app issuing a connection related command 3608f13548615f647a1208ace5369b504cb41149965vandwalle */ 3618f13548615f647a1208ace5369b504cb41149965vandwalle public int lastConnectUid; 3628f13548615f647a1208ace5369b504cb41149965vandwalle 3638f13548615f647a1208ace5369b504cb41149965vandwalle /** 3648f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 3658f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app modifying the configuration 3668f13548615f647a1208ace5369b504cb41149965vandwalle */ 367eb8f329a5e8d4df80447ab9676761f9743d20cd4Chelsea Derrick @SystemApi 3688f13548615f647a1208ace5369b504cb41149965vandwalle public int lastUpdateUid; 3698f13548615f647a1208ace5369b504cb41149965vandwalle 3708f13548615f647a1208ace5369b504cb41149965vandwalle /** 3718f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 372e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle * Uid used by autoJoin 37372d87d99b02c6523a4a3cb83e0d5cf6c8e01075fvandwalle */ 374e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String autoJoinBSSID; 37572d87d99b02c6523a4a3cb83e0d5cf6c8e01075fvandwalle 37672d87d99b02c6523a4a3cb83e0d5cf6c8e01075fvandwalle /** 37772d87d99b02c6523a4a3cb83e0d5cf6c8e01075fvandwalle * @hide 3787c3606c103e95d3991267cca2592402a68779cafvandwalle * BSSID list on which this configuration was seen. 3797c3606c103e95d3991267cca2592402a68779cafvandwalle * TODO: prevent this list to grow infinitely, age-out the results 3807c3606c103e95d3991267cca2592402a68779cafvandwalle */ 3817c3606c103e95d3991267cca2592402a68779cafvandwalle public HashMap<String, ScanResult> scanResultCache; 3827c3606c103e95d3991267cca2592402a68779cafvandwalle 3832ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** The Below RSSI thresholds are used to configure AutoJoin 3842ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * - GOOD/LOW/BAD thresholds are used so as to calculate link score 3852e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNWANTED_SOFT are used by the blacklisting logic so as to handle 3862e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the unwanted network message coming from CS 3872e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNBLACKLIST thresholds are used so as to tweak the speed at which 3882e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network is unblacklisted (i.e. if 3892ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * it is seen with good RSSI, it is blacklisted faster) 3902e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - INITIAL_AUTOJOIN_ATTEMPT, used to determine how close from 3912e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network we need to be before autojoin kicks in 3922ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle */ 3937c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide **/ 3947c3606c103e95d3991267cca2592402a68779cafvandwalle public static int INVALID_RSSI = -127; 3957c3606c103e95d3991267cca2592402a68779cafvandwalle 3962ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 3972ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNWANTED_BLACKLIST_SOFT_RSSI_24 = -80; 3982ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 3992ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4002ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNWANTED_BLACKLIST_SOFT_RSSI_5 = -70; 4012ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4022ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4032ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int GOOD_RSSI_24 = -65; 4042ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4052ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4067610fa66cd0980703986cf5be95a307397040bf1vandwalle public static int LOW_RSSI_24 = -77; 4072ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4082ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 409d524c78d9358e2fa1e67124468cffa5284870c62vandwalle public static int BAD_RSSI_24 = -87; 4102ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4112ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4127610fa66cd0980703986cf5be95a307397040bf1vandwalle public static int GOOD_RSSI_5 = -60; 4132ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4142ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4157610fa66cd0980703986cf5be95a307397040bf1vandwalle public static int LOW_RSSI_5 = -72; 4162ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4172ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4187610fa66cd0980703986cf5be95a307397040bf1vandwalle public static int BAD_RSSI_5 = -82; 4192ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4202ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4212ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNWANTED_BLACKLIST_SOFT_BUMP = 4; 4222ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4232ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4242ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNWANTED_BLACKLIST_HARD_BUMP = 8; 4252ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4262ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 427d524c78d9358e2fa1e67124468cffa5284870c62vandwalle public static int UNBLACKLIST_THRESHOLD_24_SOFT = -77; 4282ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4292ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4302ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNBLACKLIST_THRESHOLD_24_HARD = -68; 4312ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4322ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4332ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNBLACKLIST_THRESHOLD_5_SOFT = -63; 4342ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4352ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4362ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int UNBLACKLIST_THRESHOLD_5_HARD = -56; 4372ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4382ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4392ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int INITIAL_AUTO_JOIN_ATTEMPT_MIN_24 = -80; 4402ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 4412ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 4422ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static int INITIAL_AUTO_JOIN_ATTEMPT_MIN_5 = -70; 4432ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 444111fa0274d1d6620f9634783585387f3b773949evandwalle /** @hide 445154b2cf6bbb99ee258b289846183172139a87dbavandwalle * 5GHz band is prefered low over 2.4 if the 5GHz RSSI is higher than this threshold */ 44694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public static int A_BAND_PREFERENCE_RSSI_THRESHOLD = -65; 447111fa0274d1d6620f9634783585387f3b773949evandwalle 448d524c78d9358e2fa1e67124468cffa5284870c62vandwalle /** @hide 449d524c78d9358e2fa1e67124468cffa5284870c62vandwalle * 5GHz band is penalized if the 5GHz RSSI is lower than this threshold **/ 450d524c78d9358e2fa1e67124468cffa5284870c62vandwalle public static int G_BAND_PREFERENCE_RSSI_THRESHOLD = -75; 451d524c78d9358e2fa1e67124468cffa5284870c62vandwalle 4527610fa66cd0980703986cf5be95a307397040bf1vandwalle /** @hide 4537610fa66cd0980703986cf5be95a307397040bf1vandwalle * Boost given to RSSI on a home network for the purpose of calculating the score 4547610fa66cd0980703986cf5be95a307397040bf1vandwalle * This adds stickiness to home networks, as defined by: 4557610fa66cd0980703986cf5be95a307397040bf1vandwalle * - less than 4 known BSSIDs 4567610fa66cd0980703986cf5be95a307397040bf1vandwalle * - PSK only 4577610fa66cd0980703986cf5be95a307397040bf1vandwalle * - TODO: add a test to verify that all BSSIDs are behind same gateway 4587610fa66cd0980703986cf5be95a307397040bf1vandwalle ***/ 4597610fa66cd0980703986cf5be95a307397040bf1vandwalle public static int HOME_NETWORK_RSSI_BOOST = 5; 4607610fa66cd0980703986cf5be95a307397040bf1vandwalle 46194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle /** @hide 46294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle * RSSI boost for configuration which use autoJoinUseAggressiveJoinAttemptThreshold 46394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle * To be more aggressive when initially attempting to auto join 46494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle */ 46594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public static int MAX_INITIAL_AUTO_JOIN_RSSI_BOOST = 8; 46694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle 4677c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4687c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 4697c3606c103e95d3991267cca2592402a68779cafvandwalle * A summary of the RSSI and Band status for that configuration 4707c3606c103e95d3991267cca2592402a68779cafvandwalle * This is used as a temporary value by the auto-join controller 4717c3606c103e95d3991267cca2592402a68779cafvandwalle */ 4725fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public final class Visibility { 4737c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi5; // strongest 5GHz RSSI 4747c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi24; // strongest 2.4GHz RSSI 4757c3606c103e95d3991267cca2592402a68779cafvandwalle public int num5; // number of BSSIDs on 5GHz 4767c3606c103e95d3991267cca2592402a68779cafvandwalle public int num24; // number of BSSIDs on 2.4GHz 477e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age5; // timestamp of the strongest 5GHz BSSID (last time it was seen) 478e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age24; // timestamp of the strongest 2.4GHz BSSID (last time it was seen) 479e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID24; 480e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID5; 4815fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 4825fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility() { 4837c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = INVALID_RSSI; 4847c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = INVALID_RSSI; 4857c3606c103e95d3991267cca2592402a68779cafvandwalle } 4865fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 4875fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility(Visibility source) { 4887c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = source.rssi5; 4897c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = source.rssi24; 4907c3606c103e95d3991267cca2592402a68779cafvandwalle age24 = source.age24; 4917c3606c103e95d3991267cca2592402a68779cafvandwalle age5 = source.age5; 4927c3606c103e95d3991267cca2592402a68779cafvandwalle num24 = source.num24; 4937c3606c103e95d3991267cca2592402a68779cafvandwalle num5 = source.num5; 494e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID5 = source.BSSID5; 495e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID24 = source.BSSID24; 4967c3606c103e95d3991267cca2592402a68779cafvandwalle } 4975fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 4985fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle @Override 4995fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public String toString() { 5005fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle StringBuilder sbuf = new StringBuilder(); 5015fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("["); 5025fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi24 > INVALID_RSSI) { 5035fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi24)); 5045fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5055fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num24)); 506e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID24 != null) sbuf.append(",").append(BSSID24); 5075fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } else { 5085fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("*"); 5095fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 5105fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(" - "); 5115fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi5 > INVALID_RSSI) { 5125fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi5)); 5135fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5145fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num5)); 515e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID5 != null) sbuf.append(",").append(BSSID5); 5165fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 5175fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("]"); 5185fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle return sbuf.toString(); 5195fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 5207c3606c103e95d3991267cca2592402a68779cafvandwalle } 5217c3606c103e95d3991267cca2592402a68779cafvandwalle 5227c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5237c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the visibility status of this configuration. 5247c3606c103e95d3991267cca2592402a68779cafvandwalle * Visibility can change at any time depending on scan results availability. 5257c3606c103e95d3991267cca2592402a68779cafvandwalle * Owner of the WifiConfiguration is responsible to set this field based on 5267c3606c103e95d3991267cca2592402a68779cafvandwalle * recent scan results. 5277c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5287c3606c103e95d3991267cca2592402a68779cafvandwalle public Visibility visibility; 5297c3606c103e95d3991267cca2592402a68779cafvandwalle 5307c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5317c3606c103e95d3991267cca2592402a68779cafvandwalle * calculate and set Visibility for that configuration. 5327c3606c103e95d3991267cca2592402a68779cafvandwalle * 5337c3606c103e95d3991267cca2592402a68779cafvandwalle * age in milliseconds: we will consider only ScanResults that are more recent, 5347c3606c103e95d3991267cca2592402a68779cafvandwalle * i.e. younger. 5357c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5367c3606c103e95d3991267cca2592402a68779cafvandwalle public Visibility setVisibility(long age) { 5377c3606c103e95d3991267cca2592402a68779cafvandwalle if (scanResultCache == null) { 5387c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = null; 5397c3606c103e95d3991267cca2592402a68779cafvandwalle return null; 5407c3606c103e95d3991267cca2592402a68779cafvandwalle } 5417c3606c103e95d3991267cca2592402a68779cafvandwalle 5427c3606c103e95d3991267cca2592402a68779cafvandwalle Visibility status = new Visibility(); 5437c3606c103e95d3991267cca2592402a68779cafvandwalle 5447c3606c103e95d3991267cca2592402a68779cafvandwalle long now_ms = System.currentTimeMillis(); 5457c3606c103e95d3991267cca2592402a68779cafvandwalle for(ScanResult result : scanResultCache.values()) { 5467c3606c103e95d3991267cca2592402a68779cafvandwalle if (result.seen == 0) 5477c3606c103e95d3991267cca2592402a68779cafvandwalle continue; 5487c3606c103e95d3991267cca2592402a68779cafvandwalle 549111fa0274d1d6620f9634783585387f3b773949evandwalle if (result.is5GHz()) { 5507c3606c103e95d3991267cca2592402a68779cafvandwalle //strictly speaking: [4915, 5825] 5517c3606c103e95d3991267cca2592402a68779cafvandwalle //number of known BSSID on 5GHz band 5527c3606c103e95d3991267cca2592402a68779cafvandwalle status.num5 = status.num5 + 1; 553111fa0274d1d6620f9634783585387f3b773949evandwalle } else if (result.is24GHz()) { 5547c3606c103e95d3991267cca2592402a68779cafvandwalle //strictly speaking: [2412, 2482] 5557c3606c103e95d3991267cca2592402a68779cafvandwalle //number of known BSSID on 2.4Ghz band 5567c3606c103e95d3991267cca2592402a68779cafvandwalle status.num24 = status.num24 + 1; 5577c3606c103e95d3991267cca2592402a68779cafvandwalle } 5587c3606c103e95d3991267cca2592402a68779cafvandwalle 5597c3606c103e95d3991267cca2592402a68779cafvandwalle if ((now_ms - result.seen) > age) continue; 5607c3606c103e95d3991267cca2592402a68779cafvandwalle 561111fa0274d1d6620f9634783585387f3b773949evandwalle if (result.is5GHz()) { 5627c3606c103e95d3991267cca2592402a68779cafvandwalle if (result.level > status.rssi5) { 5637c3606c103e95d3991267cca2592402a68779cafvandwalle status.rssi5 = result.level; 5647c3606c103e95d3991267cca2592402a68779cafvandwalle status.age5 = result.seen; 565e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle status.BSSID5 = result.BSSID; 5667c3606c103e95d3991267cca2592402a68779cafvandwalle } 567111fa0274d1d6620f9634783585387f3b773949evandwalle } else if (result.is24GHz()) { 5687c3606c103e95d3991267cca2592402a68779cafvandwalle if (result.level > status.rssi24) { 5697c3606c103e95d3991267cca2592402a68779cafvandwalle status.rssi24 = result.level; 5707c3606c103e95d3991267cca2592402a68779cafvandwalle status.age24 = result.seen; 571e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle status.BSSID24 = result.BSSID; 5727c3606c103e95d3991267cca2592402a68779cafvandwalle } 5737c3606c103e95d3991267cca2592402a68779cafvandwalle } 5747c3606c103e95d3991267cca2592402a68779cafvandwalle } 5757c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = status; 5767c3606c103e95d3991267cca2592402a68779cafvandwalle return status; 5777c3606c103e95d3991267cca2592402a68779cafvandwalle } 5787c3606c103e95d3991267cca2592402a68779cafvandwalle 5797c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide */ 5807c3606c103e95d3991267cca2592402a68779cafvandwalle public static final int AUTO_JOIN_ENABLED = 0; 5812ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** 582d3adb7e81658b9c3af8955360acd1b930be6cda8vandwalle * if this is set, the WifiConfiguration cannot use linkages so as to bump 583d3adb7e81658b9c3af8955360acd1b930be6cda8vandwalle * it's relative priority. 5848f13548615f647a1208ace5369b504cb41149965vandwalle * - status between and 128 indicate various level of blacklisting depending 5858f13548615f647a1208ace5369b504cb41149965vandwalle * on the severity or frequency of the connection error 5868f13548615f647a1208ace5369b504cb41149965vandwalle * - deleted status indicates that the user is deleting the configuration, and so 5878f13548615f647a1208ace5369b504cb41149965vandwalle * although it may have been self added we will not re-self-add it, ignore it, 5888f13548615f647a1208ace5369b504cb41149965vandwalle * not return it to applications, and not connect to it 589d3adb7e81658b9c3af8955360acd1b930be6cda8vandwalle * */ 5902ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 5912ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide 5922ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * network was temporary disabled due to bad connection, most likely due 5932ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * to weak RSSI */ 594d3adb7e81658b9c3af8955360acd1b930be6cda8vandwalle public static final int AUTO_JOIN_TEMPORARY_DISABLED = 1; 5952ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide 5962ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * network was temporary disabled due to bad connection, which cant be attributed 5972ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * to weak RSSI */ 5982ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static final int AUTO_JOIN_TEMPORARY_DISABLED_LINK_ERRORS = 32; 5992ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide */ 6002ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public static final int AUTO_JOIN_TEMPORARY_DISABLED_AT_SUPPLICANT = 64; 6017c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide */ 6028f13548615f647a1208ace5369b504cb41149965vandwalle public static final int AUTO_JOIN_DISABLED_ON_AUTH_FAILURE = 128; 6038f13548615f647a1208ace5369b504cb41149965vandwalle /** @hide */ 60494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public static final int AUTO_JOIN_DISABLED_NO_CREDENTIALS = 160; 60594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle /** @hide */ 60694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public static final int AUTO_JOIN_DISABLED_USER_ACTION = 161; 60794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle 60894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle /** @hide */ 6098f13548615f647a1208ace5369b504cb41149965vandwalle public static final int AUTO_JOIN_DELETED = 200; 610d3adb7e81658b9c3af8955360acd1b930be6cda8vandwalle 6117c3606c103e95d3991267cca2592402a68779cafvandwalle /** 6127c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 6137c3606c103e95d3991267cca2592402a68779cafvandwalle */ 6147c3606c103e95d3991267cca2592402a68779cafvandwalle public int autoJoinStatus; 6157c3606c103e95d3991267cca2592402a68779cafvandwalle 616154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 617154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 618154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of connection failures 619154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 620154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numConnectionFailures; 6212ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 6222ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** 6232ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * @hide 624154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time we blacklisted the configuration 6252ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle */ 6262ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public long blackListTimestamp; 6272ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 628111fa0274d1d6620f9634783585387f3b773949evandwalle /** 629111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 630154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was connected to this configuration. 631111fa0274d1d6620f9634783585387f3b773949evandwalle */ 632111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastConnected; 633111fa0274d1d6620f9634783585387f3b773949evandwalle 634111fa0274d1d6620f9634783585387f3b773949evandwalle /** 635111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 636154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system tried to connect and failed. 637154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 638154b2cf6bbb99ee258b289846183172139a87dbavandwalle public long lastConnectionFailure; 639154b2cf6bbb99ee258b289846183172139a87dbavandwalle 640154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 641154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 642154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was disconnected to this configuration. 643111fa0274d1d6620f9634783585387f3b773949evandwalle */ 644111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastDisconnected; 6452ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 6467c3606c103e95d3991267cca2592402a68779cafvandwalle /** 647e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * Set if the configuration was self added by the framework 6488f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is cleared if we get a connect/save/ update or 6498f13548615f647a1208ace5369b504cb41149965vandwalle * any wifiManager command that indicate the user interacted with the configuration 6508f13548615f647a1208ace5369b504cb41149965vandwalle * since we will now consider that the configuration belong to him. 651e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * @hide 652e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle */ 653e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle public boolean selfAdded; 654e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle 655e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle /** 6568f13548615f647a1208ace5369b504cb41149965vandwalle * Set if the configuration was self added by the framework 6578f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is set once and never cleared. It is used 6588f13548615f647a1208ace5369b504cb41149965vandwalle * so as we never loose track of who created the 6598f13548615f647a1208ace5369b504cb41149965vandwalle * configuration in the first place. 6608f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 6618f13548615f647a1208ace5369b504cb41149965vandwalle */ 6628f13548615f647a1208ace5369b504cb41149965vandwalle public boolean didSelfAdd; 6638f13548615f647a1208ace5369b504cb41149965vandwalle 6648f13548615f647a1208ace5369b504cb41149965vandwalle /** 665154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Peer WifiConfiguration this WifiConfiguration was added for 6662d0f71eea20470985abde98d759910a1ac40b257vandwalle * @hide 6672d0f71eea20470985abde98d759910a1ac40b257vandwalle */ 6682d0f71eea20470985abde98d759910a1ac40b257vandwalle public String peerWifiConfiguration; 6692d0f71eea20470985abde98d759910a1ac40b257vandwalle 6702d0f71eea20470985abde98d759910a1ac40b257vandwalle /** 6717c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 6727c3606c103e95d3991267cca2592402a68779cafvandwalle * Indicate that a WifiConfiguration is temporary and should not be saved 6737c3606c103e95d3991267cca2592402a68779cafvandwalle * nor considered by AutoJoin. 6747c3606c103e95d3991267cca2592402a68779cafvandwalle */ 6757c3606c103e95d3991267cca2592402a68779cafvandwalle public boolean ephemeral; 6767c3606c103e95d3991267cca2592402a68779cafvandwalle 6777c3606c103e95d3991267cca2592402a68779cafvandwalle /** 6787c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 67994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle * Indicate that we didn't auto-join because rssi was too low 68094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle */ 68194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public boolean autoJoinBailedDueToLowRssi; 68294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle 68394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle /** 68494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle * @hide 68594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle * AutoJoin even though RSSI is 10dB below threshold 68694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle */ 68794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle public int autoJoinUseAggressiveJoinAttemptThreshold; 68894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle 68994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle /** 69094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle * @hide 691154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, when comparing two 692154b2cf6bbb99ee258b289846183172139a87dbavandwalle * WifiConfigurations, note that since comparing WifiConfiguration happens very often 693154b2cf6bbb99ee258b289846183172139a87dbavandwalle * potentially at every scan, this number might become very large, even on an idle 694154b2cf6bbb99ee258b289846183172139a87dbavandwalle * system. 695154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 696154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 697154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverride; 698154b2cf6bbb99ee258b289846183172139a87dbavandwalle 699154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 700154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 701154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, and the comparison 702154b2cf6bbb99ee258b289846183172139a87dbavandwalle * triggered a network switch 703154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 704154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 705154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverrideAndSwitchedNetwork; 706154b2cf6bbb99ee258b289846183172139a87dbavandwalle 707154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 708154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 7094eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Number of time we associated to this configuration. 7104eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 7114eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle @SystemApi 7124eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public int numAssociation; 7134eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 714448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 715448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 716448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration with Low RSSI. 717448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 718448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableLowRSSI; 719448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 720448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 721448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 722448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration with Bad RSSI. 723448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 724448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableBadRSSI; 725448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 726448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 727448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 728448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration 729448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * and RSSI was not HIGH. 730448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 731448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableNotHighRSSI; 732448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 733448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 734448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 735448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration with Low RSSI. 736448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 737448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtLowRSSI; 738448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 739448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 740448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 741448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration with Bad RSSI. 742448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 743448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtBadRSSI; 744448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 745448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 746448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 747448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration 748448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * and RSSI was not HIGH. 749448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 750448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtNotHighRSSI; 751448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 752448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 753448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user (WifiManager) triggered association to this configuration. 754448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * TODO: count this only for Wifi Settings uuid, so as to not count 3rd party apps 755448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 756448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredJoinAttempts; 7574eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 7584eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 7594eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 7607c3606c103e95d3991267cca2592402a68779cafvandwalle * Connect choices 7617c3606c103e95d3991267cca2592402a68779cafvandwalle * 7627c3606c103e95d3991267cca2592402a68779cafvandwalle * remember the keys identifying the known WifiConfiguration over which this configuration 7637c3606c103e95d3991267cca2592402a68779cafvandwalle * was preferred by user or a "WiFi Network Management app", that is, 7647c3606c103e95d3991267cca2592402a68779cafvandwalle * a WifiManager.CONNECT_NETWORK or SELECT_NETWORK was received while this configuration 7657c3606c103e95d3991267cca2592402a68779cafvandwalle * was visible to the user: 7667c3606c103e95d3991267cca2592402a68779cafvandwalle * configKey is : "SSID"-WEP-WPA_PSK-WPA_EAP 7677c3606c103e95d3991267cca2592402a68779cafvandwalle * 7687c3606c103e95d3991267cca2592402a68779cafvandwalle * The integer represents the configuration's RSSI at that time (useful?) 7697c3606c103e95d3991267cca2592402a68779cafvandwalle * 7707c3606c103e95d3991267cca2592402a68779cafvandwalle * The overall auto-join algorithm make use of past connect choice so as to sort configuration, 7717c3606c103e95d3991267cca2592402a68779cafvandwalle * the exact algorithm still fluctuating as of 5/7/2014 7727c3606c103e95d3991267cca2592402a68779cafvandwalle * 7737c3606c103e95d3991267cca2592402a68779cafvandwalle */ 7747c3606c103e95d3991267cca2592402a68779cafvandwalle public HashMap<String, Integer> connectChoices; 7757c3606c103e95d3991267cca2592402a68779cafvandwalle 7767c3606c103e95d3991267cca2592402a68779cafvandwalle /** 7777c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 7787c3606c103e95d3991267cca2592402a68779cafvandwalle * Linked Configurations: represent the set of Wificonfigurations that are equivalent 7797c3606c103e95d3991267cca2592402a68779cafvandwalle * regarding roaming and auto-joining. 7807c3606c103e95d3991267cca2592402a68779cafvandwalle * The linked configuration may or may not have same SSID, and may or may not have same 7817c3606c103e95d3991267cca2592402a68779cafvandwalle * credentials. 7827c3606c103e95d3991267cca2592402a68779cafvandwalle * For instance, linked configurations will have same defaultGwMacAddress or same dhcp server. 7837c3606c103e95d3991267cca2592402a68779cafvandwalle */ 7847c3606c103e95d3991267cca2592402a68779cafvandwalle public HashMap<String, Integer> linkedConfigurations; 7857c3606c103e95d3991267cca2592402a68779cafvandwalle 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration() { 7875ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff networkId = INVALID_NETWORK_ID; 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = null; 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = null; 7908a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = null; 7918a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng naiRealm = null; 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = 0; 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hiddenSSID = false; 7948dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy disableReason = DISABLED_UNKNOWN_REASON; 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedKeyManagement = new BitSet(); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedProtocols = new BitSet(); 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedAuthAlgorithms = new BitSet(); 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedPairwiseCiphers = new BitSet(); 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedGroupCiphers = new BitSet(); 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys = new String[4]; 8019b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys[i] = null; 8034337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang } 8049b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(); 8057c3606c103e95d3991267cca2592402a68779cafvandwalle autoJoinStatus = AUTO_JOIN_ENABLED; 806e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = false; 8078f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = false; 808e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle ephemeral = false; 809448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle noInternetAccess = false; 8106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(); 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 81310652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde /** 81410652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde * indicates whether the configuration is valid 81510652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde * @return true if valid, false otherwise 81610652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde * @hide 81710652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde */ 81810652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde public boolean isValid() { 81960a28c6c4b992d1d3959484442a205d6ae2bd977vandwalle 82060a28c6c4b992d1d3959484442a205d6ae2bd977vandwalle if (allowedKeyManagement == null) 82160a28c6c4b992d1d3959484442a205d6ae2bd977vandwalle return false; 82260a28c6c4b992d1d3959484442a205d6ae2bd977vandwalle 82310652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde if (allowedKeyManagement.cardinality() > 1) { 8243b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde if (allowedKeyManagement.cardinality() != 2) { 8253b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde return false; 8263b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde } 8273b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde if (allowedKeyManagement.get(KeyMgmt.WPA_EAP) == false) { 8283b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde return false; 8293b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde } 8302871588101c9bf1e6c9573599dee9be106466175Vinit Deshapnde if ((allowedKeyManagement.get(KeyMgmt.IEEE8021X) == false) 8312871588101c9bf1e6c9573599dee9be106466175Vinit Deshapnde && (allowedKeyManagement.get(KeyMgmt.WPA_PSK) == false)) { 8323b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde return false; 8333b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde } 83410652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde } 83510652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde 83610652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde // TODO: Add more checks 83710652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde return true; 838111fa0274d1d6620f9634783585387f3b773949evandwalle } 8397c3606c103e95d3991267cca2592402a68779cafvandwalle 840111fa0274d1d6620f9634783585387f3b773949evandwalle /** 841111fa0274d1d6620f9634783585387f3b773949evandwalle * Helper function, identify if a configuration is linked 842111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 843111fa0274d1d6620f9634783585387f3b773949evandwalle */ 844111fa0274d1d6620f9634783585387f3b773949evandwalle public boolean isLinked(WifiConfiguration config) { 845111fa0274d1d6620f9634783585387f3b773949evandwalle if (config.linkedConfigurations != null && linkedConfigurations != null) { 846111fa0274d1d6620f9634783585387f3b773949evandwalle if (config.linkedConfigurations.get(configKey()) != null 847111fa0274d1d6620f9634783585387f3b773949evandwalle && linkedConfigurations.get(config.configKey()) != null) { 848111fa0274d1d6620f9634783585387f3b773949evandwalle return true; 849111fa0274d1d6620f9634783585387f3b773949evandwalle } 850111fa0274d1d6620f9634783585387f3b773949evandwalle } 851111fa0274d1d6620f9634783585387f3b773949evandwalle return false; 8527c3606c103e95d3991267cca2592402a68779cafvandwalle } 8537c3606c103e95d3991267cca2592402a68779cafvandwalle 8547c3606c103e95d3991267cca2592402a68779cafvandwalle /** 8557c3606c103e95d3991267cca2592402a68779cafvandwalle * most recent time we have seen this configuration 8567c3606c103e95d3991267cca2592402a68779cafvandwalle * @return most recent scanResult 8577c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 8587c3606c103e95d3991267cca2592402a68779cafvandwalle */ 8597c3606c103e95d3991267cca2592402a68779cafvandwalle public ScanResult lastSeen() { 8607c3606c103e95d3991267cca2592402a68779cafvandwalle ScanResult mostRecent = null; 8617c3606c103e95d3991267cca2592402a68779cafvandwalle 8627c3606c103e95d3991267cca2592402a68779cafvandwalle if (scanResultCache == null) { 8637c3606c103e95d3991267cca2592402a68779cafvandwalle return null; 8647c3606c103e95d3991267cca2592402a68779cafvandwalle } 8657c3606c103e95d3991267cca2592402a68779cafvandwalle 8667c3606c103e95d3991267cca2592402a68779cafvandwalle for (ScanResult result : scanResultCache.values()) { 8677c3606c103e95d3991267cca2592402a68779cafvandwalle if (mostRecent == null) { 8687c3606c103e95d3991267cca2592402a68779cafvandwalle if (result.seen != 0) 8697c3606c103e95d3991267cca2592402a68779cafvandwalle mostRecent = result; 8707c3606c103e95d3991267cca2592402a68779cafvandwalle } else { 8717c3606c103e95d3991267cca2592402a68779cafvandwalle if (result.seen > mostRecent.seen) { 8727c3606c103e95d3991267cca2592402a68779cafvandwalle mostRecent = result; 8737c3606c103e95d3991267cca2592402a68779cafvandwalle } 8747c3606c103e95d3991267cca2592402a68779cafvandwalle } 8757c3606c103e95d3991267cca2592402a68779cafvandwalle } 8767c3606c103e95d3991267cca2592402a68779cafvandwalle return mostRecent; 87710652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde } 87810652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde 8792ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** @hide **/ 8802ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle public void setAutoJoinStatus(int status) { 881111fa0274d1d6620f9634783585387f3b773949evandwalle if (status < 0) status = 0; 8822ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle if (status == 0) { 8832ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle blackListTimestamp = 0; 8842ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } else if (status > autoJoinStatus) { 8852ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle blackListTimestamp = System.currentTimeMillis(); 8862ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 8872ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle autoJoinStatus = status; 8882ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 8892ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 8908dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy @Override 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 8928dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy StringBuilder sbuf = new StringBuilder(); 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.status == WifiConfiguration.Status.CURRENT) { 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("* "); 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (this.status == WifiConfiguration.Status.DISABLED) { 8968dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy sbuf.append("- DSBLE: ").append(this.disableReason).append(" "); 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("ID: ").append(this.networkId).append(" SSID: ").append(this.SSID). 8998a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng append(" BSSID: ").append(this.BSSID).append(" FQDN: ").append(this.FQDN). 9008a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng append(" REALM: ").append(this.naiRealm).append(" PRIO: ").append(this.priority). 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append('\n'); 90216a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle if (this.numConnectionFailures > 0) { 90316a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle sbuf.append(" numConnectFailures ").append(this.numConnectionFailures).append("\n"); 90416a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 90516a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle if (this.autoJoinStatus > 0) { 90616a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle sbuf.append(" autoJoinStatus ").append(this.numConnectionFailures).append("\n"); 90716a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 90894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.didSelfAdd) sbuf.append(" didSelfAdd"); 90994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.selfAdded) sbuf.append(" selfAdded"); 91094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.noInternetAccess) sbuf.append(" noInternetAccess"); 91194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.didSelfAdd || this.selfAdded || this.noInternetAccess) { 91216a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle sbuf.append("\n"); 91316a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" KeyMgmt:"); 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int k = 0; k < this.allowedKeyManagement.size(); k++) { 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedKeyManagement.get(k)) { 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (k < KeyMgmt.strings.length) { 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(KeyMgmt.strings[k]); 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" Protocols:"); 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int p = 0; p < this.allowedProtocols.size(); p++) { 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedProtocols.get(p)) { 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p < Protocol.strings.length) { 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(Protocol.strings[p]); 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" AuthAlgorithms:"); 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int a = 0; a < this.allowedAuthAlgorithms.size(); a++) { 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedAuthAlgorithms.get(a)) { 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a < AuthAlgorithm.strings.length) { 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(AuthAlgorithm.strings[a]); 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" PairwiseCiphers:"); 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int pc = 0; pc < this.allowedPairwiseCiphers.size(); pc++) { 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedPairwiseCiphers.get(pc)) { 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pc < PairwiseCipher.strings.length) { 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(PairwiseCipher.strings[pc]); 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" GroupCiphers:"); 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int gc = 0; gc < this.allowedGroupCiphers.size(); gc++) { 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedGroupCiphers.get(gc)) { 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gc < GroupCipher.strings.length) { 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(GroupCipher.strings[gc]); 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9725069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('\n').append(" PSK: "); 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.preSharedKey != null) { 9745069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('*'); 9755069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang } 97694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("\nEnterprise config:\n"); 9779b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff sbuf.append(enterpriseConfig); 9789b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 97994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("IP config:\n"); 9806346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append(mIpConfiguration.toString()); 981128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 98294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.creatorUid != 0) sbuf.append(" uid=" + Integer.toString(creatorUid)); 98394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.autoJoinBSSID != null) sbuf.append(" autoJoinBSSID=" + autoJoinBSSID); 98494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long now_ms = System.currentTimeMillis(); 985448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (this.blackListTimestamp != 0) { 98694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 987448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle long diff = now_ms - this.blackListTimestamp; 9882ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle if (diff <= 0) { 98994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" blackListed since <incorrect>"); 9902ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } else { 99194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" blackListed: ").append(Long.toString(diff/1000)).append( "sec"); 99294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 99394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 99494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnected != 0) { 99594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 99694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnected; 99794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 99894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnected since <incorrect>"); 99994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 100094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnected: ").append(Long.toString(diff/1000)).append( "sec"); 100194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 100294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 100394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnectionFailure != 0) { 100494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 100594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnectionFailure; 100694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 100794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnectionFailure since <incorrect>"); 100894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 100994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnectionFailure: ").append(Long.toString(diff/1000)); 101094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append( "sec"); 10112ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 10122ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 1013448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1014448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (this.linkedConfigurations != null) { 1015448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle for(String key : this.linkedConfigurations.keySet()) { 1016448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append(" linked: ").append(key); 1017448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1018448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1019448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1020448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (this.connectChoices != null) { 1021448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle for(String key : this.connectChoices.keySet()) { 1022448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle Integer choice = this.connectChoices.get(key); 1023448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (choice != null) { 1024448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append(" choice: ").append(key); 1025448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append(" = ").append(choice); 1026448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1027448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1028448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1029448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 103094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.scanResultCache != null) { 103194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("scan cache: "); 103294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle for(ScanResult result : this.scanResultCache.values()) { 103394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("{").append(result.BSSID).append(",").append(result.frequency); 103494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(",").append(result.level).append(",st="); 103594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(result.autoJoinStatus).append("} "); 103694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 103794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 103894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 103994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("triggeredLow: ").append(this.numUserTriggeredWifiDisableLowRSSI); 104094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" triggeredBad: ").append(this.numUserTriggeredWifiDisableBadRSSI); 104194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" triggeredNotHigh: ").append(this.numUserTriggeredWifiDisableNotHighRSSI); 104294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 104394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("ticksLow: ").append(this.numTicksAtLowRSSI); 104494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" ticksBad: ").append(this.numTicksAtBadRSSI); 104594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" ticksNotHigh: ").append(this.numTicksAtNotHighRSSI); 1046448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 104794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("triggeredJoin: ").append(this.numUserTriggeredJoinAttempts); 1048448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 104994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("autoJoinBailedDueToLowRssi: ").append(this.autoJoinBailedDueToLowRssi); 105094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 105194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("autoJoinUseAggressiveJoinAttemptThreshold: "); 105294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(this.autoJoinUseAggressiveJoinAttemptThreshold); 1053448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 10548f13548615f647a1208ace5369b504cb41149965vandwalle 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sbuf.toString(); 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Construct a WifiConfiguration from a scanned network 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scannedAP the scan result used to construct the config entry 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TODO: figure out whether this is a useful way to construct a new entry. 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration(ScanResult scannedAP) { 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project networkId = -1; 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = scannedAP.SSID; 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = scannedAP.BSSID; 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1070b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 1071b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String getPrintableSsid() { 1072b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (SSID == null) return ""; 1073b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff final int length = SSID.length(); 1074b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') { 1075b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID.substring(1, length - 1); 1076b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1077b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 1078b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** The ascii-encoded string format is P"<ascii-encoded-string>" 1079b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * The decoding is implemented in the supplicant for a newly configured 1080b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * network. 1081b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 1082b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') && 1083b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff (SSID.charAt(length-1) == '"')) { 1084b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded( 1085b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff SSID.substring(2, length - 1)); 1086b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return wifiSsid.toString(); 1087b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1088b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID; 1089b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1090b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 109126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff /** 109226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * Get an identifier for associating credentials with this config 109326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @param current configuration contains values for additional fields 109426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * that are not part of this configuration. Used 109526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * when a config with some fields is passed by an application. 109626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @throws IllegalStateException if config is invalid for key id generation 109726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @hide 109826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff */ 1099ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public String getKeyIdForCredentials(WifiConfiguration current) { 110026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff String keyMgmt = null; 110126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 110226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff try { 110326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Get current config details for fields that are not initialized 110426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(SSID)) SSID = current.SSID; 110526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.cardinality() == 0) { 110626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff allowedKeyManagement = current.allowedKeyManagement; 110726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 110826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 110926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt = KeyMgmt.strings[KeyMgmt.WPA_EAP]; 111026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 111126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 111226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt += KeyMgmt.strings[KeyMgmt.IEEE8021X]; 111326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 111426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 111526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(keyMgmt)) { 111626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Not an EAP network"); 111726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 111826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 111926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" + 112026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff trimStringForKeyId(enterpriseConfig.getKeyId(current != null ? 112126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff current.enterpriseConfig : null)); 112226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } catch (NullPointerException e) { 112326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Invalid config details"); 112426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 112526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 112626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 112726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff private String trimStringForKeyId(String string) { 112826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Remove quotes and spaces 112926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return string.replace("\"", "").replace(" ", ""); 113026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 113126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static BitSet readBitSet(Parcel src) { 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int cardinality = src.readInt(); 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BitSet set = new BitSet(); 11369b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < cardinality; i++) { 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project set.set(src.readInt()); 11389b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return set; 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void writeBitSet(Parcel dest, BitSet set) { 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nextSetBit = -1; 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(set.cardinality()); 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11489b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) { 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(nextSetBit); 11509b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1153ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** @hide */ 1154ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public int getAuthType() { 11550fd3b1be14ec6b6ba33140efa321b27dc3bf2862Vinit Deshapnde if (isValid() == false) { 11560fd3b1be14ec6b6ba33140efa321b27dc3bf2862Vinit Deshapnde throw new IllegalStateException("Invalid configuration"); 115726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 1158ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 1159ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_PSK; 1160ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) { 1161ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA2_PSK; 1162ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 1163ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_EAP; 1164ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 1165ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.IEEE8021X; 1166ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1167ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.NONE; 1168ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1169ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 11707c3606c103e95d3991267cca2592402a68779cafvandwalle /* @hide 11717c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the config key, this seems useful as a speed up since a lot of 11727c3606c103e95d3991267cca2592402a68779cafvandwalle * lookups in the config store are done and based on this key. 11737c3606c103e95d3991267cca2592402a68779cafvandwalle */ 11747c3606c103e95d3991267cca2592402a68779cafvandwalle String mCachedConfigKey; 11757c3606c103e95d3991267cca2592402a68779cafvandwalle 11767c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 11777c3606c103e95d3991267cca2592402a68779cafvandwalle * return the string used to calculate the hash in WifiConfigStore 11787c3606c103e95d3991267cca2592402a68779cafvandwalle * and uniquely identify this WifiConfiguration 11797c3606c103e95d3991267cca2592402a68779cafvandwalle */ 11807c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey(boolean allowCached) { 11817c3606c103e95d3991267cca2592402a68779cafvandwalle String key; 11827c3606c103e95d3991267cca2592402a68779cafvandwalle if (allowCached && mCachedConfigKey != null) { 11837c3606c103e95d3991267cca2592402a68779cafvandwalle key = mCachedConfigKey; 11847c3606c103e95d3991267cca2592402a68779cafvandwalle } else { 11857c3606c103e95d3991267cca2592402a68779cafvandwalle key = this.SSID; 11867c3606c103e95d3991267cca2592402a68779cafvandwalle if (key == null) 11877c3606c103e95d3991267cca2592402a68779cafvandwalle key = ""; 11887c3606c103e95d3991267cca2592402a68779cafvandwalle if (this.wepKeys[0] != null) { 11897c3606c103e95d3991267cca2592402a68779cafvandwalle key = key + "-WEP"; 11907c3606c103e95d3991267cca2592402a68779cafvandwalle } 11917c3606c103e95d3991267cca2592402a68779cafvandwalle if (this.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 11927c3606c103e95d3991267cca2592402a68779cafvandwalle key = key + "-" + KeyMgmt.strings[KeyMgmt.WPA_PSK]; 11937c3606c103e95d3991267cca2592402a68779cafvandwalle } 11947c3606c103e95d3991267cca2592402a68779cafvandwalle if (this.allowedKeyManagement.get(KeyMgmt.WPA_EAP) || 11957c3606c103e95d3991267cca2592402a68779cafvandwalle this.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 11967c3606c103e95d3991267cca2592402a68779cafvandwalle key = key + "-" + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 11977c3606c103e95d3991267cca2592402a68779cafvandwalle } 11987c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = key; 11997c3606c103e95d3991267cca2592402a68779cafvandwalle } 12007c3606c103e95d3991267cca2592402a68779cafvandwalle return key; 12017c3606c103e95d3991267cca2592402a68779cafvandwalle } 12027c3606c103e95d3991267cca2592402a68779cafvandwalle 12037c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 12047c3606c103e95d3991267cca2592402a68779cafvandwalle * get configKey, force calculating the config string 12057c3606c103e95d3991267cca2592402a68779cafvandwalle */ 12067c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey() { 12077c3606c103e95d3991267cca2592402a68779cafvandwalle return configKey(false); 12087c3606c103e95d3991267cca2592402a68779cafvandwalle } 12097c3606c103e95d3991267cca2592402a68779cafvandwalle 121013f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle /** @hide 121113f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle * return the config key string based on a scan result 121213f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle */ 121313f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle static public String configKey(ScanResult result) { 121413f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle String key = "\"" + result.SSID + "\""; 121513f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle 121613f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle if (result.capabilities.contains("WEP")) { 121713f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle key = key + "-WEP"; 121813f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle } 121913f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle 122013f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle if (result.capabilities.contains("PSK")) { 122113f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle key = key + "-" + KeyMgmt.strings[KeyMgmt.WPA_PSK]; 122213f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle } 122313f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle 122413f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle if (result.capabilities.contains("EAP")) { 122513f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle key = key + "-" + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 122613f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle } 122713f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle 122813f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle return key; 122913f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle } 12307c3606c103e95d3991267cca2592402a68779cafvandwalle 12316346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12326346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration getIpConfiguration() { 12336346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration; 12346346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12356346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12366346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12376346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpConfiguration(IpConfiguration ipConfiguration) { 12386346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = ipConfiguration; 12396346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12406346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12416346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12420a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public StaticIpConfiguration getStaticIpConfiguration() { 12430a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.getStaticIpConfiguration(); 12446346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12456346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12466346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12470a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { 12480a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration); 12496346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12506346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12516346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12526346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.IpAssignment getIpAssignment() { 12536346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.ipAssignment; 12546346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12556346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12566346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12576346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpAssignment(IpConfiguration.IpAssignment ipAssignment) { 12586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.ipAssignment = ipAssignment; 12596346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12606346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12616346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.ProxySettings getProxySettings() { 12636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.proxySettings; 12646346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12656346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12666346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12676346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxySettings(IpConfiguration.ProxySettings proxySettings) { 12686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = proxySettings; 12696346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12706346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 12716346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 12720a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxyInfo getHttpProxy() { 12730a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.httpProxy; 12740a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 12750a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 12760a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 12770a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setHttpProxy(ProxyInfo httpProxy) { 12780a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = httpProxy; 12790a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 12800a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 12810a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 12826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxy(ProxySettings settings, ProxyInfo proxy) { 12836346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = settings; 12840a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = proxy; 12856346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 12866346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 128713f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle /** Implement the Parcelable interface {@hide} */ 1288678979748585c5903125a404e448ad6c111dedadJaewan Kim public int describeContents() { 1289678979748585c5903125a404e448ad6c111dedadJaewan Kim return 0; 1290678979748585c5903125a404e448ad6c111dedadJaewan Kim } 1291678979748585c5903125a404e448ad6c111dedadJaewan Kim 1292128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** copy constructor {@hide} */ 1293128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public WifiConfiguration(WifiConfiguration source) { 1294128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff if (source != null) { 1295128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff networkId = source.networkId; 1296128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff status = source.status; 12978136de08ff4b5c4cca11220143f5905dca38cc26Isaac Levy disableReason = source.disableReason; 12988f13548615f647a1208ace5369b504cb41149965vandwalle disableReason = source.disableReason; 1299128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff SSID = source.SSID; 1300128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff BSSID = source.BSSID; 13018a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = source.FQDN; 13028a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng naiRealm = source.naiRealm; 1303128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff preSharedKey = source.preSharedKey; 1304128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 1305128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys = new String[4]; 13069b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 1307128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys[i] = source.wepKeys[i]; 13089b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 1309128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 1310128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepTxKeyIndex = source.wepTxKeyIndex; 1311128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff priority = source.priority; 1312128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff hiddenSSID = source.hiddenSSID; 1313128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedKeyManagement = (BitSet) source.allowedKeyManagement.clone(); 1314128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedProtocols = (BitSet) source.allowedProtocols.clone(); 1315128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedAuthAlgorithms = (BitSet) source.allowedAuthAlgorithms.clone(); 1316128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedPairwiseCiphers = (BitSet) source.allowedPairwiseCiphers.clone(); 1317128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedGroupCiphers = (BitSet) source.allowedGroupCiphers.clone(); 1318128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 13199b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(source.enterpriseConfig); 1320678979748585c5903125a404e448ad6c111dedadJaewan Kim 13217c3606c103e95d3991267cca2592402a68779cafvandwalle defaultGwMacAddress = source.defaultGwMacAddress; 13227c3606c103e95d3991267cca2592402a68779cafvandwalle 13236346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(source.mIpConfiguration); 13246346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 13257c3606c103e95d3991267cca2592402a68779cafvandwalle if ((source.scanResultCache != null) && (source.scanResultCache.size() > 0)) { 13267c3606c103e95d3991267cca2592402a68779cafvandwalle scanResultCache = new HashMap<String, ScanResult>(); 13277c3606c103e95d3991267cca2592402a68779cafvandwalle scanResultCache.putAll(source.scanResultCache); 13287c3606c103e95d3991267cca2592402a68779cafvandwalle } 13297c3606c103e95d3991267cca2592402a68779cafvandwalle 13307c3606c103e95d3991267cca2592402a68779cafvandwalle if ((source.connectChoices != null) && (source.connectChoices.size() > 0)) { 13317c3606c103e95d3991267cca2592402a68779cafvandwalle connectChoices = new HashMap<String, Integer>(); 13327c3606c103e95d3991267cca2592402a68779cafvandwalle connectChoices.putAll(source.connectChoices); 13337c3606c103e95d3991267cca2592402a68779cafvandwalle } 13347c3606c103e95d3991267cca2592402a68779cafvandwalle 13357c3606c103e95d3991267cca2592402a68779cafvandwalle if ((source.linkedConfigurations != null) 13367c3606c103e95d3991267cca2592402a68779cafvandwalle && (source.linkedConfigurations.size() > 0)) { 13377c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations = new HashMap<String, Integer>(); 13387c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations.putAll(source.linkedConfigurations); 13397c3606c103e95d3991267cca2592402a68779cafvandwalle } 13407c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = null; //force null configKey 13417c3606c103e95d3991267cca2592402a68779cafvandwalle autoJoinStatus = source.autoJoinStatus; 1342e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = source.selfAdded; 1343448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle noInternetAccess = source.noInternetAccess; 13447c3606c103e95d3991267cca2592402a68779cafvandwalle if (source.visibility != null) { 13457c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = new Visibility(source.visibility); 13467c3606c103e95d3991267cca2592402a68779cafvandwalle } 13473a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 13483a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle lastFailure = source.lastFailure; 13498f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = source.didSelfAdd; 13508f13548615f647a1208ace5369b504cb41149965vandwalle lastConnectUid = source.lastConnectUid; 13518f13548615f647a1208ace5369b504cb41149965vandwalle lastUpdateUid = source.lastUpdateUid; 13528f13548615f647a1208ace5369b504cb41149965vandwalle creatorUid = source.creatorUid; 13532d0f71eea20470985abde98d759910a1ac40b257vandwalle peerWifiConfiguration = source.peerWifiConfiguration; 13542ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle blackListTimestamp = source.blackListTimestamp; 1355111fa0274d1d6620f9634783585387f3b773949evandwalle lastConnected = source.lastConnected; 1356111fa0274d1d6620f9634783585387f3b773949evandwalle lastDisconnected = source.lastDisconnected; 1357154b2cf6bbb99ee258b289846183172139a87dbavandwalle lastConnectionFailure = source.lastConnectionFailure; 1358154b2cf6bbb99ee258b289846183172139a87dbavandwalle numConnectionFailures = source.numConnectionFailures; 1359154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverride = source.numScorerOverride; 1360154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverrideAndSwitchedNetwork = source.numScorerOverrideAndSwitchedNetwork; 13614eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle numAssociation = source.numAssociation; 1362448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableLowRSSI = source.numUserTriggeredWifiDisableLowRSSI; 1363448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableBadRSSI = source.numUserTriggeredWifiDisableBadRSSI; 1364448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableNotHighRSSI = source.numUserTriggeredWifiDisableNotHighRSSI; 1365448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtLowRSSI = source.numTicksAtLowRSSI; 1366448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtBadRSSI = source.numTicksAtBadRSSI; 1367448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtNotHighRSSI = source.numTicksAtNotHighRSSI; 1368448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredJoinAttempts = source.numUserTriggeredJoinAttempts; 1369e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle autoJoinBSSID = source.autoJoinBSSID; 137094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle autoJoinUseAggressiveJoinAttemptThreshold 137194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle = source.autoJoinUseAggressiveJoinAttemptThreshold; 137294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle autoJoinBailedDueToLowRssi = source.autoJoinBailedDueToLowRssi; 13736346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 13749e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff } 13759e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff 13765fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle /** {@hide} */ 13775fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle //public static final int NOTHING_TAG = 0; 13785fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle /** {@hide} */ 13795fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle //public static final int SCAN_CACHE_TAG = 1; 13805fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 13826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(networkId); 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(status); 13868dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy dest.writeInt(disableReason); 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(SSID); 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 1389e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle dest.writeString(autoJoinBSSID); 13908a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng dest.writeString(FQDN); 13918a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng dest.writeString(naiRealm); 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(preSharedKey); 13939b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (String wepKey : wepKeys) { 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(wepKey); 13959b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(wepTxKeyIndex); 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(hiddenSSID ? 1 : 0); 13995f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeInt(requirePMF ? 1 : 0); 14005f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeString(updateIdentifier); 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedKeyManagement); 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedProtocols); 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedAuthAlgorithms); 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedPairwiseCiphers); 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedGroupCiphers); 14074337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 14089b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff dest.writeParcelable(enterpriseConfig, flags); 1409678979748585c5903125a404e448ad6c111dedadJaewan Kim 14106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim dest.writeParcelable(mIpConfiguration, flags); 14117c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(dhcpServer); 14127c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(defaultGwMacAddress); 14137c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeInt(autoJoinStatus); 1414e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle dest.writeInt(selfAdded ? 1 : 0); 14158f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(didSelfAdd ? 1 : 0); 1416448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(noInternetAccess ? 1 : 0); 14178f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(creatorUid); 14188f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastConnectUid); 14198f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastUpdateUid); 14202ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle dest.writeLong(blackListTimestamp); 1421154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeLong(lastConnectionFailure); 1422154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numConnectionFailures); 1423154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverride); 1424154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverrideAndSwitchedNetwork); 14254eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(numAssociation); 1426448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableLowRSSI); 1427448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableBadRSSI); 1428448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableNotHighRSSI); 1429448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtLowRSSI); 1430448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtBadRSSI); 1431448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtNotHighRSSI); 1432448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredJoinAttempts); 143394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle dest.writeInt(autoJoinUseAggressiveJoinAttemptThreshold); 143494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle dest.writeInt(autoJoinBailedDueToLowRssi ? 1 : 0); 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<WifiConfiguration> CREATOR = 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<WifiConfiguration>() { 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration createFromParcel(Parcel in) { 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiConfiguration config = new WifiConfiguration(); 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.networkId = in.readInt(); 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.status = in.readInt(); 14448dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy config.disableReason = in.readInt(); 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.SSID = in.readString(); 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.BSSID = in.readString(); 1447e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle config.autoJoinBSSID = in.readString(); 14488a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng config.FQDN = in.readString(); 14498a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng config.naiRealm = in.readString(); 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.preSharedKey = in.readString(); 14519b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < config.wepKeys.length; i++) { 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepKeys[i] = in.readString(); 14539b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepTxKeyIndex = in.readInt(); 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.priority = in.readInt(); 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.hiddenSSID = in.readInt() != 0; 14575f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.requirePMF = in.readInt() != 0; 14585f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.updateIdentifier = in.readString(); 14595f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedKeyManagement = readBitSet(in); 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedProtocols = readBitSet(in); 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedAuthAlgorithms = readBitSet(in); 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedPairwiseCiphers = readBitSet(in); 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedGroupCiphers = readBitSet(in); 14654337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 14669b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff config.enterpriseConfig = in.readParcelable(null); 146731b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff 14686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim config.mIpConfiguration = in.readParcelable(null); 14697c3606c103e95d3991267cca2592402a68779cafvandwalle config.dhcpServer = in.readString(); 14707c3606c103e95d3991267cca2592402a68779cafvandwalle config.defaultGwMacAddress = in.readString(); 14717c3606c103e95d3991267cca2592402a68779cafvandwalle config.autoJoinStatus = in.readInt(); 1472e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle config.selfAdded = in.readInt() != 0; 14738f13548615f647a1208ace5369b504cb41149965vandwalle config.didSelfAdd = in.readInt() != 0; 1474448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.noInternetAccess = in.readInt() != 0; 14758f13548615f647a1208ace5369b504cb41149965vandwalle config.creatorUid = in.readInt(); 14768f13548615f647a1208ace5369b504cb41149965vandwalle config.lastConnectUid = in.readInt(); 14778f13548615f647a1208ace5369b504cb41149965vandwalle config.lastUpdateUid = in.readInt(); 14782ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle config.blackListTimestamp = in.readLong(); 1479154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.lastConnectionFailure = in.readLong(); 1480154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numConnectionFailures = in.readInt(); 1481154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverride = in.readInt(); 1482154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverrideAndSwitchedNetwork = in.readInt(); 14834eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle config.numAssociation = in.readInt(); 1484448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableLowRSSI = in.readInt(); 1485448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableBadRSSI = in.readInt(); 1486448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableNotHighRSSI = in.readInt(); 1487448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtLowRSSI = in.readInt(); 1488448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtBadRSSI = in.readInt(); 1489448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtNotHighRSSI = in.readInt(); 1490448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredJoinAttempts = in.readInt(); 149194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle config.autoJoinUseAggressiveJoinAttemptThreshold = in.readInt(); 149294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle config.autoJoinBailedDueToLowRssi = in.readInt() != 0; 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return config; 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration[] newArray(int size) { 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WifiConfiguration[size]; 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1501