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 1996ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriffimport android.net.LinkProperties; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 2226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriffimport android.text.TextUtils; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.BitSet; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class representing a configured Wi-Fi network, including the 289b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff * security configuration. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class WifiConfiguration implements Parcelable { 319b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff private static final String TAG = "WifiConfiguration"; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String ssidVarName = "ssid"; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String bssidVarName = "bssid"; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String pskVarName = "psk"; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] wepKeyVarNames = { "wep_key0", "wep_key1", "wep_key2", "wep_key3" }; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String wepTxKeyIdxVarName = "wep_tx_keyidx"; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String priorityVarName = "priority"; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String hiddenSSIDVarName = "scan_ssid"; 465ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff /** {@hide} */ 475ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff public static final int INVALID_NETWORK_ID = -1; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized key management schemes. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class KeyMgmt { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private KeyMgmt() { } 535069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA is not used; plaintext or static WEP could be used. */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA pre-shared key (requires {@code preSharedKey} to be specified). */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_PSK = 1; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA using EAP authentication. Generally used with an external authentication server. */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA_EAP = 2; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** IEEE 802.1X using EAP authentication and (optionally) dynamically 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generated WEP keys. */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int IEEE8021X = 3; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 64ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** WPA2 pre-shared key for use with soft access point 65ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * (requires {@code preSharedKey} to be specified). 66ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff * @hide 67ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff */ 68ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final int WPA2_PSK = 4; 69ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "key_mgmt"; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 72ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public static final String[] strings = { "NONE", "WPA_PSK", "WPA_EAP", "IEEE8021X", 73ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff "WPA2_PSK" }; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 755069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized security protocols. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Protocol { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Protocol() { } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA/IEEE 802.11i/D3.0 */ 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WPA = 0; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WPA2/IEEE 802.11i */ 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RSN = 1; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "proto"; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "WPA", "RSN" }; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized IEEE 802.11 authentication algorithms. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class AuthAlgorithm { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AuthAlgorithm() { } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Open System authentication (required for WPA/WPA2) */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int OPEN = 0; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Shared Key authentication (requires static WEP keys) */ 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SHARED = 1; 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** LEAP/Network EAP (only used with LEAP) */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LEAP = 2; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "auth_alg"; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "OPEN", "SHARED", "LEAP" }; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized pairwise ciphers for WPA. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class PairwiseCipher { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private PairwiseCipher() { } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Use only Group keys (deprecated) */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int NONE = 0; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 1; 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 2; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "pairwise"; 1245069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "NONE", "TKIP", "CCMP" }; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Recognized group ciphers. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class GroupCipher { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private GroupCipher() { } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key (original 802.11) */ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP40 = 0; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WEP104 = 1; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Temporal Key Integrity Protocol [IEEE 802.11i/D7.0] */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TKIP = 2; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0] */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CCMP = 3; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String varName = "group"; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "WEP40", "WEP104", "TKIP", "CCMP" }; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Possible status of a network configuration. */ 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class Status { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Status() { } 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** this is the network we are currently connected to */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int CURRENT = 0; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will not attempt to use this network */ 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DISABLED = 1; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** supplicant will consider this network available for association */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int ENABLED = 2; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] strings = { "current", "disabled", "enabled" }; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1688dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1698dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_UNKNOWN_REASON = 0; 1708dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1718dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_DNS_FAILURE = 1; 1728dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1738dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_DHCP_FAILURE = 2; 1748dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** @hide */ 1758dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public static final int DISABLED_AUTH_FAILURE = 3; 176c1b631e757999232674e53e9a1bc21abed6b1862Deepthi Gowri /** @hide */ 177c1b631e757999232674e53e9a1bc21abed6b1862Deepthi Gowri public static final int DISABLED_ASSOCIATION_REJECT = 4; 1788dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ID number that the supplicant uses to identify this 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network configuration entry. This must be passed as an argument 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to most calls into the supplicant. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int networkId; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The current status of this network configuration entry. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Status 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int status; 1918dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 1928dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy /** 1938dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy * The code referring to a reason for disabling the network 1948dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy * Valid when {@link #status} == Status.DISABLED 1958dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy * @hide 1968dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy */ 1978dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy public int disableReason; 1988dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The network's SSID. Can either be an ASCII string, 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which must be enclosed in double quotation marks 2024e8620f868e2490782ebb960404140ea9482c91dBen Dodson * (e.g., {@code "MyNetwork"}, or a string of 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hex digits,which are not enclosed in quotes 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (e.g., {@code 01a243f405}). 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When set, this network configuration entry should only be used when 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associating with the AP having the specified BSSID. The value is 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a string in the format of an Ethernet MAC address, e.g., 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pre-shared key for use with WPA-PSK. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of this key is read, the actual key is 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String preSharedKey; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Up to four WEP keys. Either an ASCII string enclosed in double 2254e8620f868e2490782ebb960404140ea9482c91dBen Dodson * quotation marks (e.g., {@code "abcdef"} or a string 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of hex digits (e.g., {@code 0102030405}). 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/> 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the value of one of these keys is read, the actual key is 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not returned, just a "*" if the key has a value, or the null 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * string otherwise. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] wepKeys; 2335069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Default WEP key index, ranging from 0 to 3. */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int wepTxKeyIndex; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Priority determines the preference given to a network by {@code wpa_supplicant} 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when choosing an access point with which to associate. 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int priority; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a network that does not broadcast its SSID, so an 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID-specific probe request must be used for scans. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hiddenSSID; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of key management protocols supported by this configuration. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link KeyMgmt} for descriptions of the values. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA-PSK WPA-EAP. 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedKeyManagement; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of security protocols supported by this configuration. 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link Protocol} for descriptions of the values. 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to WPA RSN. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedProtocols; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of authentication protocols supported by this configuration. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link AuthAlgorithm} for descriptions of the values. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to automatic selection. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedAuthAlgorithms; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of pairwise ciphers for WPA supported by this configuration. 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link PairwiseCipher} for descriptions of the values. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedPairwiseCiphers; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The set of group ciphers supported by this configuration. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See {@link GroupCipher} for descriptions of the values. 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defaults to CCMP TKIP WEP104 WEP40. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BitSet allowedGroupCiphers; 2799b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff /** 28026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * The enterprise configuration details specifying the EAP method, 28126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * certificates and other settings associated with the EAP. 2829b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff */ 2839b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff public WifiEnterpriseConfig enterpriseConfig; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28531b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff /** 28631b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff * @hide 28731b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff */ 28831b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff public enum IpAssignment { 289128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /* Use statically configured IP settings. Configuration can be accessed 29096ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff * with linkProperties */ 29131b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff STATIC, 292128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /* Use dynamically configured IP settigns */ 29331b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff DHCP, 294128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /* no IP details are assigned, this is used to indicate 295128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff * that any existing IP settings should be retained */ 29631b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff UNASSIGNED 29731b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff } 29831b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff /** 29931b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff * @hide 30031b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff */ 30131b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff public IpAssignment ipAssignment; 3025069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang 303128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** 304128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff * @hide 305128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff */ 306128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public enum ProxySettings { 307128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /* No proxy is to be used. Any existing proxy settings 308128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff * should be cleared. */ 309128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff NONE, 310128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /* Use statically configured proxy. Configuration can be accessed 31196ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff * with linkProperties */ 312128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff STATIC, 313128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /* no proxy details are assigned, this is used to indicate 314128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff * that any existing proxy settings should be retained */ 315602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk UNASSIGNED, 316602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk /* Use a Pac based proxy. 317602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk */ 318602b232a06ede86999aa362a12eb28cbc782dc1dJason Monk PAC 319128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff } 320128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** 321128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff * @hide 322128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff */ 323128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public ProxySettings proxySettings; 324128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** 325128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff * @hide 326128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff */ 32796ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff public LinkProperties linkProperties; 328128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration() { 3305ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff networkId = INVALID_NETWORK_ID; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = null; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = null; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project priority = 0; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project hiddenSSID = false; 3358dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy disableReason = DISABLED_UNKNOWN_REASON; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedKeyManagement = new BitSet(); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedProtocols = new BitSet(); 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedAuthAlgorithms = new BitSet(); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedPairwiseCiphers = new BitSet(); 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project allowedGroupCiphers = new BitSet(); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys = new String[4]; 3429b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wepKeys[i] = null; 3444337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang } 3459b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(); 34631b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff ipAssignment = IpAssignment.UNASSIGNED; 347128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff proxySettings = ProxySettings.UNASSIGNED; 34896ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff linkProperties = new LinkProperties(); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35110652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde /** 35210652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde * indicates whether the configuration is valid 35310652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde * @return true if valid, false otherwise 35410652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde * @hide 35510652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde */ 35610652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde public boolean isValid() { 35710652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde if (allowedKeyManagement.cardinality() > 1) { 3583b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde if (allowedKeyManagement.cardinality() != 2) { 3593b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde return false; 3603b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde } 3613b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde if (allowedKeyManagement.get(KeyMgmt.WPA_EAP) == false) { 3623b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde return false; 3633b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde } 3642871588101c9bf1e6c9573599dee9be106466175Vinit Deshapnde if ((allowedKeyManagement.get(KeyMgmt.IEEE8021X) == false) 3652871588101c9bf1e6c9573599dee9be106466175Vinit Deshapnde && (allowedKeyManagement.get(KeyMgmt.WPA_PSK) == false)) { 3663b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde return false; 3673b25f51609209ecd1374278b3dbec55a7bd15813Vinit Deshapnde } 36810652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde } 36910652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde 37010652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde // TODO: Add more checks 37110652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde return true; 37210652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde } 37310652a95b16909acf26f31cdafc0c6aa09212f26Vinit Deshapnde 3748dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy @Override 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 3768dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy StringBuilder sbuf = new StringBuilder(); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.status == WifiConfiguration.Status.CURRENT) { 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("* "); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (this.status == WifiConfiguration.Status.DISABLED) { 3808dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy sbuf.append("- DSBLE: ").append(this.disableReason).append(" "); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("ID: ").append(this.networkId).append(" SSID: ").append(this.SSID). 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(" BSSID: ").append(this.BSSID).append(" PRIO: ").append(this.priority). 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append('\n'); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" KeyMgmt:"); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int k = 0; k < this.allowedKeyManagement.size(); k++) { 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedKeyManagement.get(k)) { 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (k < KeyMgmt.strings.length) { 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(KeyMgmt.strings[k]); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" Protocols:"); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int p = 0; p < this.allowedProtocols.size(); p++) { 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedProtocols.get(p)) { 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (p < Protocol.strings.length) { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(Protocol.strings[p]); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" AuthAlgorithms:"); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int a = 0; a < this.allowedAuthAlgorithms.size(); a++) { 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedAuthAlgorithms.get(a)) { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a < AuthAlgorithm.strings.length) { 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(AuthAlgorithm.strings[a]); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" PairwiseCiphers:"); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int pc = 0; pc < this.allowedPairwiseCiphers.size(); pc++) { 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedPairwiseCiphers.get(pc)) { 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pc < PairwiseCipher.strings.length) { 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(PairwiseCipher.strings[pc]); 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append('\n'); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" GroupCiphers:"); 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int gc = 0; gc < this.allowedGroupCiphers.size(); gc++) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.allowedGroupCiphers.get(gc)) { 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(" "); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gc < GroupCipher.strings.length) { 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append(GroupCipher.strings[gc]); 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sbuf.append("??"); 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4435069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('\n').append(" PSK: "); 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.preSharedKey != null) { 4455069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('*'); 4465069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang } 4474337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 4489b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff sbuf.append(enterpriseConfig); 4495069cc78497209c035a7019b2f407bd1ed57f64aChung-yih Wang sbuf.append('\n'); 4509b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 45196ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff sbuf.append("IP assignment: " + ipAssignment.toString()); 45296ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff sbuf.append("\n"); 45396ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff sbuf.append("Proxy settings: " + proxySettings.toString()); 45496ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff sbuf.append("\n"); 45596ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff sbuf.append(linkProperties.toString()); 45696ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff sbuf.append("\n"); 457128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sbuf.toString(); 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Construct a WifiConfiguration from a scanned network 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param scannedAP the scan result used to construct the config entry 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TODO: figure out whether this is a useful way to construct a new entry. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration(ScanResult scannedAP) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project networkId = -1; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SSID = scannedAP.SSID; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BSSID = scannedAP.BSSID; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 473b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 474b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public String getPrintableSsid() { 475b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (SSID == null) return ""; 476b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff final int length = SSID.length(); 477b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') { 478b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID.substring(1, length - 1); 479b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 480b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 481b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** The ascii-encoded string format is P"<ascii-encoded-string>" 482b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * The decoding is implemented in the supplicant for a newly configured 483b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff * network. 484b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff */ 485b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') && 486b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff (SSID.charAt(length-1) == '"')) { 487b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded( 488b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff SSID.substring(2, length - 1)); 489b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return wifiSsid.toString(); 490b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 491b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff return SSID; 492b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 493b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 49426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff /** 49526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * Get an identifier for associating credentials with this config 49626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @param current configuration contains values for additional fields 49726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * that are not part of this configuration. Used 49826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * when a config with some fields is passed by an application. 49926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @throws IllegalStateException if config is invalid for key id generation 50026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff * @hide 50126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff */ 50226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff String getKeyIdForCredentials(WifiConfiguration current) { 50326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff String keyMgmt = null; 50426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 50526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff try { 50626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Get current config details for fields that are not initialized 50726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(SSID)) SSID = current.SSID; 50826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.cardinality() == 0) { 50926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff allowedKeyManagement = current.allowedKeyManagement; 51026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 51126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 51226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt = KeyMgmt.strings[KeyMgmt.WPA_EAP]; 51326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 51426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 51526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff keyMgmt += KeyMgmt.strings[KeyMgmt.IEEE8021X]; 51626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 51726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 51826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff if (TextUtils.isEmpty(keyMgmt)) { 51926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Not an EAP network"); 52026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 52126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 52226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return trimStringForKeyId(SSID) + "_" + keyMgmt + "_" + 52326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff trimStringForKeyId(enterpriseConfig.getKeyId(current != null ? 52426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff current.enterpriseConfig : null)); 52526d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } catch (NullPointerException e) { 52626d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff throw new IllegalStateException("Invalid config details"); 52726d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 52826d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 52926d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 53026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff private String trimStringForKeyId(String string) { 53126d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff // Remove quotes and spaces 53226d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff return string.replace("\"", "").replace(" ", ""); 53326d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 53426d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static BitSet readBitSet(Parcel src) { 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int cardinality = src.readInt(); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BitSet set = new BitSet(); 5399b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < cardinality; i++) { 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project set.set(src.readInt()); 5419b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return set; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static void writeBitSet(Parcel dest, BitSet set) { 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nextSetBit = -1; 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(set.cardinality()); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5519b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) { 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(nextSetBit); 5539b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 556ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff /** @hide */ 557ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff public int getAuthType() { 5580fd3b1be14ec6b6ba33140efa321b27dc3bf2862Vinit Deshapnde if (isValid() == false) { 5590fd3b1be14ec6b6ba33140efa321b27dc3bf2862Vinit Deshapnde throw new IllegalStateException("Invalid configuration"); 56026d0076f0dbb021c4e5cc1b37b632b2223fd9278Irfan Sheriff } 561ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff if (allowedKeyManagement.get(KeyMgmt.WPA_PSK)) { 562ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_PSK; 563ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) { 564ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA2_PSK; 565ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.WPA_EAP)) { 566ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.WPA_EAP; 567ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } else if (allowedKeyManagement.get(KeyMgmt.IEEE8021X)) { 568ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.IEEE8021X; 569ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 570ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff return KeyMgmt.NONE; 571ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff } 572ec8d23af7372204f068aebaa1bfae87dc9260e23Irfan Sheriff 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 578128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff /** copy constructor {@hide} */ 579128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff public WifiConfiguration(WifiConfiguration source) { 580128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff if (source != null) { 581128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff networkId = source.networkId; 582128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff status = source.status; 5838136de08ff4b5c4cca11220143f5905dca38cc26Isaac Levy disableReason = source.disableReason; 584128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff SSID = source.SSID; 585128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff BSSID = source.BSSID; 586128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff preSharedKey = source.preSharedKey; 587128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 588128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys = new String[4]; 5899b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < wepKeys.length; i++) { 590128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepKeys[i] = source.wepKeys[i]; 5919b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 592128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 593128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff wepTxKeyIndex = source.wepTxKeyIndex; 594128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff priority = source.priority; 595128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff hiddenSSID = source.hiddenSSID; 596128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedKeyManagement = (BitSet) source.allowedKeyManagement.clone(); 597128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedProtocols = (BitSet) source.allowedProtocols.clone(); 598128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedAuthAlgorithms = (BitSet) source.allowedAuthAlgorithms.clone(); 599128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedPairwiseCiphers = (BitSet) source.allowedPairwiseCiphers.clone(); 600128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff allowedGroupCiphers = (BitSet) source.allowedGroupCiphers.clone(); 601128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff 6029b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff enterpriseConfig = new WifiEnterpriseConfig(source.enterpriseConfig); 6039b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 604128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff ipAssignment = source.ipAssignment; 605128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff proxySettings = source.proxySettings; 60696ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff linkProperties = new LinkProperties(source.linkProperties); 6079e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff } 6089e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff } 6099e6222f4c126252c9950d072ab67d8b849d17643Irfan Sheriff 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(networkId); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(status); 6148dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy dest.writeInt(disableReason); 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(SSID); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(preSharedKey); 6189b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (String wepKey : wepKeys) { 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(wepKey); 6209b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(wepTxKeyIndex); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(priority); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(hiddenSSID ? 1 : 0); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedKeyManagement); 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedProtocols); 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedAuthAlgorithms); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedPairwiseCiphers); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project writeBitSet(dest, allowedGroupCiphers); 6304337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 6319b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff dest.writeParcelable(enterpriseConfig, flags); 6329b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 63331b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff dest.writeString(ipAssignment.name()); 634128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff dest.writeString(proxySettings.name()); 63596ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff dest.writeParcelable(linkProperties, flags); 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<WifiConfiguration> CREATOR = 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<WifiConfiguration>() { 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration createFromParcel(Parcel in) { 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiConfiguration config = new WifiConfiguration(); 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.networkId = in.readInt(); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.status = in.readInt(); 6458dc6a1b2823f374a176fb21b8a174664a5f825faIsaac Levy config.disableReason = in.readInt(); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.SSID = in.readString(); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.BSSID = in.readString(); 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.preSharedKey = in.readString(); 6499b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff for (int i = 0; i < config.wepKeys.length; i++) { 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepKeys[i] = in.readString(); 6519b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff } 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.wepTxKeyIndex = in.readInt(); 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.priority = in.readInt(); 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.hiddenSSID = in.readInt() != 0; 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedKeyManagement = readBitSet(in); 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedProtocols = readBitSet(in); 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedAuthAlgorithms = readBitSet(in); 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedPairwiseCiphers = readBitSet(in); 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project config.allowedGroupCiphers = readBitSet(in); 6604337476a6669ce52549ce4a60f5e4d07f8e3033fChung-yih Wang 6619b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff config.enterpriseConfig = in.readParcelable(null); 66231b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff 66331b62322bfa9470d648fbfd69510e03da29b29afIrfan Sheriff config.ipAssignment = IpAssignment.valueOf(in.readString()); 664128cecab968337038591cc14e3cdd5b37b2e5cb9Irfan Sheriff config.proxySettings = ProxySettings.valueOf(in.readString()); 66596ca91761e6857c1ca2e4fafe5b35e4b5fefe5a1Irfan Sheriff config.linkProperties = in.readParcelable(null); 6669b81319002634cf7118055f7aafaa26c27d4e5e8Irfan Sheriff 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return config; 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiConfiguration[] newArray(int size) { 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WifiConfiguration[size]; 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 675