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; 203e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faberimport android.content.pm.PackageManager; 216346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration; 226346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.IpConfiguration.ProxySettings; 236346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.net.ProxyInfo; 240a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colittiimport android.net.StaticIpConfiguration; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 266346155c5a48495944041e65ec279c88b0fa1391Jaewan Kimimport android.os.Parcelable; 276fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowskiimport android.os.UserHandle; 2826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriffimport android.text.TextUtils; 29aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport android.util.BackupUtils; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.ByteArrayOutputStream; 32aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.DataInputStream; 33aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.DataOutputStream; 34aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddyimport java.io.IOException; 358d106780b6a638552749e54e169fc72537d4bcccxinheimport java.util.Arrays; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.BitSet; 378d106780b6a638552749e54e169fc72537d4bcccxinheimport java.util.HashMap; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class representing a configured Wi-Fi network, including the 419b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff * security configuration. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43678979748585c5903125a404e448ad6c111dedadJaewan Kimpublic class WifiConfiguration implements Parcelable { 449b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff private static final String TAG = "WifiConfiguration"; 45aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 46aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Current Version of the Backup Serializer. 47aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 48aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy private static final int BACKUP_VERSION = 2; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ssidVarName = "ssid"; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String bssidVarName = "bssid"; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String pskVarName = "psk"; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] wepKeyVarNames = { "wep_key0", "wep_key1", "wep_key2", "wep_key3" }; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String wepTxKeyIdxVarName = "wep_tx_keyidx"; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String priorityVarName = "priority"; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String hiddenSSIDVarName = "scan_ssid"; 635ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff /** {@hide} */ 645f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String pmfVarName = "ieee80211w"; 655f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 665f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public static final String updateIdentiferVarName = "update_identifier"; 675f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** {@hide} */ 685ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff public static final int INVALID_NETWORK_ID = -1; 69a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 70a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** {@hide} */ 71a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande private String mPasspointManagementObjectTree; 72a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized key management schemes. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class KeyMgmt { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private KeyMgmt() { } 785069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA is not used; plaintext or static WEP could be used. */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA pre-shared key (requires {@code preSharedKey} to be specified). */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_PSK = 1; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA using EAP authentication. Generally used with an external authentication server. */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_EAP = 2; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IEEE 802.1X using EAP authentication and (optionally) dynamically 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generated WEP keys. */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IEEE8021X = 3; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 89ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** WPA2 pre-shared key for use with soft access point 90ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * (requires {@code preSharedKey} to be specified). 91ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * @hide 92ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff */ 93b625377b1a9b324254fcde9928eade4473712486Jeremy Klein @SystemApi 94ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final int WPA2_PSK = 4; 95a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** 96a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * Hotspot 2.0 r2 OSEN: 97a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 98a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 99a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int OSEN = 5; 100ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "key_mgmt"; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 103ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final String[] strings = { "NONE", "WPA_PSK", "WPA_EAP", "IEEE8021X", 104a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande "WPA2_PSK", "OSEN" }; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1065069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized security protocols. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Protocol { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Protocol() { } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA/IEEE 802.11i/D3.0 */ 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA = 0; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA2/IEEE 802.11i */ 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RSN = 1; 117a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** HS2.0 r2 OSEN 118a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 119a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 120a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int OSEN = 2; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "proto"; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 124a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final String[] strings = { "WPA", "RSN", "OSEN" }; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized IEEE 802.11 authentication algorithms. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class AuthAlgorithm { 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AuthAlgorithm() { } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Open System authentication (required for WPA/WPA2) */ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OPEN = 0; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Shared Key authentication (requires static WEP keys) */ 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SHARED = 1; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** LEAP/Network EAP (only used with LEAP) */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LEAP = 2; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "auth_alg"; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "OPEN", "SHARED", "LEAP" }; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized pairwise ciphers for WPA. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PairwiseCipher { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PairwiseCipher() { } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Use only Group keys (deprecated) */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 1; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 2; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "pairwise"; 1595069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "NONE", "TKIP", "CCMP" }; 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized group ciphers. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class GroupCipher { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GroupCipher() { } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP40 = 0; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP104 = 1; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 2; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 3; 183a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** Hotspot 2.0 r2 OSEN 184a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande * @hide 185a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande */ 186a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final int GTK_NOT_USED = 4; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "group"; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 190a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public static final String[] strings = 191a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande { "WEP40", "WEP104", "TKIP", "CCMP", "GTK_NOT_USED" }; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Possible status of a network configuration. */ 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Status { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Status() { } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** this is the network we are currently connected to */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CURRENT = 0; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will not attempt to use this network */ 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DISABLED = 1; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will consider this network available for association */ 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ENABLED = 2; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "current", "disabled", "enabled" }; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2088dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 2091ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti public static final int UNKNOWN_UID = -1; 2101ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID number that the supplicant uses to identify this 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network configuration entry. This must be passed as an argument 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to most calls into the supplicant. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int networkId; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The current status of this network configuration entry. 2208d106780b6a638552749e54e169fc72537d4bcccxinhe * Fixme We need remove this field to use only Quality network selection status only 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Status 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int status; 2248dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 2258dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The network's SSID. Can either be an ASCII string, 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which must be enclosed in double quotation marks 2284e8620f868e2490782ebb960404140ea9482c91dBen Dodson * (e.g., {@code "MyNetwork"}, or a string of 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hex digits,which are not enclosed in quotes 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (e.g., {@code 01a243f405}). 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When set, this network configuration entry should only be used when 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associating with the AP having the specified BSSID. The value is 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a string in the format of an Ethernet MAC address, e.g., 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 240a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 241a0be0fb2709124a567f89114b1d8e80f74452edcxinhe /** 242d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * 2GHz band. 243d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * @hide 244d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu */ 245d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public static final int AP_BAND_2GHZ = 0; 246d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu 247d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu /** 248d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * 5GHz band. 249d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu * @hide 250d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu */ 251d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public static final int AP_BAND_5GHZ = 1; 252d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu 253d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu /** 254a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * The band which AP resides on 255a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 0-2G 1-5G 256a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * By default, 2G is chosen 2577e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe * @hide 258a0be0fb2709124a567f89114b1d8e80f74452edcxinhe */ 259d6676166599b7cadd043b0bd400aeace3059621bPeter Qiu public int apBand = AP_BAND_2GHZ; 260a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 261a0be0fb2709124a567f89114b1d8e80f74452edcxinhe /** 262a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * The channel which AP resides on,currently, US only 263a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 2G 1-11 264a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 5G 36,40,44,48,149,153,157,161,165 265a0be0fb2709124a567f89114b1d8e80f74452edcxinhe * 0 - find a random available channel according to the apBand 2667e5e791d22e76eb576fd5cf6dd5437b8050b0438xinhe * @hide 267a0be0fb2709124a567f89114b1d8e80f74452edcxinhe */ 268a0be0fb2709124a567f89114b1d8e80f74452edcxinhe public int apChannel = 0; 269a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 2708a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pre-shared key for use with WPA-PSK. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of this key is read, the actual key is 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String preSharedKey; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Up to four WEP keys. Either an ASCII string enclosed in double 2804e8620f868e2490782ebb960404140ea9482c91dBen Dodson * quotation marks (e.g., {@code "abcdef"} or a string 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of hex digits (e.g., {@code 0102030405}). 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of one of these keys is read, the actual key is 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] wepKeys; 2885069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default WEP key index, ranging from 0 to 3. */ 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int wepTxKeyIndex; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority determines the preference given to a network by {@code wpa_supplicant} 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when choosing an access point with which to associate. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a network that does not broadcast its SSID, so an 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID-specific probe request must be used for scans. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hiddenSSID; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3055f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * This is a network that requries Protected Management Frames (PMF). 3065f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 3075f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 3085f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public boolean requirePMF; 3095f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 3105f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 3115f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * Update identifier, for Passpoint network. 3125f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng * @hide 3135f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng */ 3145f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng public String updateIdentifier; 3155f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 3165f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng /** 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of key management protocols supported by this configuration. 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link KeyMgmt} for descriptions of the values. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA-PSK WPA-EAP. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedKeyManagement; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of security protocols supported by this configuration. 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link Protocol} for descriptions of the values. 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA RSN. 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedProtocols; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of authentication protocols supported by this configuration. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link AuthAlgorithm} for descriptions of the values. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to automatic selection. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedAuthAlgorithms; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of pairwise ciphers for WPA supported by this configuration. 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link PairwiseCipher} for descriptions of the values. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP. 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedPairwiseCiphers; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of group ciphers supported by this configuration. 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link GroupCipher} for descriptions of the values. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP WEP104 WEP40. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedGroupCiphers; 3469b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff /** 34726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * The enterprise configuration details specifying the EAP method, 34826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * certificates and other settings associated with the EAP. 3499b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff */ 3509b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff public WifiEnterpriseConfig enterpriseConfig; 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 352678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 353b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande * Fully qualified domain name of a passpoint configuration 354b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 355b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande public String FQDN; 356b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 357b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 358a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande * Name of passpoint credential provider 359b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 360b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande public String providerFriendlyName; 361b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 362b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 363a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande * Roaming Consortium Id list for passpoint credential; identifies a set of networks where 364a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande * passpoint credential will be considered valid 365b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande */ 3667226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande public long[] roamingConsortiumIds; 367b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande 368b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande /** 369678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 3706fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * This network configuration is visible to and usable by other users on the 3716fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * same device. 3726fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski */ 3736fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski public boolean shared; 3746fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski 3756fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski /** 3766fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski * @hide 377678979748585c5903125a404e448ad6c111dedadJaewan Kim */ 3786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim private IpConfiguration mIpConfiguration; 379678979748585c5903125a404e448ad6c111dedadJaewan Kim 380678979748585c5903125a404e448ad6c111dedadJaewan Kim /** 381678979748585c5903125a404e448ad6c111dedadJaewan Kim * @hide 3827c3606c103e95d3991267cca2592402a68779cafvandwalle * dhcp server MAC address if known 3837c3606c103e95d3991267cca2592402a68779cafvandwalle */ 3847c3606c103e95d3991267cca2592402a68779cafvandwalle public String dhcpServer; 3857c3606c103e95d3991267cca2592402a68779cafvandwalle 3867c3606c103e95d3991267cca2592402a68779cafvandwalle /** 3877c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 3887c3606c103e95d3991267cca2592402a68779cafvandwalle * default Gateway MAC address if known 3897c3606c103e95d3991267cca2592402a68779cafvandwalle */ 3907c3606c103e95d3991267cca2592402a68779cafvandwalle public String defaultGwMacAddress; 3917c3606c103e95d3991267cca2592402a68779cafvandwalle 3927c3606c103e95d3991267cca2592402a68779cafvandwalle /** 3937c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 3943a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle * last failure 3953a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle */ 3963a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle public String lastFailure; 3973a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 3983a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle /** 3993a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle * @hide 400ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * last time we connected, this configuration had validated internet access 401448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 402ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public boolean validatedInternetAccess; 403448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 404448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 405448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 406b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * The number of beacon intervals between Delivery Traffic Indication Maps (DTIM) 407b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * This value is populated from scan results that contain Beacon Frames, which are infrequent. 408b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * The value is not guaranteed to be set or current (Although it SHOULDNT change once set) 409b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * Valid values are from 1 - 255. Initialized here as 0, use this to check if set. 410b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne */ 411b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne public int dtimInterval = 0; 412b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne 413b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne /** 414b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne * @hide 4158f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of app creating the configuration 4168f13548615f647a1208ace5369b504cb41149965vandwalle */ 417adae06be9bfd8cb756e1793b52e682eb87258968Chelsea Derrick @SystemApi 4188f13548615f647a1208ace5369b504cb41149965vandwalle public int creatorUid; 4198f13548615f647a1208ace5369b504cb41149965vandwalle 4208f13548615f647a1208ace5369b504cb41149965vandwalle /** 4218f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4228f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app issuing a connection related command 4238f13548615f647a1208ace5369b504cb41149965vandwalle */ 4248f13548615f647a1208ace5369b504cb41149965vandwalle public int lastConnectUid; 4258f13548615f647a1208ace5369b504cb41149965vandwalle 4268f13548615f647a1208ace5369b504cb41149965vandwalle /** 4278f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4288f13548615f647a1208ace5369b504cb41149965vandwalle * Uid of last app modifying the configuration 4298f13548615f647a1208ace5369b504cb41149965vandwalle */ 430eb8f329a5e8d4df80447ab9676761f9743d20cd4Chelsea Derrick @SystemApi 4318f13548615f647a1208ace5369b504cb41149965vandwalle public int lastUpdateUid; 4328f13548615f647a1208ace5369b504cb41149965vandwalle 4338f13548615f647a1208ace5369b504cb41149965vandwalle /** 4348f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 4353e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Universal name for app creating the configuration 4363e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * see {#link {@link PackageManager#getNameForUid(int)} 4373e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4383e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber @SystemApi 4393e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public String creatorName; 4403e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4413e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 4423e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 4433e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Universal name for app updating the configuration 4443e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * see {#link {@link PackageManager#getNameForUid(int)} 4453e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4463e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber @SystemApi 4473e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public String lastUpdateName; 4483e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 4503e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 4513e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Status of user approval for connection 4523e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 4533e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public int userApproved = USER_UNSPECIFIED; 4543e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 4552ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle /** The Below RSSI thresholds are used to configure AutoJoin 4562ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * - GOOD/LOW/BAD thresholds are used so as to calculate link score 4572e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNWANTED_SOFT are used by the blacklisting logic so as to handle 4582e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the unwanted network message coming from CS 4592e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - UNBLACKLIST thresholds are used so as to tweak the speed at which 4602e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network is unblacklisted (i.e. if 4612ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle * it is seen with good RSSI, it is blacklisted faster) 4622e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * - INITIAL_AUTOJOIN_ATTEMPT, used to determine how close from 4632e93c38fa6fad224e56a45ff4244bdd538aec846vandwalle * the network we need to be before autojoin kicks in 4642ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle */ 4657c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide **/ 4667c3606c103e95d3991267cca2592402a68779cafvandwalle public static int INVALID_RSSI = -127; 4677c3606c103e95d3991267cca2592402a68779cafvandwalle 4687c3606c103e95d3991267cca2592402a68779cafvandwalle /** 4697c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 4707c3606c103e95d3991267cca2592402a68779cafvandwalle * A summary of the RSSI and Band status for that configuration 4717c3606c103e95d3991267cca2592402a68779cafvandwalle * This is used as a temporary value by the auto-join controller 4727c3606c103e95d3991267cca2592402a68779cafvandwalle */ 4736f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande public static final class Visibility { 4747c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi5; // strongest 5GHz RSSI 4757c3606c103e95d3991267cca2592402a68779cafvandwalle public int rssi24; // strongest 2.4GHz RSSI 4767c3606c103e95d3991267cca2592402a68779cafvandwalle public int num5; // number of BSSIDs on 5GHz 4777c3606c103e95d3991267cca2592402a68779cafvandwalle public int num24; // number of BSSIDs on 2.4GHz 478e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age5; // timestamp of the strongest 5GHz BSSID (last time it was seen) 479e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public long age24; // timestamp of the strongest 2.4GHz BSSID (last time it was seen) 480e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID24; 481e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle public String BSSID5; 48272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int score; // Debug only, indicate last score used for autojoin/cell-handover 48372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int currentNetworkBoost; // Debug only, indicate boost applied to RSSI if current 48472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int bandPreferenceBoost; // Debug only, indicate boost applied to RSSI if current 48572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public int lastChoiceBoost; // Debug only, indicate last choice applied to this configuration 48672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle public String lastChoiceConfig; // Debug only, indicate last choice applied to this configuration 4875fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 4885fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility() { 4897c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = INVALID_RSSI; 4907c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = INVALID_RSSI; 4917c3606c103e95d3991267cca2592402a68779cafvandwalle } 4925fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 4935fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public Visibility(Visibility source) { 4947c3606c103e95d3991267cca2592402a68779cafvandwalle rssi5 = source.rssi5; 4957c3606c103e95d3991267cca2592402a68779cafvandwalle rssi24 = source.rssi24; 4967c3606c103e95d3991267cca2592402a68779cafvandwalle age24 = source.age24; 4977c3606c103e95d3991267cca2592402a68779cafvandwalle age5 = source.age5; 4987c3606c103e95d3991267cca2592402a68779cafvandwalle num24 = source.num24; 4997c3606c103e95d3991267cca2592402a68779cafvandwalle num5 = source.num5; 500e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID5 = source.BSSID5; 501e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle BSSID24 = source.BSSID24; 5027c3606c103e95d3991267cca2592402a68779cafvandwalle } 5035fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle 5045fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle @Override 5055fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle public String toString() { 5065fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle StringBuilder sbuf = new StringBuilder(); 5075fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("["); 5085fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi24 > INVALID_RSSI) { 5095fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi24)); 5105fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5115fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num24)); 512e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID24 != null) sbuf.append(",").append(BSSID24); 5135fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 51472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append("; "); 5155fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle if (rssi5 > INVALID_RSSI) { 5165fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(rssi5)); 5175fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(","); 5185fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append(Integer.toString(num5)); 519e26bc8fda7b2d9dad3882ec3fb22739b80d5390fvandwalle if (BSSID5 != null) sbuf.append(",").append(BSSID5); 5205fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 52172e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle if (score != 0) { 52272e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append("; ").append(score); 52372e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(currentNetworkBoost); 52472e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(bandPreferenceBoost); 52572e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle if (lastChoiceConfig != null) { 52672e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(lastChoiceBoost); 52772e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle sbuf.append(", ").append(lastChoiceConfig); 52872e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle } 52972e1d3f53826c2f19727e30e4b576a0e2d0e3728vandwalle } 5305fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sbuf.append("]"); 5315fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle return sbuf.toString(); 5325fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle } 5337c3606c103e95d3991267cca2592402a68779cafvandwalle } 5347c3606c103e95d3991267cca2592402a68779cafvandwalle 5357c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5367c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the visibility status of this configuration. 5377c3606c103e95d3991267cca2592402a68779cafvandwalle * Visibility can change at any time depending on scan results availability. 5387c3606c103e95d3991267cca2592402a68779cafvandwalle * Owner of the WifiConfiguration is responsible to set this field based on 5397c3606c103e95d3991267cca2592402a68779cafvandwalle * recent scan results. 5407c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5417c3606c103e95d3991267cca2592402a68779cafvandwalle public Visibility visibility; 5427c3606c103e95d3991267cca2592402a68779cafvandwalle 5437c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 5447c3606c103e95d3991267cca2592402a68779cafvandwalle * calculate and set Visibility for that configuration. 5457c3606c103e95d3991267cca2592402a68779cafvandwalle * 5467c3606c103e95d3991267cca2592402a68779cafvandwalle * age in milliseconds: we will consider only ScanResults that are more recent, 5477c3606c103e95d3991267cca2592402a68779cafvandwalle * i.e. younger. 5487c3606c103e95d3991267cca2592402a68779cafvandwalle ***/ 5496f6c781cca66cabc1f06be368a6dfedceb88ed0eVinit Deshpande public void setVisibility(Visibility status) { 5507c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = status; 5517c3606c103e95d3991267cca2592402a68779cafvandwalle } 5527c3606c103e95d3991267cca2592402a68779cafvandwalle 5533e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber // States for the userApproved field 5543e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5553e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5563e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User hasn't specified if connection is okay 5573e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5583e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_UNSPECIFIED = 0; 5593e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5603e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5613e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User has approved this for connection 5623e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5633e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_APPROVED = 1; 5643e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5653e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5663e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * User has banned this from connection 5673e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5683e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_BANNED = 2; 5693e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** 5703e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * @hide 5713e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber * Waiting for user input 5723e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber */ 5733e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static final int USER_PENDING = 3; 5743e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 5757c3606c103e95d3991267cca2592402a68779cafvandwalle /** 5767c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 577ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * Number of reports indicating no Internet Access 578ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle */ 579ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public int numNoInternetAccessReports; 580ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle 581ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle /** 582ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * @hide 583ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * For debug: date at which the config was last updated 584ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle */ 585ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle public String updateTime; 586ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle 587ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle /** 588ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * @hide 589ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * For debug: date at which the config was last updated 590ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle */ 591ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle public String creationTime; 592ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle 593ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle /** 594ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle * @hide 595ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * The WiFi configuration is considered to have no internet access for purpose of autojoining 596ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * if there has been a report of it having no internet access, and, it never have had 597ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * internet access in the past. 598ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle */ 599ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle public boolean hasNoInternetAccess() { 600ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle return numNoInternetAccessReports > 0 && !validatedInternetAccess; 601ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle } 602ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle 603ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle /** 6041248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * The WiFi configuration is expected not to have Internet access (e.g., a wireless printer, a 6051248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * Chromecast hotspot, etc.). This will be set if the user explicitly confirms a connection to 6061248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * this configuration and selects "don't ask again". 6071248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti * @hide 6081248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti */ 6091248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti public boolean noInternetAccessExpected; 6101248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti 6111248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti /** 612ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle * @hide 613154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was connected to this configuration. 614111fa0274d1d6620f9634783585387f3b773949evandwalle */ 615111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastConnected; 616111fa0274d1d6620f9634783585387f3b773949evandwalle 617111fa0274d1d6620f9634783585387f3b773949evandwalle /** 618111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 619154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system tried to connect and failed. 620154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 621154b2cf6bbb99ee258b289846183172139a87dbavandwalle public long lastConnectionFailure; 622154b2cf6bbb99ee258b289846183172139a87dbavandwalle 623154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 624154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 6258650c035609507340e3a66459cea16ef08cd03a6vandwalle * Last time the system tried to roam and failed because of authentication failure or DHCP 6268650c035609507340e3a66459cea16ef08cd03a6vandwalle * RENEW failure. 6278650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6288650c035609507340e3a66459cea16ef08cd03a6vandwalle public long lastRoamingFailure; 6298650c035609507340e3a66459cea16ef08cd03a6vandwalle 6308650c035609507340e3a66459cea16ef08cd03a6vandwalle /** @hide */ 6318650c035609507340e3a66459cea16ef08cd03a6vandwalle public static int ROAMING_FAILURE_IP_CONFIG = 1; 6328650c035609507340e3a66459cea16ef08cd03a6vandwalle /** @hide */ 6338650c035609507340e3a66459cea16ef08cd03a6vandwalle public static int ROAMING_FAILURE_AUTH_FAILURE = 2; 6348650c035609507340e3a66459cea16ef08cd03a6vandwalle 6358650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6368650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 6378650c035609507340e3a66459cea16ef08cd03a6vandwalle * Initial amount of time this Wifi configuration gets blacklisted for network switching 6388650c035609507340e3a66459cea16ef08cd03a6vandwalle * because of roaming failure 6398650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6408650c035609507340e3a66459cea16ef08cd03a6vandwalle public long roamingFailureBlackListTimeMilli = 1000; 6418650c035609507340e3a66459cea16ef08cd03a6vandwalle 6428650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6438650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 6448650c035609507340e3a66459cea16ef08cd03a6vandwalle * Last roaming failure reason code 6458650c035609507340e3a66459cea16ef08cd03a6vandwalle */ 6468650c035609507340e3a66459cea16ef08cd03a6vandwalle public int lastRoamingFailureReason; 6478650c035609507340e3a66459cea16ef08cd03a6vandwalle 6488650c035609507340e3a66459cea16ef08cd03a6vandwalle /** 6498650c035609507340e3a66459cea16ef08cd03a6vandwalle * @hide 650154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Last time the system was disconnected to this configuration. 651111fa0274d1d6620f9634783585387f3b773949evandwalle */ 652111fa0274d1d6620f9634783585387f3b773949evandwalle public long lastDisconnected; 6532ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle 6547c3606c103e95d3991267cca2592402a68779cafvandwalle /** 655e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * Set if the configuration was self added by the framework 6568f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is cleared if we get a connect/save/ update or 6578f13548615f647a1208ace5369b504cb41149965vandwalle * any wifiManager command that indicate the user interacted with the configuration 6588f13548615f647a1208ace5369b504cb41149965vandwalle * since we will now consider that the configuration belong to him. 659e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle * @hide 660e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle */ 661e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle public boolean selfAdded; 662e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle 663e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle /** 6648f13548615f647a1208ace5369b504cb41149965vandwalle * Set if the configuration was self added by the framework 6658f13548615f647a1208ace5369b504cb41149965vandwalle * This boolean is set once and never cleared. It is used 6668f13548615f647a1208ace5369b504cb41149965vandwalle * so as we never loose track of who created the 6678f13548615f647a1208ace5369b504cb41149965vandwalle * configuration in the first place. 6688f13548615f647a1208ace5369b504cb41149965vandwalle * @hide 6698f13548615f647a1208ace5369b504cb41149965vandwalle */ 6708f13548615f647a1208ace5369b504cb41149965vandwalle public boolean didSelfAdd; 6718f13548615f647a1208ace5369b504cb41149965vandwalle 6728f13548615f647a1208ace5369b504cb41149965vandwalle /** 673154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Peer WifiConfiguration this WifiConfiguration was added for 6742d0f71eea20470985abde98d759910a1ac40b257vandwalle * @hide 6752d0f71eea20470985abde98d759910a1ac40b257vandwalle */ 6762d0f71eea20470985abde98d759910a1ac40b257vandwalle public String peerWifiConfiguration; 6772d0f71eea20470985abde98d759910a1ac40b257vandwalle 6782d0f71eea20470985abde98d759910a1ac40b257vandwalle /** 6797c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 6807c3606c103e95d3991267cca2592402a68779cafvandwalle * Indicate that a WifiConfiguration is temporary and should not be saved 6817c3606c103e95d3991267cca2592402a68779cafvandwalle * nor considered by AutoJoin. 6827c3606c103e95d3991267cca2592402a68779cafvandwalle */ 6837c3606c103e95d3991267cca2592402a68779cafvandwalle public boolean ephemeral; 6847c3606c103e95d3991267cca2592402a68779cafvandwalle 6857c3606c103e95d3991267cca2592402a68779cafvandwalle /** 6867c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 687f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * A hint about whether or not the network represented by this WifiConfiguration 688f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * is metered. 689f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin */ 690f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin public boolean meteredHint; 691f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin 692f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin /** 693f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin * @hide 694fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * Setting this value will force scan results associated with this configuration to 695fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * be included in the bucket of networks that are externally scored. 696fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * If not set, associated scan results will be treated as legacy saved networks and 697fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * will take precedence over networks in the scored category. 698fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin */ 699fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin @SystemApi 700fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin public boolean useExternalScores; 701fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin 702fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin /** 703fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin * @hide 704154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, when comparing two 705154b2cf6bbb99ee258b289846183172139a87dbavandwalle * WifiConfigurations, note that since comparing WifiConfiguration happens very often 706154b2cf6bbb99ee258b289846183172139a87dbavandwalle * potentially at every scan, this number might become very large, even on an idle 707154b2cf6bbb99ee258b289846183172139a87dbavandwalle * system. 708154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 709154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 710154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverride; 711154b2cf6bbb99ee258b289846183172139a87dbavandwalle 712154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 713154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 714154b2cf6bbb99ee258b289846183172139a87dbavandwalle * Number of time the scorer overrode a the priority based choice, and the comparison 715154b2cf6bbb99ee258b289846183172139a87dbavandwalle * triggered a network switch 716154b2cf6bbb99ee258b289846183172139a87dbavandwalle */ 717154b2cf6bbb99ee258b289846183172139a87dbavandwalle @SystemApi 718154b2cf6bbb99ee258b289846183172139a87dbavandwalle public int numScorerOverrideAndSwitchedNetwork; 719154b2cf6bbb99ee258b289846183172139a87dbavandwalle 720154b2cf6bbb99ee258b289846183172139a87dbavandwalle /** 721154b2cf6bbb99ee258b289846183172139a87dbavandwalle * @hide 7224eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Number of time we associated to this configuration. 7234eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 7244eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle @SystemApi 7254eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public int numAssociation; 7264eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 727448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 728448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 729448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration with Low RSSI. 730448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 731448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableLowRSSI; 732448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 733448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 734448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 735448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration with Bad RSSI. 736448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 737448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableBadRSSI; 738448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 739448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 740448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 741448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user disabled WiFi while associated to this configuration 742448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * and RSSI was not HIGH. 743448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 744448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredWifiDisableNotHighRSSI; 745448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 746448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 747448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 748448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration with Low RSSI. 749448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 750448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtLowRSSI; 751448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 752448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 753448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 754448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration with Bad RSSI. 755448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 756448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtBadRSSI; 757448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle 758448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 759448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 760448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of ticks associated to this configuration 761448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * and RSSI was not HIGH. 762448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 763448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numTicksAtNotHighRSSI; 764448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle /** 765448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * @hide 766448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * Number of time user (WifiManager) triggered association to this configuration. 767448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle * TODO: count this only for Wifi Settings uuid, so as to not count 3rd party apps 768448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle */ 769448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle public int numUserTriggeredJoinAttempts; 7704eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 7718d106780b6a638552749e54e169fc72537d4bcccxinhe /** @hide 7728d106780b6a638552749e54e169fc72537d4bcccxinhe * Boost given to RSSI on a home network for the purpose of calculating the score 7738d106780b6a638552749e54e169fc72537d4bcccxinhe * This adds stickiness to home networks, as defined by: 7748d106780b6a638552749e54e169fc72537d4bcccxinhe * - less than 4 known BSSIDs 7758d106780b6a638552749e54e169fc72537d4bcccxinhe * - PSK only 7768d106780b6a638552749e54e169fc72537d4bcccxinhe * - TODO: add a test to verify that all BSSIDs are behind same gateway 7778d106780b6a638552749e54e169fc72537d4bcccxinhe ***/ 7788d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int HOME_NETWORK_RSSI_BOOST = 5; 7798d106780b6a638552749e54e169fc72537d4bcccxinhe 7808d106780b6a638552749e54e169fc72537d4bcccxinhe /** 7818d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 7828d106780b6a638552749e54e169fc72537d4bcccxinhe * This class is used to contain all the information and API used for quality network selection 7838d106780b6a638552749e54e169fc72537d4bcccxinhe */ 7848d106780b6a638552749e54e169fc72537d4bcccxinhe public static class NetworkSelectionStatus { 7858d106780b6a638552749e54e169fc72537d4bcccxinhe /** 7868d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality Network Selection Status enable, temporary disabled, permanently disabled 7878d106780b6a638552749e54e169fc72537d4bcccxinhe */ 7888d106780b6a638552749e54e169fc72537d4bcccxinhe /** 7898d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is allowed to join Quality Network Selection 7908d106780b6a638552749e54e169fc72537d4bcccxinhe */ 7918d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_ENABLED = 0; 7928d106780b6a638552749e54e169fc72537d4bcccxinhe /** 7938d106780b6a638552749e54e169fc72537d4bcccxinhe * network was temporary disabled. Can be re-enabled after a time period expire 7948d106780b6a638552749e54e169fc72537d4bcccxinhe */ 7958d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_TEMPORARY_DISABLED = 1; 7968d106780b6a638552749e54e169fc72537d4bcccxinhe /** 7978d106780b6a638552749e54e169fc72537d4bcccxinhe * network was permanently disabled. 7988d106780b6a638552749e54e169fc72537d4bcccxinhe */ 7998d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_PERMANENTLY_DISABLED = 2; 8008d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8018d106780b6a638552749e54e169fc72537d4bcccxinhe * Maximum Network selection status 8028d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8038d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_STATUS_MAX = 3; 8048d106780b6a638552749e54e169fc72537d4bcccxinhe 8058d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8068d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality network selection status String (for debug purpose). Use Quality network 8078d106780b6a638552749e54e169fc72537d4bcccxinhe * selection status value as index to extec the corresponding debug string 8088d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8098d106780b6a638552749e54e169fc72537d4bcccxinhe private static final String[] QUALITY_NETWORK_SELECTION_STATUS = { 81090a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_ENABLED", 81190a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_TEMPORARY_DISABLED", 8128d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_PERMANENTLY_DISABLED"}; 8138d106780b6a638552749e54e169fc72537d4bcccxinhe 8148d106780b6a638552749e54e169fc72537d4bcccxinhe //Quality Network disabled reasons 8158d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8168d106780b6a638552749e54e169fc72537d4bcccxinhe * Default value. Means not disabled 8178d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8188d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_ENABLE = 0; 8198d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8208d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because higher layer (>2) network is bad 8218d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8228d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_BAD_LINK = 1; 8238d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8248d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple association rejects 8258d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8268d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_ASSOCIATION_REJECTION = 2; 8278d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8288d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple authentication failure 8298d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8308d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_AUTHENTICATION_FAILURE = 3; 8318d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8328d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because multiple DHCP failure 8338d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8348d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_DHCP_FAILURE = 4; 8358d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8368d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because of security network but no credentials 8378d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8388d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_DNS_FAILURE = 5; 8398d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8408d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because EAP-TLS failure 8418d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8428d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_TLS_VERSION_MISMATCH = 6; 8438d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8448d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled due to WifiManager disable it explicitly 8458d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8468d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_AUTHENTICATION_NO_CREDENTIALS = 7; 8478d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8488d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled because no Internet connected and user do not want 8498d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8508d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_NO_INTERNET = 8; 8518d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8528d106780b6a638552749e54e169fc72537d4bcccxinhe * This network is disabled due to WifiManager disable it explicitly 8538d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8548d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int DISABLED_BY_WIFI_MANAGER = 9; 8558d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8568d106780b6a638552749e54e169fc72537d4bcccxinhe * This Maximum disable reason value 8578d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8588d106780b6a638552749e54e169fc72537d4bcccxinhe public static final int NETWORK_SELECTION_DISABLED_MAX = 10; 8598d106780b6a638552749e54e169fc72537d4bcccxinhe 8608d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8618d106780b6a638552749e54e169fc72537d4bcccxinhe * Quality network selection disable reason String (for debug purpose) 8628d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8638d106780b6a638552749e54e169fc72537d4bcccxinhe private static final String[] QUALITY_NETWORK_SELECTION_DISABLE_REASON = { 86490a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_ENABLE", 86590a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_BAD_LINK", 8668d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_ASSOCIATION_REJECTION ", 8678d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_AUTHENTICATION_FAILURE", 8688d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_DHCP_FAILURE", 86990a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_DNS_FAILURE", 87090a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_TLS_VERSION", 8718d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_AUTHENTICATION_NO_CREDENTIALS", 87290a3841994b40aeb1c3a7a6b78dd804e49eb5e13xinhe "NETWORK_SELECTION_DISABLED_NO_INTERNET", 8738d106780b6a638552749e54e169fc72537d4bcccxinhe "NETWORK_SELECTION_DISABLED_BY_WIFI_MANAGER"}; 8748d106780b6a638552749e54e169fc72537d4bcccxinhe 8758d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8768d106780b6a638552749e54e169fc72537d4bcccxinhe * Invalid time stamp for network selection disable 8778d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8788d106780b6a638552749e54e169fc72537d4bcccxinhe public static final long INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP = -1L; 8798d106780b6a638552749e54e169fc72537d4bcccxinhe 880584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 881584dc6b8b9628d930de4ea3ad94894886294b855xinhe * This constant indicates the current configuration has connect choice set 882584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 883584dc6b8b9628d930de4ea3ad94894886294b855xinhe private static final int CONNECT_CHOICE_EXISTS = 1; 884584dc6b8b9628d930de4ea3ad94894886294b855xinhe 885584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 886584dc6b8b9628d930de4ea3ad94894886294b855xinhe * This constant indicates the current configuration does not have connect choice set 887584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 888584dc6b8b9628d930de4ea3ad94894886294b855xinhe private static final int CONNECT_CHOICE_NOT_EXISTS = -1; 889584dc6b8b9628d930de4ea3ad94894886294b855xinhe 8908d106780b6a638552749e54e169fc72537d4bcccxinhe // fields for QualityNetwork Selection 8918d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8928d106780b6a638552749e54e169fc72537d4bcccxinhe * Network selection status, should be in one of three status: enable, temporaily disabled 8938d106780b6a638552749e54e169fc72537d4bcccxinhe * or permanently disabled 8948d106780b6a638552749e54e169fc72537d4bcccxinhe */ 8958d106780b6a638552749e54e169fc72537d4bcccxinhe private int mStatus; 8968d106780b6a638552749e54e169fc72537d4bcccxinhe 8978d106780b6a638552749e54e169fc72537d4bcccxinhe /** 8988d106780b6a638552749e54e169fc72537d4bcccxinhe * Reason for disable this network 8998d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9008d106780b6a638552749e54e169fc72537d4bcccxinhe private int mNetworkSelectionDisableReason; 9018d106780b6a638552749e54e169fc72537d4bcccxinhe 9028d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9038d106780b6a638552749e54e169fc72537d4bcccxinhe * Last time we temporarily disabled the configuration 9048d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9058d106780b6a638552749e54e169fc72537d4bcccxinhe private long mTemporarilyDisabledTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP; 9068d106780b6a638552749e54e169fc72537d4bcccxinhe 9078d106780b6a638552749e54e169fc72537d4bcccxinhe /** 9088d106780b6a638552749e54e169fc72537d4bcccxinhe * counter for each Network selection disable reason 9098d106780b6a638552749e54e169fc72537d4bcccxinhe */ 9108d106780b6a638552749e54e169fc72537d4bcccxinhe private int[] mNetworkSeclectionDisableCounter = new int[NETWORK_SELECTION_DISABLED_MAX]; 9118d106780b6a638552749e54e169fc72537d4bcccxinhe 9128d106780b6a638552749e54e169fc72537d4bcccxinhe /** 913584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Connect Choice over this configuration 914584dc6b8b9628d930de4ea3ad94894886294b855xinhe * 915584dc6b8b9628d930de4ea3ad94894886294b855xinhe * When current wifi configuration is visible to the user but user explicitly choose to 916584dc6b8b9628d930de4ea3ad94894886294b855xinhe * connect to another network X, the another networks X's configure key will be stored here. 917584dc6b8b9628d930de4ea3ad94894886294b855xinhe * We will consider user has a preference of X over this network. And in the future, 918584dc6b8b9628d930de4ea3ad94894886294b855xinhe * network selection will always give X a higher preference over this configuration. 919584dc6b8b9628d930de4ea3ad94894886294b855xinhe * configKey is : "SSID"-WEP-WPA_PSK-WPA_EAP 920584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 921584dc6b8b9628d930de4ea3ad94894886294b855xinhe private String mConnectChoice; 922584dc6b8b9628d930de4ea3ad94894886294b855xinhe 923584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 924584dc6b8b9628d930de4ea3ad94894886294b855xinhe * The system timestamp when we records the connectChoice. This value is obtained from 925584dc6b8b9628d930de4ea3ad94894886294b855xinhe * System.currentTimeMillis 926584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 927584dc6b8b9628d930de4ea3ad94894886294b855xinhe private long mConnectChoiceTimestamp = INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP; 928584dc6b8b9628d930de4ea3ad94894886294b855xinhe 929584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 930584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Used to cache the temporary candidate during the network selection procedure. It will be 931584dc6b8b9628d930de4ea3ad94894886294b855xinhe * kept updating once a new scan result has a higher score than current one 932584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 933584dc6b8b9628d930de4ea3ad94894886294b855xinhe private ScanResult mCandidate; 934584dc6b8b9628d930de4ea3ad94894886294b855xinhe 935584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 936584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Used to cache the score of the current temporary candidate during the network 937584dc6b8b9628d930de4ea3ad94894886294b855xinhe * selection procedure. 938584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 939584dc6b8b9628d930de4ea3ad94894886294b855xinhe private int mCandidateScore; 940584dc6b8b9628d930de4ea3ad94894886294b855xinhe 941584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 942584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Indicate whether this network is visible in latest Qualified Network Selection. This 943584dc6b8b9628d930de4ea3ad94894886294b855xinhe * means there is scan result found related to this Configuration and meet the minimum 944584dc6b8b9628d930de4ea3ad94894886294b855xinhe * requirement. The saved network need not join latest Qualified Network Selection. For 945584dc6b8b9628d930de4ea3ad94894886294b855xinhe * example, it is disabled. True means network is visible in latest Qualified Network 946584dc6b8b9628d930de4ea3ad94894886294b855xinhe * Selection and false means network is invisible 947584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 948584dc6b8b9628d930de4ea3ad94894886294b855xinhe private boolean mSeenInLastQualifiedNetworkSelection; 949584dc6b8b9628d930de4ea3ad94894886294b855xinhe 950584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 951cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * Boolean indicating if we have ever successfully connected to this network. 952cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * 953cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * This value will be set to true upon a successful connection. 954cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * This value will be set to false if a previous value was not stored in the config or if 955cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein * the credentials are updated (ex. a password change). 956cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein */ 957cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein private boolean mHasEverConnected; 958cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 959cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein /** 960584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set whether this network is visible in latest Qualified Network Selection 961584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param seen value set to candidate 962584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 963584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setSeenInLastQualifiedNetworkSelection(boolean seen) { 964584dc6b8b9628d930de4ea3ad94894886294b855xinhe mSeenInLastQualifiedNetworkSelection = seen; 965584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 966584dc6b8b9628d930de4ea3ad94894886294b855xinhe 967584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 968584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get whether this network is visible in latest Qualified Network Selection 969584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns true -- network is visible in latest Qualified Network Selection 970584dc6b8b9628d930de4ea3ad94894886294b855xinhe * false -- network is invisible in latest Qualified Network Selection 971584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 972584dc6b8b9628d930de4ea3ad94894886294b855xinhe public boolean getSeenInLastQualifiedNetworkSelection() { 973584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mSeenInLastQualifiedNetworkSelection; 974584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 975584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 976584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the temporary candidate of current network selection procedure 977584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param scanCandidate {@link ScanResult} the candidate set to mCandidate 978584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 979584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setCandidate(ScanResult scanCandidate) { 980584dc6b8b9628d930de4ea3ad94894886294b855xinhe mCandidate = scanCandidate; 981584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 982584dc6b8b9628d930de4ea3ad94894886294b855xinhe 983584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 984584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the temporary candidate of current network selection procedure 985584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns {@link ScanResult} temporary candidate of current network selection 986584dc6b8b9628d930de4ea3ad94894886294b855xinhe * procedure 987584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 988584dc6b8b9628d930de4ea3ad94894886294b855xinhe public ScanResult getCandidate() { 989584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mCandidate; 990584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 991584dc6b8b9628d930de4ea3ad94894886294b855xinhe 992584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 993584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the score of the temporary candidate of current network selection procedure 994584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param score value set to mCandidateScore 995584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 996584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setCandidateScore(int score) { 997584dc6b8b9628d930de4ea3ad94894886294b855xinhe mCandidateScore = score; 998584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 999584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1000584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1001584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the score of the temporary candidate of current network selection procedure 1002584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns score of the temporary candidate of current network selection procedure 1003584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1004584dc6b8b9628d930de4ea3ad94894886294b855xinhe public int getCandidateScore() { 1005584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mCandidateScore; 1006584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1007584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1008584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1009584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get user preferred choice over this configuration 1010584dc6b8b9628d930de4ea3ad94894886294b855xinhe *@return returns configKey of user preferred choice over this configuration 1011584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1012584dc6b8b9628d930de4ea3ad94894886294b855xinhe public String getConnectChoice() { 1013584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mConnectChoice; 1014584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1015584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1016584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1017584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set user preferred choice over this configuration 1018584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param newConnectChoice, the configKey of user preferred choice over this configuration 1019584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1020584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setConnectChoice(String newConnectChoice) { 1021584dc6b8b9628d930de4ea3ad94894886294b855xinhe mConnectChoice = newConnectChoice; 1022584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1023584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1024584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1025584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the timeStamp when user select a choice over this configuration 1026584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns when current connectChoice is set (time from System.currentTimeMillis) 1027584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1028584dc6b8b9628d930de4ea3ad94894886294b855xinhe public long getConnectChoiceTimestamp() { 1029584dc6b8b9628d930de4ea3ad94894886294b855xinhe return mConnectChoiceTimestamp; 1030584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1031584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1032584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1033584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set the timeStamp when user select a choice over this configuration 1034584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param timeStamp, the timestamp set to connectChoiceTimestamp, expected timestamp should 1035584dc6b8b9628d930de4ea3ad94894886294b855xinhe * be obtained from System.currentTimeMillis 1036584dc6b8b9628d930de4ea3ad94894886294b855xinhe */ 1037584dc6b8b9628d930de4ea3ad94894886294b855xinhe public void setConnectChoiceTimestamp(long timeStamp) { 1038584dc6b8b9628d930de4ea3ad94894886294b855xinhe mConnectChoiceTimestamp = timeStamp; 1039584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1040584dc6b8b9628d930de4ea3ad94894886294b855xinhe 1041584dc6b8b9628d930de4ea3ad94894886294b855xinhe /** 1042584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get current Quality network selection status 1043584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns current Quality network selection status in String (for debug purpose) 10448d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10458d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkStatusString() { 10468d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_STATUS[mStatus]; 10478d106780b6a638552749e54e169fc72537d4bcccxinhe } 10488d106780b6a638552749e54e169fc72537d4bcccxinhe 1049cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein public void setHasEverConnected(boolean value) { 1050cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein mHasEverConnected = value; 1051cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein } 1052cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1053cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein public boolean getHasEverConnected() { 1054cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein return mHasEverConnected; 1055cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein } 1056cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein 1057cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein private NetworkSelectionStatus() { 1058cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein // previously stored configs will not have this parameter, so we default to false. 1059cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein mHasEverConnected = false; 1060cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein }; 10618d106780b6a638552749e54e169fc72537d4bcccxinhe 10628d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10638d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason specific error reason 10648d106780b6a638552749e54e169fc72537d4bcccxinhe * @return corresponding network disable reason String (for debug purpose) 10658d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10668d106780b6a638552749e54e169fc72537d4bcccxinhe public static String getNetworkDisableReasonString(int reason) { 10678d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 10688d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_DISABLE_REASON[reason]; 10698d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 10708d106780b6a638552749e54e169fc72537d4bcccxinhe return null; 10718d106780b6a638552749e54e169fc72537d4bcccxinhe } 10728d106780b6a638552749e54e169fc72537d4bcccxinhe } 10738d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1074584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get current network disable reason 10758d106780b6a638552749e54e169fc72537d4bcccxinhe * @return current network disable reason in String (for debug purpose) 10768d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10778d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkDisableReasonString() { 10788d106780b6a638552749e54e169fc72537d4bcccxinhe return QUALITY_NETWORK_SELECTION_DISABLE_REASON[mNetworkSelectionDisableReason]; 10798d106780b6a638552749e54e169fc72537d4bcccxinhe } 10808d106780b6a638552749e54e169fc72537d4bcccxinhe 10818d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10828d106780b6a638552749e54e169fc72537d4bcccxinhe * get current network network selection status 1083584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return return current network network selection status 10848d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10858d106780b6a638552749e54e169fc72537d4bcccxinhe public int getNetworkSelectionStatus() { 10868d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus; 10878d106780b6a638552749e54e169fc72537d4bcccxinhe } 10888d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10898d106780b6a638552749e54e169fc72537d4bcccxinhe * @return whether current network is enabled to join network selection 10908d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10918d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkEnabled() { 10928d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_ENABLED; 10938d106780b6a638552749e54e169fc72537d4bcccxinhe } 10948d106780b6a638552749e54e169fc72537d4bcccxinhe 10958d106780b6a638552749e54e169fc72537d4bcccxinhe /** 10968d106780b6a638552749e54e169fc72537d4bcccxinhe * @return whether current network is temporary disabled 10978d106780b6a638552749e54e169fc72537d4bcccxinhe */ 10988d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkTemporaryDisabled() { 10998d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_TEMPORARY_DISABLED; 11008d106780b6a638552749e54e169fc72537d4bcccxinhe } 11018d106780b6a638552749e54e169fc72537d4bcccxinhe 11028d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1103584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns whether current network is permanently disabled 11048d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11058d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isNetworkPermanentlyDisabled() { 11068d106780b6a638552749e54e169fc72537d4bcccxinhe return mStatus == NETWORK_SELECTION_PERMANENTLY_DISABLED; 11078d106780b6a638552749e54e169fc72537d4bcccxinhe } 1108584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11098d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1110584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set current networ work selection status 11118d106780b6a638552749e54e169fc72537d4bcccxinhe * @param status network selection status to set 11128d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11138d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionStatus(int status) { 11148d106780b6a638552749e54e169fc72537d4bcccxinhe if (status >= 0 && status < NETWORK_SELECTION_STATUS_MAX) { 11158d106780b6a638552749e54e169fc72537d4bcccxinhe mStatus = status; 11168d106780b6a638552749e54e169fc72537d4bcccxinhe } 11178d106780b6a638552749e54e169fc72537d4bcccxinhe } 1118584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11198d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1120584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns current network's disable reason 11218d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11228d106780b6a638552749e54e169fc72537d4bcccxinhe public int getNetworkSelectionDisableReason() { 11238d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionDisableReason; 11248d106780b6a638552749e54e169fc72537d4bcccxinhe } 11258d106780b6a638552749e54e169fc72537d4bcccxinhe 11268d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1127584dc6b8b9628d930de4ea3ad94894886294b855xinhe * set Network disable reason 11288d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason Network disable reason 11298d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11308d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionDisableReason(int reason) { 11318d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= 0 && reason < NETWORK_SELECTION_DISABLED_MAX) { 11328d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionDisableReason = reason; 11338d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 11348d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 11358d106780b6a638552749e54e169fc72537d4bcccxinhe } 11368d106780b6a638552749e54e169fc72537d4bcccxinhe } 1137584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11388d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1139584dc6b8b9628d930de4ea3ad94894886294b855xinhe * check whether network is disabled by this reason 1140584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @param reason a specific disable reason 1141584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return true -- network is disabled for this reason 1142584dc6b8b9628d930de4ea3ad94894886294b855xinhe * false -- network is not disabled for this reason 11438d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11448d106780b6a638552749e54e169fc72537d4bcccxinhe public boolean isDisabledByReason(int reason) { 11458d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionDisableReason == reason; 11468d106780b6a638552749e54e169fc72537d4bcccxinhe } 1147584dc6b8b9628d930de4ea3ad94894886294b855xinhe 11488d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11498d106780b6a638552749e54e169fc72537d4bcccxinhe * @param timeStamp Set when current network is disabled in millisecond since January 1, 11508d106780b6a638552749e54e169fc72537d4bcccxinhe * 1970 00:00:00.0 UTC 11518d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11528d106780b6a638552749e54e169fc72537d4bcccxinhe public void setDisableTime(long timeStamp) { 11538d106780b6a638552749e54e169fc72537d4bcccxinhe mTemporarilyDisabledTimestamp = timeStamp; 11548d106780b6a638552749e54e169fc72537d4bcccxinhe } 11558d106780b6a638552749e54e169fc72537d4bcccxinhe 11568d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1157584dc6b8b9628d930de4ea3ad94894886294b855xinhe * @return returns when current network is disabled in millisecond since January 1, 11588d106780b6a638552749e54e169fc72537d4bcccxinhe * 1970 00:00:00.0 UTC 11598d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11608d106780b6a638552749e54e169fc72537d4bcccxinhe public long getDisableTime() { 11618d106780b6a638552749e54e169fc72537d4bcccxinhe return mTemporarilyDisabledTimestamp; 11628d106780b6a638552749e54e169fc72537d4bcccxinhe } 11638d106780b6a638552749e54e169fc72537d4bcccxinhe 11648d106780b6a638552749e54e169fc72537d4bcccxinhe /** 1165584dc6b8b9628d930de4ea3ad94894886294b855xinhe * get the disable counter of a specific reason 11668d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason specific failure reason 11678d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 11688d106780b6a638552749e54e169fc72537d4bcccxinhe * @return counter number for specific error reason. 11698d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11708d106780b6a638552749e54e169fc72537d4bcccxinhe public int getDisableReasonCounter(int reason) { 11718d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 11728d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSeclectionDisableCounter[reason]; 11738d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 11748d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 11758d106780b6a638552749e54e169fc72537d4bcccxinhe } 11768d106780b6a638552749e54e169fc72537d4bcccxinhe } 11778d106780b6a638552749e54e169fc72537d4bcccxinhe 11788d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11798d106780b6a638552749e54e169fc72537d4bcccxinhe * set the counter of a specific failure reason 11808d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason reason for disable error 11818d106780b6a638552749e54e169fc72537d4bcccxinhe * @param value the counter value for this specific reason 11828d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 11838d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11848d106780b6a638552749e54e169fc72537d4bcccxinhe public void setDisableReasonCounter(int reason, int value) { 11858d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 11868d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason] = value; 11878d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 11888d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 11898d106780b6a638552749e54e169fc72537d4bcccxinhe } 11908d106780b6a638552749e54e169fc72537d4bcccxinhe } 11918d106780b6a638552749e54e169fc72537d4bcccxinhe 11928d106780b6a638552749e54e169fc72537d4bcccxinhe /** 11938d106780b6a638552749e54e169fc72537d4bcccxinhe * increment the counter of a specific failure reason 11948d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason a specific failure reason 11958d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 11968d106780b6a638552749e54e169fc72537d4bcccxinhe */ 11978d106780b6a638552749e54e169fc72537d4bcccxinhe public void incrementDisableReasonCounter(int reason) { 11988d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 11998d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason]++; 12008d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12018d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12028d106780b6a638552749e54e169fc72537d4bcccxinhe } 12038d106780b6a638552749e54e169fc72537d4bcccxinhe } 1204584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12058d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12068d106780b6a638552749e54e169fc72537d4bcccxinhe * clear the counter of a specific failure reason 12078d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 12088d106780b6a638552749e54e169fc72537d4bcccxinhe * @param reason a specific failure reason 12098d106780b6a638552749e54e169fc72537d4bcccxinhe * @exception throw IllegalArgumentException for illegal input 12108d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12118d106780b6a638552749e54e169fc72537d4bcccxinhe public void clearDisableReasonCounter(int reason) { 12128d106780b6a638552749e54e169fc72537d4bcccxinhe if (reason >= NETWORK_SELECTION_ENABLE && reason < NETWORK_SELECTION_DISABLED_MAX) { 12138d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[reason] = NETWORK_SELECTION_ENABLE; 12148d106780b6a638552749e54e169fc72537d4bcccxinhe } else { 12158d106780b6a638552749e54e169fc72537d4bcccxinhe throw new IllegalArgumentException("Illegal reason value: " + reason); 12168d106780b6a638552749e54e169fc72537d4bcccxinhe } 12178d106780b6a638552749e54e169fc72537d4bcccxinhe } 1218584dc6b8b9628d930de4ea3ad94894886294b855xinhe 12198d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12208d106780b6a638552749e54e169fc72537d4bcccxinhe * clear all the failure reason counters 12218d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12228d106780b6a638552749e54e169fc72537d4bcccxinhe public void clearDisableReasonCounter() { 12238d106780b6a638552749e54e169fc72537d4bcccxinhe Arrays.fill(mNetworkSeclectionDisableCounter, NETWORK_SELECTION_ENABLE); 12248d106780b6a638552749e54e169fc72537d4bcccxinhe } 12258d106780b6a638552749e54e169fc72537d4bcccxinhe 12268d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12278d106780b6a638552749e54e169fc72537d4bcccxinhe * BSSID for connection to this network (through network selection procedure) 12288d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12298d106780b6a638552749e54e169fc72537d4bcccxinhe private String mNetworkSelectionBSSID; 12308d106780b6a638552749e54e169fc72537d4bcccxinhe 12318d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12328d106780b6a638552749e54e169fc72537d4bcccxinhe * get current network Selection BSSID 12338d106780b6a638552749e54e169fc72537d4bcccxinhe * @return current network Selection BSSID 12348d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12358d106780b6a638552749e54e169fc72537d4bcccxinhe public String getNetworkSelectionBSSID() { 12368d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionBSSID; 12378d106780b6a638552749e54e169fc72537d4bcccxinhe } 12388d106780b6a638552749e54e169fc72537d4bcccxinhe 12398d106780b6a638552749e54e169fc72537d4bcccxinhe /** 12408d106780b6a638552749e54e169fc72537d4bcccxinhe * set network Selection BSSID 12418d106780b6a638552749e54e169fc72537d4bcccxinhe * @param bssid The target BSSID for assocaition 12428d106780b6a638552749e54e169fc72537d4bcccxinhe */ 12438d106780b6a638552749e54e169fc72537d4bcccxinhe public void setNetworkSelectionBSSID(String bssid) { 12448d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionBSSID = bssid; 12458d106780b6a638552749e54e169fc72537d4bcccxinhe } 12468d106780b6a638552749e54e169fc72537d4bcccxinhe 12478d106780b6a638552749e54e169fc72537d4bcccxinhe public void copy(NetworkSelectionStatus source) { 12488d106780b6a638552749e54e169fc72537d4bcccxinhe mStatus = source.mStatus; 12498d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionDisableReason = source.mNetworkSelectionDisableReason; 12508d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 12518d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 12528d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSeclectionDisableCounter[index] = 12538d106780b6a638552749e54e169fc72537d4bcccxinhe source.mNetworkSeclectionDisableCounter[index]; 12548d106780b6a638552749e54e169fc72537d4bcccxinhe } 12558d106780b6a638552749e54e169fc72537d4bcccxinhe mTemporarilyDisabledTimestamp = source.mTemporarilyDisabledTimestamp; 12568d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionBSSID = source.mNetworkSelectionBSSID; 1257584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(source.getConnectChoice()); 1258584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(source.getConnectChoiceTimestamp()); 1259cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein setHasEverConnected(source.getHasEverConnected()); 12608d106780b6a638552749e54e169fc72537d4bcccxinhe } 12618d106780b6a638552749e54e169fc72537d4bcccxinhe 12628d106780b6a638552749e54e169fc72537d4bcccxinhe public void writeToParcel(Parcel dest) { 12638d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getNetworkSelectionStatus()); 12648d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getNetworkSelectionDisableReason()); 12658d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 12668d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 12678d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeInt(getDisableReasonCounter(index)); 12688d106780b6a638552749e54e169fc72537d4bcccxinhe } 12698d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeLong(getDisableTime()); 12708d106780b6a638552749e54e169fc72537d4bcccxinhe dest.writeString(getNetworkSelectionBSSID()); 1271584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (getConnectChoice() != null) { 1272584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeInt(CONNECT_CHOICE_EXISTS); 1273584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeString(getConnectChoice()); 1274584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeLong(getConnectChoiceTimestamp()); 1275584dc6b8b9628d930de4ea3ad94894886294b855xinhe } else { 1276584dc6b8b9628d930de4ea3ad94894886294b855xinhe dest.writeInt(CONNECT_CHOICE_NOT_EXISTS); 1277584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1278cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein dest.writeInt(getHasEverConnected() ? 1 : 0); 12798d106780b6a638552749e54e169fc72537d4bcccxinhe } 12808d106780b6a638552749e54e169fc72537d4bcccxinhe 12818d106780b6a638552749e54e169fc72537d4bcccxinhe public void readFromParcel(Parcel in) { 12828d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionStatus(in.readInt()); 12838d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionDisableReason(in.readInt()); 12848d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = NETWORK_SELECTION_ENABLE; index < NETWORK_SELECTION_DISABLED_MAX; 12858d106780b6a638552749e54e169fc72537d4bcccxinhe index++) { 12868d106780b6a638552749e54e169fc72537d4bcccxinhe setDisableReasonCounter(index, in.readInt()); 12878d106780b6a638552749e54e169fc72537d4bcccxinhe } 12888d106780b6a638552749e54e169fc72537d4bcccxinhe setDisableTime(in.readLong()); 12898d106780b6a638552749e54e169fc72537d4bcccxinhe setNetworkSelectionBSSID(in.readString()); 1290584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (in.readInt() == CONNECT_CHOICE_EXISTS) { 1291584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(in.readString()); 1292584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(in.readLong()); 1293584dc6b8b9628d930de4ea3ad94894886294b855xinhe } else { 1294584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoice(null); 1295584dc6b8b9628d930de4ea3ad94894886294b855xinhe setConnectChoiceTimestamp(INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP); 1296584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1297cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein setHasEverConnected(in.readInt() != 0); 12988d106780b6a638552749e54e169fc72537d4bcccxinhe } 12998d106780b6a638552749e54e169fc72537d4bcccxinhe } 13008d106780b6a638552749e54e169fc72537d4bcccxinhe 13018d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13028d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 13038d106780b6a638552749e54e169fc72537d4bcccxinhe * network selection related member 13048d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13058d106780b6a638552749e54e169fc72537d4bcccxinhe private final NetworkSelectionStatus mNetworkSelectionStatus = new NetworkSelectionStatus(); 13068d106780b6a638552749e54e169fc72537d4bcccxinhe 13078d106780b6a638552749e54e169fc72537d4bcccxinhe /** 13088d106780b6a638552749e54e169fc72537d4bcccxinhe * @hide 13098d106780b6a638552749e54e169fc72537d4bcccxinhe * @return network selection status 13108d106780b6a638552749e54e169fc72537d4bcccxinhe */ 13118d106780b6a638552749e54e169fc72537d4bcccxinhe public NetworkSelectionStatus getNetworkSelectionStatus() { 13128d106780b6a638552749e54e169fc72537d4bcccxinhe return mNetworkSelectionStatus; 13138d106780b6a638552749e54e169fc72537d4bcccxinhe } 13147c3606c103e95d3991267cca2592402a68779cafvandwalle /** 13157c3606c103e95d3991267cca2592402a68779cafvandwalle * @hide 13167c3606c103e95d3991267cca2592402a68779cafvandwalle * Linked Configurations: represent the set of Wificonfigurations that are equivalent 13177c3606c103e95d3991267cca2592402a68779cafvandwalle * regarding roaming and auto-joining. 13187c3606c103e95d3991267cca2592402a68779cafvandwalle * The linked configuration may or may not have same SSID, and may or may not have same 13197c3606c103e95d3991267cca2592402a68779cafvandwalle * credentials. 13207c3606c103e95d3991267cca2592402a68779cafvandwalle * For instance, linked configurations will have same defaultGwMacAddress or same dhcp server. 13217c3606c103e95d3991267cca2592402a68779cafvandwalle */ 13227c3606c103e95d3991267cca2592402a68779cafvandwalle public HashMap<String, Integer> linkedConfigurations; 13237c3606c103e95d3991267cca2592402a68779cafvandwalle 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration() { 13255ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff networkId = INVALID_NETWORK_ID; 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = null; 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = null; 13288a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = null; 13297226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande roamingConsortiumIds = new long[0]; 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = 0; 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hiddenSSID = false; 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedKeyManagement = new BitSet(); 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedProtocols = new BitSet(); 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedAuthAlgorithms = new BitSet(); 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedPairwiseCiphers = new BitSet(); 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedGroupCiphers = new BitSet(); 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys = new String[4]; 13389b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys[i] = null; 13404337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang } 13419b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(); 1342e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = false; 13438f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = false; 1344e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle ephemeral = false; 1345f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin meteredHint = false; 1346fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin useExternalScores = false; 1347ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle validatedInternetAccess = false; 13486346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(); 13493e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber lastUpdateUid = -1; 13503e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber creatorUid = -1; 13516fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski shared = true; 1352b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne dtimInterval = 0; 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 135510652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde /** 13562522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande * Identify if this configuration represents a passpoint network 13572522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande */ 13582522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande public boolean isPasspoint() { 1359ad25bb89251c0552cfbc6c254853c79b7d9c121aVinit Deshpande return !TextUtils.isEmpty(FQDN) 13602522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && !TextUtils.isEmpty(providerFriendlyName) 13612522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && enterpriseConfig != null 13622522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande && enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE; 13632522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande } 13642522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande 13652522c830a3ad3ae2ca7f675f13fafab8835d4f0cVinit Deshpande /** 1366111fa0274d1d6620f9634783585387f3b773949evandwalle * Helper function, identify if a configuration is linked 1367111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 1368111fa0274d1d6620f9634783585387f3b773949evandwalle */ 1369111fa0274d1d6620f9634783585387f3b773949evandwalle public boolean isLinked(WifiConfiguration config) { 13708d106780b6a638552749e54e169fc72537d4bcccxinhe if (config != null) { 13718d106780b6a638552749e54e169fc72537d4bcccxinhe if (config.linkedConfigurations != null && linkedConfigurations != null) { 13728d106780b6a638552749e54e169fc72537d4bcccxinhe if (config.linkedConfigurations.get(configKey()) != null 13738d106780b6a638552749e54e169fc72537d4bcccxinhe && linkedConfigurations.get(config.configKey()) != null) { 13748d106780b6a638552749e54e169fc72537d4bcccxinhe return true; 13758d106780b6a638552749e54e169fc72537d4bcccxinhe } 1376111fa0274d1d6620f9634783585387f3b773949evandwalle } 1377111fa0274d1d6620f9634783585387f3b773949evandwalle } 1378111fa0274d1d6620f9634783585387f3b773949evandwalle return false; 13797c3606c103e95d3991267cca2592402a68779cafvandwalle } 13807c3606c103e95d3991267cca2592402a68779cafvandwalle 13817c3606c103e95d3991267cca2592402a68779cafvandwalle /** 1382c55cd103708493f9d45122236affbf08b49456f0Sky Faber * Helper function, idenfity if a configuration should be treated as an enterprise network 1383c55cd103708493f9d45122236affbf08b49456f0Sky Faber * @hide 1384c55cd103708493f9d45122236affbf08b49456f0Sky Faber */ 1385c55cd103708493f9d45122236affbf08b49456f0Sky Faber public boolean isEnterprise() { 1386c55cd103708493f9d45122236affbf08b49456f0Sky Faber return allowedKeyManagement.get(KeyMgmt.WPA_EAP) || 1387c55cd103708493f9d45122236affbf08b49456f0Sky Faber allowedKeyManagement.get(KeyMgmt.IEEE8021X); 1388c55cd103708493f9d45122236affbf08b49456f0Sky Faber } 1389c55cd103708493f9d45122236affbf08b49456f0Sky Faber 13908dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy @Override 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 13928dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy StringBuilder sbuf = new StringBuilder(); 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.status == WifiConfiguration.Status.CURRENT) { 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("* "); 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (this.status == WifiConfiguration.Status.DISABLED) { 139663edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle sbuf.append("- DSBLE "); 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("ID: ").append(this.networkId).append(" SSID: ").append(this.SSID). 1399b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande append(" PROVIDER-NAME: ").append(this.providerFriendlyName). 14008d106780b6a638552749e54e169fc72537d4bcccxinhe append(" BSSID: ").append(this.BSSID).append(" FQDN: ").append(this.FQDN) 14018d106780b6a638552749e54e169fc72537d4bcccxinhe .append(" PRIO: ").append(this.priority) 1402e23993848c65c7fb2c91bb89989117d35dabe5c3mukesh agrawal .append(" HIDDEN: ").append(this.hiddenSSID) 14038d106780b6a638552749e54e169fc72537d4bcccxinhe .append('\n'); 14048d106780b6a638552749e54e169fc72537d4bcccxinhe 14058d106780b6a638552749e54e169fc72537d4bcccxinhe 14068d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" NetworkSelectionStatus ") 14078d106780b6a638552749e54e169fc72537d4bcccxinhe .append(mNetworkSelectionStatus.getNetworkStatusString() + "\n"); 14088d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getNetworkSelectionDisableReason() > 0) { 14098d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" mNetworkSelectionDisableReason ") 14108d106780b6a638552749e54e169fc72537d4bcccxinhe .append(mNetworkSelectionStatus.getNetworkDisableReasonString() + "\n"); 14118d106780b6a638552749e54e169fc72537d4bcccxinhe 14128d106780b6a638552749e54e169fc72537d4bcccxinhe for (int index = mNetworkSelectionStatus.NETWORK_SELECTION_ENABLE; 14138d106780b6a638552749e54e169fc72537d4bcccxinhe index < mNetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX; index++) { 14148d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getDisableReasonCounter(index) != 0) { 14158d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(NetworkSelectionStatus.getNetworkDisableReasonString(index) 14168d106780b6a638552749e54e169fc72537d4bcccxinhe + " counter:" + mNetworkSelectionStatus.getDisableReasonCounter(index) 14178d106780b6a638552749e54e169fc72537d4bcccxinhe + "\n"); 14188d106780b6a638552749e54e169fc72537d4bcccxinhe } 14198d106780b6a638552749e54e169fc72537d4bcccxinhe } 14200561030490e418fcead83606249d8cfdc344a163Mike Lockwood } 1421584dc6b8b9628d930de4ea3ad94894886294b855xinhe if (mNetworkSelectionStatus.getConnectChoice() != null) { 1422584dc6b8b9628d930de4ea3ad94894886294b855xinhe sbuf.append(" connect choice: ").append(mNetworkSelectionStatus.getConnectChoice()); 1423584dc6b8b9628d930de4ea3ad94894886294b855xinhe sbuf.append(" connect choice set time: ").append(mNetworkSelectionStatus 1424584dc6b8b9628d930de4ea3ad94894886294b855xinhe .getConnectChoiceTimestamp()); 1425584dc6b8b9628d930de4ea3ad94894886294b855xinhe } 1426cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein sbuf.append(" hasEverConnected: ") 1427cd7167db2d8a18ad3e0a594c46e46d7ffafdaaccRebecca Silberstein .append(mNetworkSelectionStatus.getHasEverConnected()).append("\n"); 14288d106780b6a638552749e54e169fc72537d4bcccxinhe 14290561030490e418fcead83606249d8cfdc344a163Mike Lockwood if (this.numAssociation > 0) { 14300561030490e418fcead83606249d8cfdc344a163Mike Lockwood sbuf.append(" numAssociation ").append(this.numAssociation).append("\n"); 143116a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 1432ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle if (this.numNoInternetAccessReports > 0) { 1433ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle sbuf.append(" numNoInternetAccessReports "); 1434ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle sbuf.append(this.numNoInternetAccessReports).append("\n"); 1435ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle } 1436ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle if (this.updateTime != null) { 1437edbedd28b6aa10c266e627a9609b1c538479f03bPierre Vandwalle sbuf.append("update ").append(this.updateTime).append("\n"); 1438ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle } 1439ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle if (this.creationTime != null) { 1440edbedd28b6aa10c266e627a9609b1c538479f03bPierre Vandwalle sbuf.append("creation").append(this.creationTime).append("\n"); 1441ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle } 144294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.didSelfAdd) sbuf.append(" didSelfAdd"); 144394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.selfAdded) sbuf.append(" selfAdded"); 1444ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle if (this.validatedInternetAccess) sbuf.append(" validatedInternetAccess"); 14458faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson if (this.ephemeral) sbuf.append(" ephemeral"); 1446f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin if (this.meteredHint) sbuf.append(" meteredHint"); 1447fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin if (this.useExternalScores) sbuf.append(" useExternalScores"); 1448f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin if (this.didSelfAdd || this.selfAdded || this.validatedInternetAccess 1449fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin || this.ephemeral || this.meteredHint || this.useExternalScores) { 145016a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle sbuf.append("\n"); 145116a40cc7b597f0492f633cc0f742dc796955e7fdvandwalle } 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" KeyMgmt:"); 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int k = 0; k < this.allowedKeyManagement.size(); k++) { 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedKeyManagement.get(k)) { 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (k < KeyMgmt.strings.length) { 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(KeyMgmt.strings[k]); 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" Protocols:"); 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int p = 0; p < this.allowedProtocols.size(); p++) { 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedProtocols.get(p)) { 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p < Protocol.strings.length) { 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(Protocol.strings[p]); 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" AuthAlgorithms:"); 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int a = 0; a < this.allowedAuthAlgorithms.size(); a++) { 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedAuthAlgorithms.get(a)) { 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a < AuthAlgorithm.strings.length) { 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(AuthAlgorithm.strings[a]); 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" PairwiseCiphers:"); 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int pc = 0; pc < this.allowedPairwiseCiphers.size(); pc++) { 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedPairwiseCiphers.get(pc)) { 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pc < PairwiseCipher.strings.length) { 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(PairwiseCipher.strings[pc]); 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" GroupCiphers:"); 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int gc = 0; gc < this.allowedGroupCiphers.size(); gc++) { 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedGroupCiphers.get(gc)) { 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gc < GroupCipher.strings.length) { 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(GroupCipher.strings[gc]); 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15105069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('\n').append(" PSK: "); 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.preSharedKey != null) { 15125069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('*'); 15135069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang } 151494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("\nEnterprise config:\n"); 15159b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff sbuf.append(enterpriseConfig); 15169b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 151794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("IP config:\n"); 15186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim sbuf.append(mIpConfiguration.toString()); 1519128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 15208d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getNetworkSelectionBSSID() != null) { 15218d106780b6a638552749e54e169fc72537d4bcccxinhe sbuf.append(" networkSelectionBSSID=" 15228d106780b6a638552749e54e169fc72537d4bcccxinhe + mNetworkSelectionStatus.getNetworkSelectionBSSID()); 15238d106780b6a638552749e54e169fc72537d4bcccxinhe } 152494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long now_ms = System.currentTimeMillis(); 15258d106780b6a638552749e54e169fc72537d4bcccxinhe if (mNetworkSelectionStatus.getDisableTime() != NetworkSelectionStatus 15268d106780b6a638552749e54e169fc72537d4bcccxinhe .INVALID_NETWORK_SELECTION_DISABLE_TIMESTAMP) { 152794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 15288d106780b6a638552749e54e169fc72537d4bcccxinhe long diff = now_ms - mNetworkSelectionStatus.getDisableTime(); 15292ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle if (diff <= 0) { 153094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" blackListed since <incorrect>"); 15312ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } else { 1532aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append(" blackListed: ").append(Long.toString(diff / 1000)).append("sec "); 153394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 153494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 1535aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (creatorUid != 0) sbuf.append(" cuid=" + creatorUid); 15363e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (creatorName != null) sbuf.append(" cname=" + creatorName); 15373e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (lastUpdateUid != 0) sbuf.append(" luid=" + lastUpdateUid); 15383e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber if (lastUpdateName != null) sbuf.append(" lname=" + lastUpdateName); 15391ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" lcuid=" + lastConnectUid); 15401ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" userApproved=" + userApprovedAsString(userApproved)); 15411ac50cb32c08388540f53833c04a02f13fed0824Lorenzo Colitti sbuf.append(" noInternetAccessExpected=" + noInternetAccessExpected); 15421248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti sbuf.append(" "); 15433e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 154494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnected != 0) { 154594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 154694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnected; 154794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 154894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("lastConnected since <incorrect>"); 154994fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 1550aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastConnected: ").append(Long.toString(diff / 1000)).append("sec "); 155194fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 155294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } 155394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (this.lastConnectionFailure != 0) { 155494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 155594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle long diff = now_ms - this.lastConnectionFailure; 155694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle if (diff <= 0) { 15575ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle sbuf.append("lastConnectionFailure since <incorrect> "); 155894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle } else { 1559aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastConnectionFailure: ").append(Long.toString(diff / 1000)); 1560aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("sec "); 15612ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 15622ab9089dfa0c0526e8bf0aaade8a09dec021dc90vandwalle } 15638650c035609507340e3a66459cea16ef08cd03a6vandwalle if (this.lastRoamingFailure != 0) { 15648650c035609507340e3a66459cea16ef08cd03a6vandwalle sbuf.append('\n'); 15658650c035609507340e3a66459cea16ef08cd03a6vandwalle long diff = now_ms - this.lastRoamingFailure; 15668650c035609507340e3a66459cea16ef08cd03a6vandwalle if (diff <= 0) { 15675ddc65b9860b7ef39a0921bcbca3cbc50abe3a2cPierre Vandwalle sbuf.append("lastRoamingFailure since <incorrect> "); 15688650c035609507340e3a66459cea16ef08cd03a6vandwalle } else { 1569aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("lastRoamingFailure: ").append(Long.toString(diff / 1000)); 1570aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy sbuf.append("sec "); 15718650c035609507340e3a66459cea16ef08cd03a6vandwalle } 15728650c035609507340e3a66459cea16ef08cd03a6vandwalle } 15738650c035609507340e3a66459cea16ef08cd03a6vandwalle sbuf.append("roamingFailureBlackListTimeMilli: "). 15748650c035609507340e3a66459cea16ef08cd03a6vandwalle append(Long.toString(this.roamingFailureBlackListTimeMilli)); 1575448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1576448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle if (this.linkedConfigurations != null) { 1577aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy for (String key : this.linkedConfigurations.keySet()) { 1578448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append(" linked: ").append(key); 1579448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 1580448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 1581448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle } 158294fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("triggeredLow: ").append(this.numUserTriggeredWifiDisableLowRSSI); 158394fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" triggeredBad: ").append(this.numUserTriggeredWifiDisableBadRSSI); 158494fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" triggeredNotHigh: ").append(this.numUserTriggeredWifiDisableNotHighRSSI); 158594fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append('\n'); 158694fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("ticksLow: ").append(this.numTicksAtLowRSSI); 158794fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" ticksBad: ").append(this.numTicksAtBadRSSI); 158894fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append(" ticksNotHigh: ").append(this.numTicksAtNotHighRSSI); 1589448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 159094fe7e99d1e99a6bb351da48a8e17b1d61b0efdcvandwalle sbuf.append("triggeredJoin: ").append(this.numUserTriggeredJoinAttempts); 1591448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle sbuf.append('\n'); 15928f13548615f647a1208ace5369b504cb41149965vandwalle 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sbuf.toString(); 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1596b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 1597b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String getPrintableSsid() { 1598b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (SSID == null) return ""; 1599b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff final int length = SSID.length(); 1600b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') { 1601b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID.substring(1, length - 1); 1602b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1603b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 1604b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** The ascii-encoded string format is P"<ascii-encoded-string>" 1605b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * The decoding is implemented in the supplicant for a newly configured 1606b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * network. 1607b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 1608b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') && 1609b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff (SSID.charAt(length-1) == '"')) { 1610b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded( 1611b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff SSID.substring(2, length - 1)); 1612b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return wifiSsid.toString(); 1613b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1614b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID; 1615b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1616b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 16173e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber /** @hide **/ 16183e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber public static String userApprovedAsString(int userApproved) { 16193e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber switch (userApproved) { 16203e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_APPROVED: 16213e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_APPROVED"; 16223e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_BANNED: 16233e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_BANNED"; 16243e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber case USER_UNSPECIFIED: 16253e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "USER_UNSPECIFIED"; 16263e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber default: 16273e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber return "INVALID"; 16283e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber } 16293e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber } 16303e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber 163126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff /** 163226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * Get an identifier for associating credentials with this config 163326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @param current configuration contains values for additional fields 163426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * that are not part of this configuration. Used 163526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * when a config with some fields is passed by an application. 163626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @throws IllegalStateException if config is invalid for key id generation 163726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @hide 163826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff */ 1639ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde public String getKeyIdForCredentials(WifiConfiguration current) { 164026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff String keyMgmt = null; 164126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 164226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff try { 164326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Get current config details for fields that are not initialized 164426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(SSID)) SSID = current.SSID; 164526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.cardinality() == 0) { 164626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff allowedKeyManagement = current.allowedKeyManagement; 164726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 164826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 164926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt = KeyMgmt.strings[KeyMgmt.WPA_EAP]; 165026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 165161b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist if (allowedKeyManagement.get(KeyMgmt.OSEN)) { 165261b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist keyMgmt = KeyMgmt.strings[KeyMgmt.OSEN]; 165361b5a7689320274ce5fff9a9eae1866d8d696b9bJan Nordqvist } 165426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 165526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt += KeyMgmt.strings[KeyMgmt.IEEE8021X]; 165626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 165726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 165826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(keyMgmt)) { 165926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Not an EAP network"); 166026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 166126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 166226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" + 166326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff trimStringForKeyId(enterpriseConfig.getKeyId(current != null ? 166426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff current.enterpriseConfig : null)); 166526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } catch (NullPointerException e) { 166626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Invalid config details"); 166726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 166826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 166926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 167026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff private String trimStringForKeyId(String string) { 167126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Remove quotes and spaces 167226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return string.replace("\"", "").replace(" ", ""); 167326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 167426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static BitSet readBitSet(Parcel src) { 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int cardinality = src.readInt(); 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BitSet set = new BitSet(); 16799b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < cardinality; i++) { 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project set.set(src.readInt()); 16819b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return set; 16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void writeBitSet(Parcel dest, BitSet set) { 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nextSetBit = -1; 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(set.cardinality()); 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16919b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) { 16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(nextSetBit); 16939b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1696ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** @hide */ 1697ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public int getAuthType() { 1698d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist if (allowedKeyManagement.cardinality() > 1) { 1699d49288352908e8cbc9a001e13df2eb35e78deb1aJan Nordqvist throw new IllegalStateException("More than one auth type set"); 170026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 1701ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 1702ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_PSK; 1703ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) { 1704ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA2_PSK; 1705ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 1706ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_EAP; 1707ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 1708ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.IEEE8021X; 1709ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1710ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.NONE; 1711ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 1712ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 17137c3606c103e95d3991267cca2592402a68779cafvandwalle /* @hide 17147c3606c103e95d3991267cca2592402a68779cafvandwalle * Cache the config key, this seems useful as a speed up since a lot of 17157c3606c103e95d3991267cca2592402a68779cafvandwalle * lookups in the config store are done and based on this key. 17167c3606c103e95d3991267cca2592402a68779cafvandwalle */ 17177c3606c103e95d3991267cca2592402a68779cafvandwalle String mCachedConfigKey; 17187c3606c103e95d3991267cca2592402a68779cafvandwalle 17197c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 17207c3606c103e95d3991267cca2592402a68779cafvandwalle * return the string used to calculate the hash in WifiConfigStore 17217c3606c103e95d3991267cca2592402a68779cafvandwalle * and uniquely identify this WifiConfiguration 17227c3606c103e95d3991267cca2592402a68779cafvandwalle */ 17237c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey(boolean allowCached) { 17247c3606c103e95d3991267cca2592402a68779cafvandwalle String key; 17257c3606c103e95d3991267cca2592402a68779cafvandwalle if (allowCached && mCachedConfigKey != null) { 17267c3606c103e95d3991267cca2592402a68779cafvandwalle key = mCachedConfigKey; 1727b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } else if (providerFriendlyName != null) { 1728b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande key = FQDN + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 17296fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski if (!shared) { 17306fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski key += "-" + Integer.toString(UserHandle.getUserId(creatorUid)); 17316fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski } 17327c3606c103e95d3991267cca2592402a68779cafvandwalle } else { 17338e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 17348e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.WPA_PSK]; 17358e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP) || 17368e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 17378e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.WPA_EAP]; 17388e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else if (wepKeys[0] != null) { 17398e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + "WEP"; 17408e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti } else { 17418e1e34a3f659f76bbbfce2a2a8bdd3f471bf707dLorenzo Colitti key = SSID + KeyMgmt.strings[KeyMgmt.NONE]; 17427c3606c103e95d3991267cca2592402a68779cafvandwalle } 17436fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski if (!shared) { 17446fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski key += "-" + Integer.toString(UserHandle.getUserId(creatorUid)); 17456fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski } 17467c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = key; 17477c3606c103e95d3991267cca2592402a68779cafvandwalle } 17487c3606c103e95d3991267cca2592402a68779cafvandwalle return key; 17497c3606c103e95d3991267cca2592402a68779cafvandwalle } 17507c3606c103e95d3991267cca2592402a68779cafvandwalle 17517c3606c103e95d3991267cca2592402a68779cafvandwalle /** @hide 17527c3606c103e95d3991267cca2592402a68779cafvandwalle * get configKey, force calculating the config string 17537c3606c103e95d3991267cca2592402a68779cafvandwalle */ 17547c3606c103e95d3991267cca2592402a68779cafvandwalle public String configKey() { 17557c3606c103e95d3991267cca2592402a68779cafvandwalle return configKey(false); 17567c3606c103e95d3991267cca2592402a68779cafvandwalle } 17577c3606c103e95d3991267cca2592402a68779cafvandwalle 17586346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17596346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration getIpConfiguration() { 17606346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration; 17616346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17646346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpConfiguration(IpConfiguration ipConfiguration) { 17656346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = ipConfiguration; 17666346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17676346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17686346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17690a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public StaticIpConfiguration getStaticIpConfiguration() { 17700a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.getStaticIpConfiguration(); 17716346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17726346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17736346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17740a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { 17750a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.setStaticIpConfiguration(staticIpConfiguration); 17766346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17776346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17786346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17796346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.IpAssignment getIpAssignment() { 17806346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.ipAssignment; 17816346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17826346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17836346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17846346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setIpAssignment(IpConfiguration.IpAssignment ipAssignment) { 17856346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.ipAssignment = ipAssignment; 17866346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17876346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17886346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17896346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public IpConfiguration.ProxySettings getProxySettings() { 17906346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim return mIpConfiguration.proxySettings; 17916346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17926346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17936346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17946346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxySettings(IpConfiguration.ProxySettings proxySettings) { 17956346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = proxySettings; 17966346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 17976346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 17986346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim /** @hide */ 17990a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public ProxyInfo getHttpProxy() { 18000a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti return mIpConfiguration.httpProxy; 18010a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 18020a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 18030a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 18040a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti public void setHttpProxy(ProxyInfo httpProxy) { 18050a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = httpProxy; 18060a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti } 18070a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti 18080a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti /** @hide */ 18096346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim public void setProxy(ProxySettings settings, ProxyInfo proxy) { 18106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration.proxySettings = settings; 18110a82e80073e193725a9d4c84a93db8a04b2456b9Lorenzo Colitti mIpConfiguration.httpProxy = proxy; 18126346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 18136346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 181413f48ffab8c24d18a0a83e488a9b358a730580d4vandwalle /** Implement the Parcelable interface {@hide} */ 1815678979748585c5903125a404e448ad6c111dedadJaewan Kim public int describeContents() { 1816678979748585c5903125a404e448ad6c111dedadJaewan Kim return 0; 1817678979748585c5903125a404e448ad6c111dedadJaewan Kim } 1818678979748585c5903125a404e448ad6c111dedadJaewan Kim 18196fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski /** @hide */ 1820a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public void setPasspointManagementObjectTree(String passpointManagementObjectTree) { 1821a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande mPasspointManagementObjectTree = passpointManagementObjectTree; 1822a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande } 1823a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 1824a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande /** @hide */ 1825a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande public String getMoTree() { 1826a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande return mPasspointManagementObjectTree; 1827a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande } 1828a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande 1829128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** copy constructor {@hide} */ 1830128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public WifiConfiguration(WifiConfiguration source) { 1831128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff if (source != null) { 1832128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff networkId = source.networkId; 1833128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff status = source.status; 1834128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff SSID = source.SSID; 1835128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff BSSID = source.BSSID; 18368a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng FQDN = source.FQDN; 1837a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande roamingConsortiumIds = source.roamingConsortiumIds.clone(); 1838b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande providerFriendlyName = source.providerFriendlyName; 1839128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff preSharedKey = source.preSharedKey; 1840128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 18418d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionStatus.copy(source.getNetworkSelectionStatus()); 1842a0be0fb2709124a567f89114b1d8e80f74452edcxinhe apBand = source.apBand; 1843a0be0fb2709124a567f89114b1d8e80f74452edcxinhe apChannel = source.apChannel; 1844a0be0fb2709124a567f89114b1d8e80f74452edcxinhe 1845128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys = new String[4]; 18469b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 1847128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys[i] = source.wepKeys[i]; 18489b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 1849128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 1850128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepTxKeyIndex = source.wepTxKeyIndex; 1851128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff priority = source.priority; 1852128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff hiddenSSID = source.hiddenSSID; 1853128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedKeyManagement = (BitSet) source.allowedKeyManagement.clone(); 1854128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedProtocols = (BitSet) source.allowedProtocols.clone(); 1855128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedAuthAlgorithms = (BitSet) source.allowedAuthAlgorithms.clone(); 1856128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedPairwiseCiphers = (BitSet) source.allowedPairwiseCiphers.clone(); 1857128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedGroupCiphers = (BitSet) source.allowedGroupCiphers.clone(); 18589b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(source.enterpriseConfig); 1859678979748585c5903125a404e448ad6c111dedadJaewan Kim 18607c3606c103e95d3991267cca2592402a68779cafvandwalle defaultGwMacAddress = source.defaultGwMacAddress; 18617c3606c103e95d3991267cca2592402a68779cafvandwalle 18626346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim mIpConfiguration = new IpConfiguration(source.mIpConfiguration); 18636346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim 18647c3606c103e95d3991267cca2592402a68779cafvandwalle if ((source.linkedConfigurations != null) 18657c3606c103e95d3991267cca2592402a68779cafvandwalle && (source.linkedConfigurations.size() > 0)) { 18667c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations = new HashMap<String, Integer>(); 18677c3606c103e95d3991267cca2592402a68779cafvandwalle linkedConfigurations.putAll(source.linkedConfigurations); 18687c3606c103e95d3991267cca2592402a68779cafvandwalle } 18697c3606c103e95d3991267cca2592402a68779cafvandwalle mCachedConfigKey = null; //force null configKey 1870e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle selfAdded = source.selfAdded; 1871ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle validatedInternetAccess = source.validatedInternetAccess; 18728faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson ephemeral = source.ephemeral; 1873f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin meteredHint = source.meteredHint; 1874fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin useExternalScores = source.useExternalScores; 18757c3606c103e95d3991267cca2592402a68779cafvandwalle if (source.visibility != null) { 18767c3606c103e95d3991267cca2592402a68779cafvandwalle visibility = new Visibility(source.visibility); 18777c3606c103e95d3991267cca2592402a68779cafvandwalle } 18783a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle 18793a74e2ef1681eaae973fc989b3533a7f9c82e7b1vandwalle lastFailure = source.lastFailure; 18808f13548615f647a1208ace5369b504cb41149965vandwalle didSelfAdd = source.didSelfAdd; 18818f13548615f647a1208ace5369b504cb41149965vandwalle lastConnectUid = source.lastConnectUid; 18828f13548615f647a1208ace5369b504cb41149965vandwalle lastUpdateUid = source.lastUpdateUid; 18838f13548615f647a1208ace5369b504cb41149965vandwalle creatorUid = source.creatorUid; 18843e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber creatorName = source.creatorName; 18853e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber lastUpdateName = source.lastUpdateName; 18862d0f71eea20470985abde98d759910a1ac40b257vandwalle peerWifiConfiguration = source.peerWifiConfiguration; 18878d106780b6a638552749e54e169fc72537d4bcccxinhe 1888111fa0274d1d6620f9634783585387f3b773949evandwalle lastConnected = source.lastConnected; 1889111fa0274d1d6620f9634783585387f3b773949evandwalle lastDisconnected = source.lastDisconnected; 1890154b2cf6bbb99ee258b289846183172139a87dbavandwalle lastConnectionFailure = source.lastConnectionFailure; 18918650c035609507340e3a66459cea16ef08cd03a6vandwalle lastRoamingFailure = source.lastRoamingFailure; 18928650c035609507340e3a66459cea16ef08cd03a6vandwalle lastRoamingFailureReason = source.lastRoamingFailureReason; 18938650c035609507340e3a66459cea16ef08cd03a6vandwalle roamingFailureBlackListTimeMilli = source.roamingFailureBlackListTimeMilli; 1894154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverride = source.numScorerOverride; 1895154b2cf6bbb99ee258b289846183172139a87dbavandwalle numScorerOverrideAndSwitchedNetwork = source.numScorerOverrideAndSwitchedNetwork; 18964eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle numAssociation = source.numAssociation; 1897448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableLowRSSI = source.numUserTriggeredWifiDisableLowRSSI; 1898448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableBadRSSI = source.numUserTriggeredWifiDisableBadRSSI; 1899448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredWifiDisableNotHighRSSI = source.numUserTriggeredWifiDisableNotHighRSSI; 1900448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtLowRSSI = source.numTicksAtLowRSSI; 1901448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtBadRSSI = source.numTicksAtBadRSSI; 1902448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numTicksAtNotHighRSSI = source.numTicksAtNotHighRSSI; 1903448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle numUserTriggeredJoinAttempts = source.numUserTriggeredJoinAttempts; 19043e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber userApproved = source.userApproved; 1905ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle numNoInternetAccessReports = source.numNoInternetAccessReports; 19061248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti noInternetAccessExpected = source.noInternetAccessExpected; 1907ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle creationTime = source.creationTime; 1908ced1a6599042826a3bf678871d6b8a9e7187e973Pierre Vandwalle updateTime = source.updateTime; 19096fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski shared = source.shared; 19106346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim } 19119e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff } 19129e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 19146346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim @Override 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(networkId); 19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(status); 19188d106780b6a638552749e54e169fc72537d4bcccxinhe mNetworkSelectionStatus.writeToParcel(dest); 19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(SSID); 19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 1921a0be0fb2709124a567f89114b1d8e80f74452edcxinhe dest.writeInt(apBand); 1922a0be0fb2709124a567f89114b1d8e80f74452edcxinhe dest.writeInt(apChannel); 19238a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng dest.writeString(FQDN); 1924b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande dest.writeString(providerFriendlyName); 1925a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande dest.writeInt(roamingConsortiumIds.length); 19267226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande for (long roamingConsortiumId : roamingConsortiumIds) { 1927b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande dest.writeLong(roamingConsortiumId); 1928b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } 19299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(preSharedKey); 19309b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (String wepKey : wepKeys) { 19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(wepKey); 19329b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(wepTxKeyIndex); 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(hiddenSSID ? 1 : 0); 19365f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeInt(requirePMF ? 1 : 0); 19375f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng dest.writeString(updateIdentifier); 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedKeyManagement); 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedProtocols); 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedAuthAlgorithms); 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedPairwiseCiphers); 19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedGroupCiphers); 19444337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 19459b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff dest.writeParcelable(enterpriseConfig, flags); 1946678979748585c5903125a404e448ad6c111dedadJaewan Kim 19476346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim dest.writeParcelable(mIpConfiguration, flags); 19487c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(dhcpServer); 19497c3606c103e95d3991267cca2592402a68779cafvandwalle dest.writeString(defaultGwMacAddress); 1950e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle dest.writeInt(selfAdded ? 1 : 0); 19518f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(didSelfAdd ? 1 : 0); 1952ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle dest.writeInt(validatedInternetAccess ? 1 : 0); 19538faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson dest.writeInt(ephemeral ? 1 : 0); 1954f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin dest.writeInt(meteredHint ? 1 : 0); 1955fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin dest.writeInt(useExternalScores ? 1 : 0); 19568f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(creatorUid); 19578f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastConnectUid); 19588f13548615f647a1208ace5369b504cb41149965vandwalle dest.writeInt(lastUpdateUid); 19593e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeString(creatorName); 19603e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeString(lastUpdateName); 1961154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeLong(lastConnectionFailure); 19628650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeLong(lastRoamingFailure); 19638650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeInt(lastRoamingFailureReason); 19648650c035609507340e3a66459cea16ef08cd03a6vandwalle dest.writeLong(roamingFailureBlackListTimeMilli); 1965154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverride); 1966154b2cf6bbb99ee258b289846183172139a87dbavandwalle dest.writeInt(numScorerOverrideAndSwitchedNetwork); 19674eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(numAssociation); 1968448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableLowRSSI); 1969448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableBadRSSI); 1970448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredWifiDisableNotHighRSSI); 1971448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtLowRSSI); 1972448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtBadRSSI); 1973448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numTicksAtNotHighRSSI); 1974448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle dest.writeInt(numUserTriggeredJoinAttempts); 19753e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber dest.writeInt(userApproved); 1976ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle dest.writeInt(numNoInternetAccessReports); 19771248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti dest.writeInt(noInternetAccessExpected ? 1 : 0); 19786fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski dest.writeInt(shared ? 1 : 0); 1979a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande dest.writeString(mPasspointManagementObjectTree); 19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<WifiConfiguration> CREATOR = 19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<WifiConfiguration>() { 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration createFromParcel(Parcel in) { 19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiConfiguration config = new WifiConfiguration(); 19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.networkId = in.readInt(); 19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.status = in.readInt(); 19898d106780b6a638552749e54e169fc72537d4bcccxinhe config.mNetworkSelectionStatus.readFromParcel(in); 19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.SSID = in.readString(); 19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.BSSID = in.readString(); 1992a0be0fb2709124a567f89114b1d8e80f74452edcxinhe config.apBand = in.readInt(); 1993a0be0fb2709124a567f89114b1d8e80f74452edcxinhe config.apChannel = in.readInt(); 19948a9eb81df1218884bf0c4cdb214d2f1ec0a5679cYuhao Zheng config.FQDN = in.readString(); 1995b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande config.providerFriendlyName = in.readString(); 1996b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande int numRoamingConsortiumIds = in.readInt(); 19977226c8f95b5971af2710c8d2f8a8b6f2210e2420Vinit Deshpande config.roamingConsortiumIds = new long[numRoamingConsortiumIds]; 1998b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande for (int i = 0; i < numRoamingConsortiumIds; i++) { 1999a0d929e505432a8c84f3899696c910db16bd73bfVinit Deshpande config.roamingConsortiumIds[i] = in.readLong(); 2000b21d2489c1bd330e39f4489c7f221ebb4dffc283Vinit Deshpande } 20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.preSharedKey = in.readString(); 20029b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < config.wepKeys.length; i++) { 20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepKeys[i] = in.readString(); 20049b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepTxKeyIndex = in.readInt(); 20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.priority = in.readInt(); 20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.hiddenSSID = in.readInt() != 0; 20085f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.requirePMF = in.readInt() != 0; 20095f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng config.updateIdentifier = in.readString(); 20105f9385f7eaaacf854bfbe3268eefd3dd39dab05aYuhao Zheng 20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedKeyManagement = readBitSet(in); 20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedProtocols = readBitSet(in); 20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedAuthAlgorithms = readBitSet(in); 20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedPairwiseCiphers = readBitSet(in); 20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedGroupCiphers = readBitSet(in); 20164337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 20179b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff config.enterpriseConfig = in.readParcelable(null); 20186346155c5a48495944041e65ec279c88b0fa1391Jaewan Kim config.mIpConfiguration = in.readParcelable(null); 20197c3606c103e95d3991267cca2592402a68779cafvandwalle config.dhcpServer = in.readString(); 20207c3606c103e95d3991267cca2592402a68779cafvandwalle config.defaultGwMacAddress = in.readString(); 2021e50869df0d1a216a73c7bcbeeb9406d5ba475b20vandwalle config.selfAdded = in.readInt() != 0; 20228f13548615f647a1208ace5369b504cb41149965vandwalle config.didSelfAdd = in.readInt() != 0; 2023ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle config.validatedInternetAccess = in.readInt() != 0; 20248faf2a2a15853368a14babf935c156664b5f0b6cJeff Davidson config.ephemeral = in.readInt() != 0; 2025f0c9b8c68fd6f6deeab3d51a62a02f4ea17bdb98Jeremy Joslin config.meteredHint = in.readInt() != 0; 2026fc8601310d9af6e8ac16a118b16a1ae414e93900Jeremy Joslin config.useExternalScores = in.readInt() != 0; 20278f13548615f647a1208ace5369b504cb41149965vandwalle config.creatorUid = in.readInt(); 20288f13548615f647a1208ace5369b504cb41149965vandwalle config.lastConnectUid = in.readInt(); 20298f13548615f647a1208ace5369b504cb41149965vandwalle config.lastUpdateUid = in.readInt(); 20303e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.creatorName = in.readString(); 20313e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.lastUpdateName = in.readString(); 2032154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.lastConnectionFailure = in.readLong(); 20338650c035609507340e3a66459cea16ef08cd03a6vandwalle config.lastRoamingFailure = in.readLong(); 20348650c035609507340e3a66459cea16ef08cd03a6vandwalle config.lastRoamingFailureReason = in.readInt(); 20358650c035609507340e3a66459cea16ef08cd03a6vandwalle config.roamingFailureBlackListTimeMilli = in.readLong(); 2036154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverride = in.readInt(); 2037154b2cf6bbb99ee258b289846183172139a87dbavandwalle config.numScorerOverrideAndSwitchedNetwork = in.readInt(); 20384eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle config.numAssociation = in.readInt(); 2039448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableLowRSSI = in.readInt(); 2040448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableBadRSSI = in.readInt(); 2041448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredWifiDisableNotHighRSSI = in.readInt(); 2042448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtLowRSSI = in.readInt(); 2043448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtBadRSSI = in.readInt(); 2044448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numTicksAtNotHighRSSI = in.readInt(); 2045448e208b0a1b2a4cec22b636afd28d58f8785c2evandwalle config.numUserTriggeredJoinAttempts = in.readInt(); 20463e3857c4f5d277c69bcb0ff3a581a176f3a84bf8Sky Faber config.userApproved = in.readInt(); 2047ec3e9805dd7c527f961d1f2a14e5752b461186cavandwalle config.numNoInternetAccessReports = in.readInt(); 20481248dd3c296a94457d5864b7f433335f32490b50Lorenzo Colitti config.noInternetAccessExpected = in.readInt() != 0; 20496fb0756d2f59d70507919350f6192718b5d3f630Bartosz Fabianowski config.shared = in.readInt() != 0; 2050a772f0cf34f0db67997cb31fa44315c0933563daVinit Deshpande config.mPasspointManagementObjectTree = in.readString(); 20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return config; 20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration[] newArray(int size) { 20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WifiConfiguration[size]; 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2058aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2059aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 2060aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Serializes the object for backup 2061aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * @hide 2062aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 2063aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy public byte[] getBytesForBackup() throws IOException { 2064aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy ByteArrayOutputStream baos = new ByteArrayOutputStream(); 2065aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy DataOutputStream out = new DataOutputStream(baos); 2066aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2067aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(BACKUP_VERSION); 2068aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.writeString(out, SSID); 2069aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(apBand); 2070aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(apChannel); 2071aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.writeString(out, preSharedKey); 2072aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy out.writeInt(getAuthType()); 2073aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy return baos.toByteArray(); 2074aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2075aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2076aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy /** 2077aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * Deserializes a byte array into the WiFiConfiguration Object 2078aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy * @hide 2079aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy */ 2080aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy public static WifiConfiguration getWifiConfigFromBackup(DataInputStream in) throws IOException, 2081aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy BackupUtils.BadVersionException { 2082aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy WifiConfiguration config = new WifiConfiguration(); 2083aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy int version = in.readInt(); 2084aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (version < 1 || version > BACKUP_VERSION) { 2085aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy throw new BackupUtils.BadVersionException("Unknown Backup Serialization Version"); 2086aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2087aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2088aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy if (version == 1) return null; // Version 1 is a bad dataset. 2089aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy 2090aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.SSID = BackupUtils.readString(in); 2091aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.apBand = in.readInt(); 2092aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.apChannel = in.readInt(); 2093aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.preSharedKey = BackupUtils.readString(in); 2094aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy config.allowedKeyManagement.set(in.readInt()); 2095aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy return config; 2096aeb4c0601330f5f30fe0026a714ff59f0fe90abfRitesh Reddy } 2097b6cd6fa5a7314047409823ba48ff9e124ff53a70Glen Kuhne} 2098