196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne/* 296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Copyright (C) 2017 The Android Open Source Project 396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * 496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Licensed under the Apache License, Version 2.0 (the "License"); 596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * you may not use this file except in compliance with the License. 696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * You may obtain a copy of the License at 796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * 896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * http://www.apache.org/licenses/LICENSE-2.0 996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * 1096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Unless required by applicable law or agreed to in writing, software 1196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * distributed under the License is distributed on an "AS IS" BASIS, 1296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * See the License for the specific language governing permissions and 1496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * limitations under the License. 1596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne */ 1696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhnepackage com.android.server.wifi; 1796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 18c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Piusimport android.content.Context; 1996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetwork; 2096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.hardware.wifi.supplicant.V1_0.ISupplicantStaNetworkCallback; 2196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.hardware.wifi.supplicant.V1_0.SupplicantStatus; 2296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.hardware.wifi.supplicant.V1_0.SupplicantStatusCode; 2366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport android.net.wifi.WifiConfiguration; 2466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport android.net.wifi.WifiEnterpriseConfig; 2596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.os.RemoteException; 2666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport android.text.TextUtils; 2796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.util.Log; 2896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport android.util.MutableBoolean; 2996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 30c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Piusimport com.android.internal.R; 3166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport com.android.internal.annotations.VisibleForTesting; 3266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport com.android.internal.util.ArrayUtils; 332104cc5eaf4ed7b9047ca1de460838a8ca6d0fe1Roshan Piusimport com.android.server.wifi.util.NativeUtil; 3466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 35b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Piusimport org.json.JSONException; 36b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Piusimport org.json.JSONObject; 37b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius 38b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Piusimport java.io.UnsupportedEncodingException; 39b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Piusimport java.net.URLDecoder; 40b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Piusimport java.net.URLEncoder; 4196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhneimport java.util.ArrayList; 4266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport java.util.BitSet; 4366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport java.util.HashMap; 44b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Piusimport java.util.Iterator; 4566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhneimport java.util.Map; 46445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Piusimport java.util.regex.Matcher; 47445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Piusimport java.util.regex.Pattern; 48445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius 49c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Piusimport javax.annotation.concurrent.ThreadSafe; 50c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius 51c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius 5296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne/** 5396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Wrapper class for ISupplicantStaNetwork HAL calls. Gets and sets supplicant sta network variables 5496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * and interacts with networks. 5596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Public fields should be treated as invalid until their 'get' method is called, which will set the 5696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * value if it returns true 57c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius * To maintain thread-safety, the locking protocol is that every non-static method (regardless of 58c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius * access level) acquires mLock. 5996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne */ 60c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius@ThreadSafe 6196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhnepublic class SupplicantStaNetworkHal { 6296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private static final String TAG = "SupplicantStaNetworkHal"; 6366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne @VisibleForTesting 6466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne public static final String ID_STRING_KEY_FQDN = "fqdn"; 6566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne @VisibleForTesting 6666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne public static final String ID_STRING_KEY_CREATOR_UID = "creatorUid"; 6766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne @VisibleForTesting 6866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne public static final String ID_STRING_KEY_CONFIG_KEY = "configKey"; 6996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 70445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 71445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Regex pattern for extracting the GSM sim authentication response params from a string. 72dd685b34596b790c76e2cc03fc825c1249c9174fRoshan Pius * Matches a strings like the following: "[:<kc_value>:<sres_value>]"; 73445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 74445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius private static final Pattern GSM_AUTH_RESPONSE_PARAMS_PATTERN = 75dd685b34596b790c76e2cc03fc825c1249c9174fRoshan Pius Pattern.compile(":([0-9a-fA-F]+):([0-9a-fA-F]+)"); 76445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 77445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Regex pattern for extracting the UMTS sim authentication response params from a string. 78dd685b34596b790c76e2cc03fc825c1249c9174fRoshan Pius * Matches a strings like the following: ":<ik_value>:<ck_value>:<res_value>"; 79445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 80445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius private static final Pattern UMTS_AUTH_RESPONSE_PARAMS_PATTERN = 81dd685b34596b790c76e2cc03fc825c1249c9174fRoshan Pius Pattern.compile("^:([0-9a-fA-F]+):([0-9a-fA-F]+):([0-9a-fA-F]+)$"); 82445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 83445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Regex pattern for extracting the UMTS sim auts response params from a string. 84445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Matches a strings like the following: ":<auts_value>"; 85445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 865f39baacf16b55c5551574bd1d973cdb14f70c45Roshan Pius private static final Pattern UMTS_AUTS_RESPONSE_PARAMS_PATTERN = 875f39baacf16b55c5551574bd1d973cdb14f70c45Roshan Pius Pattern.compile("^:([0-9a-fA-F]+)$"); 88445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius 8996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private final Object mLock = new Object(); 9003fea88ccab149c07391d38f3c406bb04ab0a3a9Roshan Pius private final String mIfaceName; 91c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius private final WifiMonitor mWifiMonitor; 9203fea88ccab149c07391d38f3c406bb04ab0a3a9Roshan Pius private ISupplicantStaNetwork mISupplicantStaNetwork; 93b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius private ISupplicantStaNetworkCallback mISupplicantStaNetworkCallback; 9403fea88ccab149c07391d38f3c406bb04ab0a3a9Roshan Pius 95511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius private boolean mVerboseLoggingEnabled = false; 96c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius // Indicates whether the system is capable of 802.11r fast BSS transition. 97c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius private boolean mSystemSupportsFastBssTransition = false; 98c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius 99c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius // Network variables read from wpa_supplicant. 10066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private int mNetworkId; 10166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private ArrayList<Byte> mSsid; 10266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private byte[/* 6 */] mBssid; 10396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean mScanSsid; 10496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mKeyMgmtMask; 10596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mProtoMask; 10696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mAuthAlgMask; 10796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mGroupCipherMask; 10896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mPairwiseCipherMask; 10996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mPskPassphrase; 110f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius private byte[] mPsk; 11196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private ArrayList<Byte> mWepKey; 11296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mWepTxKeyIdx; 11396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean mRequirePmf; 11464950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius private String mIdStr; 11596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mEapMethod; 11696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private int mEapPhase2Method; 11796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private ArrayList<Byte> mEapIdentity; 11896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private ArrayList<Byte> mEapAnonymousIdentity; 11996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private ArrayList<Byte> mEapPassword; 12096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapCACert; 12196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapCAPath; 12296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapClientCert; 1231f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius private String mEapPrivateKeyId; 12496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapSubjectMatch; 12596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapAltSubjectMatch; 12696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean mEapEngine; 12796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapEngineID; 12896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private String mEapDomainSuffixMatch; 12996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 13003fea88ccab149c07391d38f3c406bb04ab0a3a9Roshan Pius SupplicantStaNetworkHal(ISupplicantStaNetwork iSupplicantStaNetwork, String ifaceName, 131c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius Context context, WifiMonitor monitor) { 13296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork = iSupplicantStaNetwork; 13303fea88ccab149c07391d38f3c406bb04ab0a3a9Roshan Pius mIfaceName = ifaceName; 134c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius mWifiMonitor = monitor; 135c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius mSystemSupportsFastBssTransition = 136c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius context.getResources().getBoolean(R.bool.config_wifi_fast_bss_transition_enabled); 13766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 13866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 13966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne /** 140511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius * Enable/Disable verbose logging. 141511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius * 142511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius * @param enable true to enable, false to disable. 143511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius */ 144511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius void enableVerboseLogging(boolean enable) { 145c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 146c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius mVerboseLoggingEnabled = enable; 147c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 148511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius } 149511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius 150511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius /** 15166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * Read network variables from wpa_supplicant into the provided WifiConfiguration object. 15266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * 15366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param config WifiConfiguration object to be populated. 15466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param networkExtras Map of network extras parsed from wpa_supplicant. 15566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @return true if succeeds, false otherwise. 15645a984619e338090981499e4823e0177649e3c28Roshan Pius * @throws IllegalArgumentException on malformed configuration params. 15766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne */ 15866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne public boolean loadWifiConfiguration(WifiConfiguration config, 15966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne Map<String, String> networkExtras) { 160c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 161c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config == null) return false; 162c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** SSID */ 163c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.SSID = null; 164c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getSsid() && !ArrayUtils.isEmpty(mSsid)) { 165c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.SSID = NativeUtil.encodeSsid(mSsid); 166c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 167c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to read ssid"); 168c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 169c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 170c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Network Id */ 171c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.networkId = -1; 172c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getId()) { 173c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.networkId = mNetworkId; 174c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 175c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "getId failed"); 176c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 177c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 178c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** BSSID */ 179c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.getNetworkSelectionStatus().setNetworkSelectionBSSID(null); 180c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getBssid() && !ArrayUtils.isEmpty(mBssid)) { 181c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.getNetworkSelectionStatus().setNetworkSelectionBSSID( 182c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius NativeUtil.macAddressFromByteArray(mBssid)); 183c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 184c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Scan SSID (Is Hidden Network?) */ 185c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.hiddenSSID = false; 186c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getScanSsid()) { 187c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.hiddenSSID = mScanSsid; 188c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 189c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Require PMF*/ 190c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.requirePMF = false; 191c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getRequirePmf()) { 192c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.requirePMF = mRequirePmf; 193c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 194c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** WEP keys **/ 195c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.wepTxKeyIndex = -1; 196c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getWepTxKeyIdx()) { 197c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.wepTxKeyIndex = mWepTxKeyIdx; 198c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 199c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius for (int i = 0; i < 4; i++) { 200c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.wepKeys[i] = null; 201c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getWepKey(i) && !ArrayUtils.isEmpty(mWepKey)) { 202e5f9b2bbc9f9c5f34d6ad9d290bfb63e48b79587Roshan Pius config.wepKeys[i] = NativeUtil.bytesToHexOrQuotedString(mWepKey); 203c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 204c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 205c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** PSK pass phrase */ 206c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.preSharedKey = null; 207c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getPskPassphrase() && !TextUtils.isEmpty(mPskPassphrase)) { 208c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.preSharedKey = NativeUtil.addEnclosingQuotes(mPskPassphrase); 209c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else if (getPsk() && !ArrayUtils.isEmpty(mPsk)) { 210c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.preSharedKey = NativeUtil.hexStringFromByteArray(mPsk); 211c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 212c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** allowedKeyManagement */ 213c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getKeyMgmt()) { 214c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius BitSet keyMgmtMask = supplicantToWifiConfigurationKeyMgmtMask(mKeyMgmtMask); 215c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedKeyManagement = removeFastTransitionFlags(keyMgmtMask); 216c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 217c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** allowedProtocols */ 218c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getProto()) { 219c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedProtocols = 220c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius supplicantToWifiConfigurationProtoMask(mProtoMask); 221c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 222c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** allowedAuthAlgorithms */ 223c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getAuthAlg()) { 224c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedAuthAlgorithms = 225c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius supplicantToWifiConfigurationAuthAlgMask(mAuthAlgMask); 226c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 227c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** allowedGroupCiphers */ 228c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getGroupCipher()) { 229c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedGroupCiphers = 230c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius supplicantToWifiConfigurationGroupCipherMask(mGroupCipherMask); 231c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 232c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** allowedPairwiseCiphers */ 233c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getPairwiseCipher()) { 234c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedPairwiseCiphers = 235c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius supplicantToWifiConfigurationPairwiseCipherMask(mPairwiseCipherMask); 236c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 237c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** metadata: idstr */ 238c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getIdStr() && !TextUtils.isEmpty(mIdStr)) { 239c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Map<String, String> metadata = parseNetworkExtra(mIdStr); 240c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius networkExtras.putAll(metadata); 241c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 242c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.w(TAG, "getIdStr failed or empty"); 243c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 244c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return loadWifiEnterpriseConfig(config.SSID, config.enterpriseConfig); 245c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 24666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 24766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 24866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne /** 24966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * Save an entire WifiConfiguration to wpa_supplicant via HIDL. 25066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * 25166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param config WifiConfiguration object to be saved. 25266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @return true if succeeds, false otherwise. 25345a984619e338090981499e4823e0177649e3c28Roshan Pius * @throws IllegalArgumentException on malformed configuration params. 25466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne */ 25566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne public boolean saveWifiConfiguration(WifiConfiguration config) { 256c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 257c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config == null) return false; 258c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** SSID */ 259c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.SSID != null) { 260c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setSsid(NativeUtil.decodeSsid(config.SSID))) { 261c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set SSID: " + config.SSID); 262f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius return false; 263f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 264c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 265c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** BSSID */ 266c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius String bssidStr = config.getNetworkSelectionStatus().getNetworkSelectionBSSID(); 267c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (bssidStr != null) { 268c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] bssid = NativeUtil.macAddressToByteArray(bssidStr); 269c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setBssid(bssid)) { 270c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set BSSID: " + bssidStr); 271f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius return false; 272f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 273f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 274c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Pre Shared Key */ 275c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // This can either be quoted ASCII passphrase or hex string for raw psk. 276c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.preSharedKey != null) { 277c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.preSharedKey.startsWith("\"")) { 278c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setPskPassphrase(NativeUtil.removeEnclosingQuotes(config.preSharedKey))) { 279c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set psk passphrase"); 280c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 281c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 282c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 283c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setPsk(NativeUtil.hexStringToByteArray(config.preSharedKey))) { 284c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set psk"); 28566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return false; 28666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 28766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 28866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 289c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius 290c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Wep Keys */ 291c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius boolean hasSetKey = false; 292c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.wepKeys != null) { 293c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius for (int i = 0; i < config.wepKeys.length; i++) { 294c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.wepKeys[i] != null) { 295c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setWepKey( 296e5f9b2bbc9f9c5f34d6ad9d290bfb63e48b79587Roshan Pius i, NativeUtil.hexOrQuotedStringToBytes(config.wepKeys[i]))) { 297c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set wep_key " + i); 298c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 299c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 300c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius hasSetKey = true; 301c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 302c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 303c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 304c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Wep Tx Key Idx */ 305c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (hasSetKey) { 306c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setWepTxKeyIdx(config.wepTxKeyIndex)) { 307c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set wep_tx_keyidx: " + config.wepTxKeyIndex); 308c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 309c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 310c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 311c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** HiddenSSID */ 312c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setScanSsid(config.hiddenSSID)) { 313c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, config.SSID + ": failed to set hiddenSSID: " + config.hiddenSSID); 31466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return false; 31566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 316c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** RequirePMF */ 317c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setRequirePmf(config.requirePMF)) { 318c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, config.SSID + ": failed to set requirePMF: " + config.requirePMF); 319c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius return false; 320c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius } 321c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Key Management Scheme */ 322c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.allowedKeyManagement.cardinality() != 0) { 323c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // Add FT flags if supported. 324c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius BitSet keyMgmtMask = addFastTransitionFlags(config.allowedKeyManagement); 325c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setKeyMgmt(wifiConfigurationToSupplicantKeyMgmtMask(keyMgmtMask))) { 326c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set Key Management"); 327c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 328c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 329c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 330c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Security Protocol */ 331c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.allowedProtocols.cardinality() != 0 332c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setProto(wifiConfigurationToSupplicantProtoMask(config.allowedProtocols))) { 333c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set Security Protocol"); 334c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius return false; 335c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 336c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Auth Algorithm */ 337c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.allowedAuthAlgorithms.cardinality() != 0 338c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setAuthAlg(wifiConfigurationToSupplicantAuthAlgMask( 339c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedAuthAlgorithms))) { 340c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set AuthAlgorithm"); 341c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 342c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 343c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Group Cipher */ 344c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.allowedGroupCiphers.cardinality() != 0 345c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setGroupCipher(wifiConfigurationToSupplicantGroupCipherMask( 346c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedGroupCiphers))) { 347c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set Group Cipher"); 348c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 349c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 350c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** Pairwise Cipher*/ 351c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.allowedPairwiseCiphers.cardinality() != 0 352c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setPairwiseCipher(wifiConfigurationToSupplicantPairwiseCipherMask( 353c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius config.allowedPairwiseCiphers))) { 354c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set PairwiseCipher"); 355c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 356c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 357c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** metadata: FQDN + ConfigKey + CreatorUid */ 358c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius final Map<String, String> metadata = new HashMap<String, String>(); 359c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.isPasspoint()) { 360c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius metadata.put(ID_STRING_KEY_FQDN, config.FQDN); 361c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 362c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius metadata.put(ID_STRING_KEY_CONFIG_KEY, config.configKey()); 363c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius metadata.put(ID_STRING_KEY_CREATOR_UID, Integer.toString(config.creatorUid)); 364c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setIdStr(createNetworkExtra(metadata))) { 365c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set id string"); 366c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 367c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 368c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** UpdateIdentifier */ 369c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.updateIdentifier != null 370c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setUpdateIdentifier(Integer.parseInt(config.updateIdentifier))) { 371c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to set update identifier"); 372c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 373c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 374c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // Finish here if no EAP config to set 375c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (config.enterpriseConfig != null 376c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && config.enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE) { 377c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!saveWifiEnterpriseConfig(config.SSID, config.enterpriseConfig)) { 378c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 379c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 380c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 381c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius 382c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // Now that the network is configured fully, start listening for callback events. 383c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius mISupplicantStaNetworkCallback = 384c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius new SupplicantStaNetworkHalCallback(config.networkId, config.SSID); 385c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!registerCallback(mISupplicantStaNetworkCallback)) { 386c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Failed to register callback"); 387c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 388c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 389c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return true; 390c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 39166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 39266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 39366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne /** 39466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * Read network variables from wpa_supplicant into the provided WifiEnterpriseConfig object. 39566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * 39666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param ssid SSID of the network. (Used for logging purposes only) 39766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param eapConfig WifiEnterpriseConfig object to be populated. 39866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @return true if succeeds, false otherwise. 39966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne */ 40066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private boolean loadWifiEnterpriseConfig(String ssid, WifiEnterpriseConfig eapConfig) { 401c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 402c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (eapConfig == null) return false; 403c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP method */ 404c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapMethod()) { 405c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setEapMethod(supplicantToWifiConfigurationEapMethod(mEapMethod)); 406c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 407c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // Invalid eap method could be because it's not an enterprise config. 408c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to get eap method. Assumimg not an enterprise network"); 409c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return true; 410c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 411c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Phase 2 method */ 412c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapPhase2Method()) { 413c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setPhase2Method( 414c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius supplicantToWifiConfigurationEapPhase2Method(mEapPhase2Method)); 415c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 416c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // We cannot have an invalid eap phase 2 method. Return failure. 417c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "failed to get eap phase2 method"); 418c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 419c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 420c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Identity */ 421c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapIdentity() && !ArrayUtils.isEmpty(mEapIdentity)) { 422c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue( 423c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius WifiEnterpriseConfig.IDENTITY_KEY, 424c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius NativeUtil.stringFromByteArrayList(mEapIdentity)); 425c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 426c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Anonymous Identity */ 427c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapAnonymousIdentity() && !ArrayUtils.isEmpty(mEapAnonymousIdentity)) { 428c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue( 429c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius WifiEnterpriseConfig.ANON_IDENTITY_KEY, 430c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius NativeUtil.stringFromByteArrayList(mEapAnonymousIdentity)); 431c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 432c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Password */ 433c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapPassword() && !ArrayUtils.isEmpty(mEapPassword)) { 434c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue( 435c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius WifiEnterpriseConfig.PASSWORD_KEY, 436c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius NativeUtil.stringFromByteArrayList(mEapPassword)); 437c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 438c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Client Cert */ 439c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapClientCert() && !TextUtils.isEmpty(mEapClientCert)) { 440c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue(WifiEnterpriseConfig.CLIENT_CERT_KEY, mEapClientCert); 441c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 442c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP CA Cert */ 443c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapCACert() && !TextUtils.isEmpty(mEapCACert)) { 444c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue(WifiEnterpriseConfig.CA_CERT_KEY, mEapCACert); 445c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 446c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Subject Match */ 447c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapSubjectMatch() && !TextUtils.isEmpty(mEapSubjectMatch)) { 448c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue(WifiEnterpriseConfig.SUBJECT_MATCH_KEY, mEapSubjectMatch); 449c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 450c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Engine ID */ 451c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapEngineID() && !TextUtils.isEmpty(mEapEngineID)) { 452c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue(WifiEnterpriseConfig.ENGINE_ID_KEY, mEapEngineID); 453c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 454c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Engine. Set this only if the engine id is non null. */ 455c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapEngine() && !TextUtils.isEmpty(mEapEngineID)) { 456c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue( 457c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius WifiEnterpriseConfig.ENGINE_KEY, 458c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius mEapEngine 459c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius ? WifiEnterpriseConfig.ENGINE_ENABLE 460c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius : WifiEnterpriseConfig.ENGINE_DISABLE); 461c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 462c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Private Key */ 463c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapPrivateKeyId() && !TextUtils.isEmpty(mEapPrivateKeyId)) { 464c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue(WifiEnterpriseConfig.PRIVATE_KEY_ID_KEY, mEapPrivateKeyId); 465c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 466c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Alt Subject Match */ 467c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapAltSubjectMatch() && !TextUtils.isEmpty(mEapAltSubjectMatch)) { 468c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue( 469c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius WifiEnterpriseConfig.ALTSUBJECT_MATCH_KEY, mEapAltSubjectMatch); 470c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 471c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Domain Suffix Match */ 472c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapDomainSuffixMatch() && !TextUtils.isEmpty(mEapDomainSuffixMatch)) { 473c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue( 474c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius WifiEnterpriseConfig.DOM_SUFFIX_MATCH_KEY, mEapDomainSuffixMatch); 475c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 476c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP CA Path*/ 477c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (getEapCAPath() && !TextUtils.isEmpty(mEapCAPath)) { 478c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.setFieldValue(WifiEnterpriseConfig.CA_PATH_KEY, mEapCAPath); 479c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 48064950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius return true; 48164950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius } 48266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 48366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 48466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne /** 48566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * Save network variables from the provided WifiEnterpriseConfig object to wpa_supplicant. 48666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * 48766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param ssid SSID of the network. (Used for logging purposes only) 48866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @param eapConfig WifiEnterpriseConfig object to be saved. 48966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @return true if succeeds, false otherwise. 49066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne */ 49166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private boolean saveWifiEnterpriseConfig(String ssid, WifiEnterpriseConfig eapConfig) { 492c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 493c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (eapConfig == null) return false; 494c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP method */ 495c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setEapMethod(wifiConfigurationToSupplicantEapMethod(eapConfig.getEapMethod()))) { 496c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap method: " + eapConfig.getEapMethod()); 497c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 498c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 499c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Phase 2 method */ 500c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!setEapPhase2Method(wifiConfigurationToSupplicantEapPhase2Method( 501c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapConfig.getPhase2Method()))) { 502c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap phase 2 method: " 503c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius + eapConfig.getPhase2Method()); 504c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 505c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 506c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius String eapParam = null; 507c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Identity */ 508c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.IDENTITY_KEY); 509c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) 510c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setEapIdentity(NativeUtil.stringToByteArrayList(eapParam))) { 511c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap identity: " + eapParam); 512c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 513c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 514c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Anonymous Identity */ 515c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.ANON_IDENTITY_KEY); 516c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) 517c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setEapAnonymousIdentity(NativeUtil.stringToByteArrayList(eapParam))) { 518c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap anonymous identity: " + eapParam); 519c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 520c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 521c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Password */ 522c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.PASSWORD_KEY); 523c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) 524c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setEapPassword(NativeUtil.stringToByteArrayList(eapParam))) { 525c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap password"); 526c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 527c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 528c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Client Cert */ 529c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.CLIENT_CERT_KEY); 530c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapClientCert(eapParam)) { 531c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap client cert: " + eapParam); 532c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 533c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 534c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP CA Cert */ 535c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.CA_CERT_KEY); 536c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapCACert(eapParam)) { 537c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap ca cert: " + eapParam); 538c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 539c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 540c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Subject Match */ 541c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.SUBJECT_MATCH_KEY); 542c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapSubjectMatch(eapParam)) { 543c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap subject match: " + eapParam); 544c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 545c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 546c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Engine ID */ 547c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.ENGINE_ID_KEY); 548c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapEngineID(eapParam)) { 549c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap engine id: " + eapParam); 550c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 551c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 552c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Engine */ 553c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.ENGINE_KEY); 554c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapEngine( 555c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam.equals(WifiEnterpriseConfig.ENGINE_ENABLE) ? true : false)) { 556c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap engine: " + eapParam); 557c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 558c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 559c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Private Key */ 560c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.PRIVATE_KEY_ID_KEY); 561c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapPrivateKeyId(eapParam)) { 562c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap private key: " + eapParam); 563c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 564c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 565c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Alt Subject Match */ 566c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.ALTSUBJECT_MATCH_KEY); 567c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapAltSubjectMatch(eapParam)) { 568c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap alt subject match: " + eapParam); 569c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 570c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 571c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Domain Suffix Match */ 572c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.DOM_SUFFIX_MATCH_KEY); 573c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapDomainSuffixMatch(eapParam)) { 574c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap domain suffix match: " + eapParam); 575c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 576c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 577c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP CA Path*/ 578c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.CA_PATH_KEY); 579c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) && !setEapCAPath(eapParam)) { 580c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set eap ca path: " + eapParam); 581c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 582c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 583c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius 584c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius /** EAP Proactive Key Caching */ 585c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius eapParam = eapConfig.getFieldValue(WifiEnterpriseConfig.OPP_KEY_CACHING); 586c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!TextUtils.isEmpty(eapParam) 587c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius && !setEapProactiveKeyCaching(eapParam.equals("1") ? true : false)) { 588c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, ssid + ": failed to set proactive key caching: " + eapParam); 589c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 590c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 591c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return true; 592c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 59366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 59466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 59566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne /** 59666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * Maps WifiConfiguration Key Management BitSet to Supplicant HIDL bitmask int 59766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * TODO(b/32571829): Update mapping when fast transition keys are added 59866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * @return bitmask int describing the allowed Key Management schemes, readable by the Supplicant 59966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne * HIDL hal 60066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne */ 60166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantKeyMgmtMask(BitSet keyMgmt) { 60266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int mask = 0; 60366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne for (int bit = keyMgmt.nextSetBit(0); bit != -1; bit = keyMgmt.nextSetBit(bit + 1)) { 60466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (bit) { 60566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.NONE: 60666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.NONE; 60766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 60866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.WPA_PSK: 60966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.WPA_PSK; 61066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 61166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.WPA_EAP: 61266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.WPA_EAP; 61366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 61466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.IEEE8021X: 61566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.IEEE8021X; 61666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 61766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.OSEN: 61866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.OSEN; 61966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 62066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.FT_PSK: 62166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.FT_PSK; 62266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 62366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.FT_EAP: 62466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.KeyMgmtMask.FT_EAP; 62566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 62666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.KeyMgmt.WPA2_PSK: // This should never happen 62766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 62866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 62966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "Invalid protoMask bit in keyMgmt: " + bit); 63066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 63166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 63266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return mask; 63366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 63466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 63566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantProtoMask(BitSet protoMask) { 63666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int mask = 0; 63766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne for (int bit = protoMask.nextSetBit(0); bit != -1; bit = protoMask.nextSetBit(bit + 1)) { 63866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (bit) { 63966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.Protocol.WPA: 64066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.ProtoMask.WPA; 64166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 64266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.Protocol.RSN: 64366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.ProtoMask.RSN; 64466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 64566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.Protocol.OSEN: 64666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.ProtoMask.OSEN; 64766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 64866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 64966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 65066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "Invalid protoMask bit in wificonfig: " + bit); 65166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 65266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 65366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return mask; 65466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 65566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 65666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantAuthAlgMask(BitSet authAlgMask) { 65766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int mask = 0; 65866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne for (int bit = authAlgMask.nextSetBit(0); bit != -1; 65966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne bit = authAlgMask.nextSetBit(bit + 1)) { 66066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (bit) { 66166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.AuthAlgorithm.OPEN: 66266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.AuthAlgMask.OPEN; 66366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 66466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.AuthAlgorithm.SHARED: 66566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.AuthAlgMask.SHARED; 66666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 66766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.AuthAlgorithm.LEAP: 66866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.AuthAlgMask.LEAP; 66966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 67066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 67166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 67266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "Invalid authAlgMask bit in wificonfig: " + bit); 67366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 67466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 67566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return mask; 67666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 67766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 67866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantGroupCipherMask(BitSet groupCipherMask) { 67966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int mask = 0; 68066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne for (int bit = groupCipherMask.nextSetBit(0); bit != -1; bit = 68166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne groupCipherMask.nextSetBit(bit + 1)) { 68266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (bit) { 68366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.GroupCipher.WEP40: 68466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.GroupCipherMask.WEP40; 68566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 68666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.GroupCipher.WEP104: 68766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.GroupCipherMask.WEP104; 68866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 68966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.GroupCipher.TKIP: 69066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.GroupCipherMask.TKIP; 69166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 69266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.GroupCipher.CCMP: 69366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.GroupCipherMask.CCMP; 69466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 69566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.GroupCipher.GTK_NOT_USED: 69666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.GroupCipherMask.GTK_NOT_USED; 69766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 69866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 69966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 70066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "Invalid GroupCipherMask bit in wificonfig: " + bit); 70166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 70266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 70366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return mask; 70466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 70566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 70666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantPairwiseCipherMask(BitSet pairwiseCipherMask) { 70766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int mask = 0; 70866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne for (int bit = pairwiseCipherMask.nextSetBit(0); bit != -1; 70966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne bit = pairwiseCipherMask.nextSetBit(bit + 1)) { 71066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (bit) { 71166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.PairwiseCipher.NONE: 71266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.PairwiseCipherMask.NONE; 71366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 71466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.PairwiseCipher.TKIP: 71566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.PairwiseCipherMask.TKIP; 71666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 71766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiConfiguration.PairwiseCipher.CCMP: 71866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask |= ISupplicantStaNetwork.PairwiseCipherMask.CCMP; 71966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne break; 72066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 72166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 72266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "Invalid pairwiseCipherMask bit in wificonfig: " + bit); 72366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 72466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 72566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return mask; 72666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 72766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 72866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int supplicantToWifiConfigurationEapMethod(int value) { 72966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (value) { 73066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.PEAP: 73166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.PEAP; 73266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.TLS: 73366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.TLS; 73466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.TTLS: 73566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.TTLS; 73666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.PWD: 73766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.PWD; 73866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.SIM: 73966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.SIM; 74066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.AKA: 74166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.AKA; 74266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.AKA_PRIME: 74366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.AKA_PRIME; 74466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapMethod.WFA_UNAUTH_TLS: 74566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Eap.UNAUTH_TLS; 74666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne // WifiEnterpriseConfig.Eap.NONE: 74766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 74866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne Log.e(TAG, "invalid eap method value from supplicant: " + value); 74966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return -1; 75066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 75166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 75266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 75366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int supplicantToWifiConfigurationEapPhase2Method(int value) { 75466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (value) { 75566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapPhase2Method.NONE: 75666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Phase2.NONE; 75766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapPhase2Method.PAP: 75866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Phase2.PAP; 75966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapPhase2Method.MSPAP: 76066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Phase2.MSCHAP; 76166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapPhase2Method.MSPAPV2: 76266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Phase2.MSCHAPV2; 76366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case ISupplicantStaNetwork.EapPhase2Method.GTC: 76466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return WifiEnterpriseConfig.Phase2.GTC; 765cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius case ISupplicantStaNetwork.EapPhase2Method.SIM: 766cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius return WifiEnterpriseConfig.Phase2.SIM; 767cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius case ISupplicantStaNetwork.EapPhase2Method.AKA: 768cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius return WifiEnterpriseConfig.Phase2.AKA; 769cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius case ISupplicantStaNetwork.EapPhase2Method.AKA_PRIME: 770cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius return WifiEnterpriseConfig.Phase2.AKA_PRIME; 77166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 77266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne Log.e(TAG, "invalid eap phase2 method value from supplicant: " + value); 77366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return -1; 77466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 77566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 77666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 77766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int supplicantMaskValueToWifiConfigurationBitSet(int supplicantMask, 77866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int supplicantValue, BitSet bitset, 77966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int bitSetPosition) { 78066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne bitset.set(bitSetPosition, (supplicantMask & supplicantValue) == supplicantValue); 78166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne int modifiedSupplicantMask = supplicantMask & ~supplicantValue; 78266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return modifiedSupplicantMask; 78396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 78496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 78566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static BitSet supplicantToWifiConfigurationKeyMgmtMask(int mask) { 78666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne BitSet bitset = new BitSet(); 78766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 78866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.NONE, bitset, 78966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.NONE); 79066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 79166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.WPA_PSK, bitset, 79266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.WPA_PSK); 79366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 79466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.WPA_EAP, bitset, 79566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.WPA_EAP); 79666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 79766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.IEEE8021X, bitset, 79866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.IEEE8021X); 79966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 80066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.OSEN, bitset, 80166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.OSEN); 80266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 80366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.FT_PSK, bitset, 80466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.FT_PSK); 80566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 80666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.KeyMgmtMask.FT_EAP, bitset, 80766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.KeyMgmt.FT_EAP); 80866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne if (mask != 0) { 80966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 81066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "invalid key mgmt mask from supplicant: " + mask); 81166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 81266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return bitset; 81366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 81466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 81566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static BitSet supplicantToWifiConfigurationProtoMask(int mask) { 81666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne BitSet bitset = new BitSet(); 81766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 81866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.ProtoMask.WPA, bitset, 81966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.Protocol.WPA); 82066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 82166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.ProtoMask.RSN, bitset, 82266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.Protocol.RSN); 82366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 82466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.ProtoMask.OSEN, bitset, 82566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.Protocol.OSEN); 82666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne if (mask != 0) { 82766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 82866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "invalid proto mask from supplicant: " + mask); 82966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 83066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return bitset; 83166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 83266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 83366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static BitSet supplicantToWifiConfigurationAuthAlgMask(int mask) { 83466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne BitSet bitset = new BitSet(); 83566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 83666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.AuthAlgMask.OPEN, bitset, 83766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.AuthAlgorithm.OPEN); 83866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 83966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.AuthAlgMask.SHARED, bitset, 84066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.AuthAlgorithm.SHARED); 84166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 84266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.AuthAlgMask.LEAP, bitset, 84366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.AuthAlgorithm.LEAP); 84466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne if (mask != 0) { 84566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 84666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "invalid auth alg mask from supplicant: " + mask); 84766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 84866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return bitset; 84966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 85066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 85166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static BitSet supplicantToWifiConfigurationGroupCipherMask(int mask) { 85266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne BitSet bitset = new BitSet(); 85366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 85466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.GroupCipherMask.WEP40, bitset, 85566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.GroupCipher.WEP40); 85666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 85766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.GroupCipherMask.WEP104, bitset, 85866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.GroupCipher.WEP104); 85966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 86066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.GroupCipherMask.TKIP, bitset, 86166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.GroupCipher.TKIP); 86266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 86366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.GroupCipherMask.CCMP, bitset, 86466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.GroupCipher.CCMP); 86566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 86666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.GroupCipherMask.GTK_NOT_USED, bitset, 86766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.GroupCipher.GTK_NOT_USED); 86866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne if (mask != 0) { 86966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 87066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "invalid group cipher mask from supplicant: " + mask); 87166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 87266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return bitset; 87366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 87466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 87566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static BitSet supplicantToWifiConfigurationPairwiseCipherMask(int mask) { 87666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne BitSet bitset = new BitSet(); 87766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 87866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.PairwiseCipherMask.NONE, bitset, 87966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.PairwiseCipher.NONE); 88066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 88166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.PairwiseCipherMask.TKIP, bitset, 88266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.PairwiseCipher.TKIP); 88366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask = supplicantMaskValueToWifiConfigurationBitSet( 88466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne mask, ISupplicantStaNetwork.PairwiseCipherMask.CCMP, bitset, 88566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne WifiConfiguration.PairwiseCipher.CCMP); 88666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne if (mask != 0) { 88766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne throw new IllegalArgumentException( 88866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne "invalid pairwise cipher mask from supplicant: " + mask); 88966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 89066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return bitset; 89166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 89266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 89366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantEapMethod(int value) { 89466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (value) { 89566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.PEAP: 89666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.PEAP; 89766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.TLS: 89866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.TLS; 89966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.TTLS: 90066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.TTLS; 90166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.PWD: 90266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.PWD; 90366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.SIM: 90466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.SIM; 90566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.AKA: 90666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.AKA; 90766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.AKA_PRIME: 90866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.AKA_PRIME; 90966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Eap.UNAUTH_TLS: 91066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapMethod.WFA_UNAUTH_TLS; 91166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne // WifiEnterpriseConfig.Eap.NONE: 91266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 91366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne Log.e(TAG, "invalid eap method value from WifiConfiguration: " + value); 91466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return -1; 91566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 91666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 91766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 91866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private static int wifiConfigurationToSupplicantEapPhase2Method(int value) { 91966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne switch (value) { 92066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Phase2.NONE: 92166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapPhase2Method.NONE; 92266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Phase2.PAP: 92366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapPhase2Method.PAP; 92466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Phase2.MSCHAP: 92566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapPhase2Method.MSPAP; 92666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Phase2.MSCHAPV2: 92766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapPhase2Method.MSPAPV2; 92866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne case WifiEnterpriseConfig.Phase2.GTC: 92966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return ISupplicantStaNetwork.EapPhase2Method.GTC; 930cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius case WifiEnterpriseConfig.Phase2.SIM: 931cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius return ISupplicantStaNetwork.EapPhase2Method.SIM; 932cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius case WifiEnterpriseConfig.Phase2.AKA: 933cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius return ISupplicantStaNetwork.EapPhase2Method.AKA; 934cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius case WifiEnterpriseConfig.Phase2.AKA_PRIME: 935cb9565f0cb8fa92346549bcacdfbf91cdf8e6bd3Roshan Pius return ISupplicantStaNetwork.EapPhase2Method.AKA_PRIME; 93666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne default: 93766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne Log.e(TAG, "invalid eap phase2 method value from WifiConfiguration: " + value); 93866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return -1; 93966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 94066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne }; 94166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne 94296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantNetwork.hal for documentation */ 943727ba04029935d4faee3c7fce8a5a0ba6ed0a4eaRoshan Pius private boolean getId() { 94496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 94596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getId"; 94696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 94796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 94896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 94996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getId((SupplicantStatus status, int idValue) -> { 95096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 95196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 95266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne this.mNetworkId = idValue; 95396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 954b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 95596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 95696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 95796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 95896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 95996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 96096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 96196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 96296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 96396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 96496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 96596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 96696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean registerCallback(ISupplicantStaNetworkCallback callback) { 96796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 96896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "registerCallback"; 96996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 97096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 97196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.registerCallback(callback); 97296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 97396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 97496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 97596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 97696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 97796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 97896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 97996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 98096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 98196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setSsid(java.util.ArrayList<Byte> ssid) { 98296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 98396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setSsid"; 98496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 98596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 98696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setSsid(ssid); 98796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 98896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 98996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 99096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 99196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 99296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 99396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 9947c0ec884188660f72977c8a80366049705c48ffaRoshan Pius 9957c0ec884188660f72977c8a80366049705c48ffaRoshan Pius /** 9967c0ec884188660f72977c8a80366049705c48ffaRoshan Pius * Set the BSSID for this network. 9977c0ec884188660f72977c8a80366049705c48ffaRoshan Pius * 9987c0ec884188660f72977c8a80366049705c48ffaRoshan Pius * @param bssidStr MAC address in "XX:XX:XX:XX:XX:XX" form or "any" to reset the mac address. 9997c0ec884188660f72977c8a80366049705c48ffaRoshan Pius * @return true if it succeeds, false otherwise. 10007c0ec884188660f72977c8a80366049705c48ffaRoshan Pius */ 10017c0ec884188660f72977c8a80366049705c48ffaRoshan Pius public boolean setBssid(String bssidStr) { 1002c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 1003c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius try { 1004c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return setBssid(NativeUtil.macAddressToByteArray(bssidStr)); 1005c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } catch (IllegalArgumentException e) { 1006c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Illegal argument " + bssidStr, e); 1007c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 1008c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 100945a984619e338090981499e4823e0177649e3c28Roshan Pius } 10107c0ec884188660f72977c8a80366049705c48ffaRoshan Pius } 10117c0ec884188660f72977c8a80366049705c48ffaRoshan Pius 101296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 101396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setBssid(byte[/* 6 */] bssid) { 101496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 101596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setBssid"; 101696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 101796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 101896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setBssid(bssid); 101996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 102096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 102196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 102296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 102396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 102496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 102596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 102696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 102796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setScanSsid(boolean enable) { 102896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 102996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setScanSsid"; 103096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 103196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 103296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setScanSsid(enable); 103396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 103496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 103596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 103696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 103796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 103896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 103996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 104096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 104196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setKeyMgmt(int keyMgmtMask) { 104296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 104396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setKeyMgmt"; 104496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 104596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 104696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setKeyMgmt(keyMgmtMask); 104796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 104896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 104996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 105096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 105196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 105296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 105396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 105496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 105596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setProto(int protoMask) { 105696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 105796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setProto"; 105896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 105996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 106096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setProto(protoMask); 106196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 106296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 106396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 106496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 106596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 106696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 106796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 106896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 106996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setAuthAlg(int authAlgMask) { 107096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 107196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setAuthAlg"; 107296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 107396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 107496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setAuthAlg(authAlgMask); 107596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 107696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 107796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 107896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 107996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 108096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 108196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 108296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 108396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setGroupCipher(int groupCipherMask) { 108496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 108596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setGroupCipher"; 108696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 108796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 108896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setGroupCipher(groupCipherMask); 108996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 109096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 109196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 109296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 109396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 109496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 109596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 109696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 109796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setPairwiseCipher(int pairwiseCipherMask) { 109896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 109996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setPairwiseCipher"; 110096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 110196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 110296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = 110396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.setPairwiseCipher(pairwiseCipherMask); 110496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 110596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 110696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 110796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 110896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 110996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 111096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 111196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 111296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setPskPassphrase(String psk) { 111396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 111496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setPskPassphrase"; 111596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 111696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 111796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setPskPassphrase(psk); 111896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 111996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 112096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 112196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 112296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 112396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 112496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 112596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 1126f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius private boolean setPsk(byte[] psk) { 1127f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius synchronized (mLock) { 1128f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius final String methodStr = "setPsk"; 1129f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 1130f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius try { 1131f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius SupplicantStatus status = mISupplicantStaNetwork.setPsk(psk); 1132f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius return checkStatusAndLogFailure(status, methodStr); 1133f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } catch (RemoteException e) { 1134f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius handleRemoteException(e, methodStr); 1135f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius return false; 1136f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1137f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1138f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1139f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius /** See ISupplicantStaNetwork.hal for documentation */ 114096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setWepKey(int keyIdx, java.util.ArrayList<Byte> wepKey) { 114196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 114296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setWepKey"; 114396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 114496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 114596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setWepKey(keyIdx, wepKey); 114696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 114796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 114896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 114996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 115096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 115196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 115296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 115396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 115496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setWepTxKeyIdx(int keyIdx) { 115596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 115696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setWepTxKeyIdx"; 115796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 115896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 115996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setWepTxKeyIdx(keyIdx); 116096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 116196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 116296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 116396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 116496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 116596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 116696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 116796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 116896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setRequirePmf(boolean enable) { 116996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 117096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setRequirePmf"; 117196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 117296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 117396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setRequirePmf(enable); 117496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 117596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 117696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 117796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 117896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 117996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 118096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 118196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 118266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private boolean setUpdateIdentifier(int identifier) { 118366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne synchronized (mLock) { 118466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne final String methodStr = "setUpdateIdentifier"; 118566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 118666e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne try { 118766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setUpdateIdentifier(identifier); 118866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return checkStatusAndLogFailure(status, methodStr); 118966e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } catch (RemoteException e) { 119066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne handleRemoteException(e, methodStr); 119166e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne return false; 119266e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 119366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 119466e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne } 119566e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 119696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapMethod(int method) { 119796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 119896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapMethod"; 119996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 120096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 120196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapMethod(method); 120296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 120396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 120496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 120596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 120696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 120796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 120896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 120996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 121096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapPhase2Method(int method) { 121196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 121296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapPhase2Method"; 121396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 121496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 121596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapPhase2Method(method); 121696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 121796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 121896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 121996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 122096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 122196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 122296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 122396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 122496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapIdentity(java.util.ArrayList<Byte> identity) { 122596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 122696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapIdentity"; 122796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 122896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 122996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapIdentity(identity); 123096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 123196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 123296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 123396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 123496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 123596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 123696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 123796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 123896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapAnonymousIdentity(java.util.ArrayList<Byte> identity) { 123996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 124096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapAnonymousIdentity"; 124196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 124296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 124396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapAnonymousIdentity(identity); 124496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 124596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 124696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 124796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 124896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 124996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 125096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 125196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 125296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapPassword(java.util.ArrayList<Byte> password) { 125396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 125496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapPassword"; 125596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 125696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 125796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapPassword(password); 125896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 125996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 126096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 126196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 126296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 126396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 126496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 126596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 126696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapCACert(String path) { 126796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 126896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapCACert"; 126996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 127096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 127196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapCACert(path); 127296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 127396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 127496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 127596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 127696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 127796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 127896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 127996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 128096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapCAPath(String path) { 128196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 128296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapCAPath"; 128396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 128496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 128596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapCAPath(path); 128696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 128796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 128896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 128996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 129096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 129196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 129296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 129396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 129496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapClientCert(String path) { 129596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 129696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapClientCert"; 129796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 129896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 129996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapClientCert(path); 130096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 130196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 130296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 130396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 130496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 130596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 130696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 130796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 13081f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius private boolean setEapPrivateKeyId(String id) { 130996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 13101f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius final String methodStr = "setEapPrivateKeyId"; 131196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 131296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 13131f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius SupplicantStatus status = mISupplicantStaNetwork.setEapPrivateKeyId(id); 131496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 131596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 131696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 131796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 131896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 131996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 132096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 132196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 132296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapSubjectMatch(String match) { 132396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 132496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapSubjectMatch"; 132596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 132696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 132796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapSubjectMatch(match); 132896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 132996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 133096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 133196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 133296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 133396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 133496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 133596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 133696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapAltSubjectMatch(String match) { 133796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 133896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapAltSubjectMatch"; 133996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 134096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 134196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapAltSubjectMatch(match); 134296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 134396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 134496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 134596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 134696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 134796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 134896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 134996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 135096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapEngine(boolean enable) { 135196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 135296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapEngine"; 135396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 135496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 135596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapEngine(enable); 135696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 135796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 135896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 135996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 136096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 136196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 136296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 136396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 136496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapEngineID(String id) { 136596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 136696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapEngineID"; 136796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 136896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 136996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapEngineID(id); 137096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 137196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 137296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 137396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 137496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 137596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 137696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 137796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 137896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setEapDomainSuffixMatch(String match) { 137996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 138096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setEapDomainSuffixMatch"; 138196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 138296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 138396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setEapDomainSuffixMatch(match); 138496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 138596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 138696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 138796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 138896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 138996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 139096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 139196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 139264950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius private boolean setEapProactiveKeyCaching(boolean enable) { 139364950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius synchronized (mLock) { 139464950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius final String methodStr = "setEapProactiveKeyCaching"; 139564950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 139664950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius try { 139764950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius SupplicantStatus status = mISupplicantStaNetwork.setProactiveKeyCaching(enable); 139864950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius return checkStatusAndLogFailure(status, methodStr); 139964950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius } catch (RemoteException e) { 140064950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius handleRemoteException(e, methodStr); 140164950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius return false; 140264950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius } 140364950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius } 140464950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius } 140564950d46f5469e5e6ce32ccc81a1f751c40f4202Roshan Pius /** See ISupplicantStaNetwork.hal for documentation */ 140696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean setIdStr(String idString) { 140796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 140896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "setIdStr"; 140996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 141096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 141196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.setIdStr(idString); 141296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 141396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 141496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 141596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 141696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 141796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 141896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 141996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 142096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getSsid() { 142196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 142296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getSsid"; 142396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 142496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 142596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 142696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getSsid((SupplicantStatus status, 142796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne java.util.ArrayList<Byte> ssidValue) -> { 142896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 142996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 143066e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne this.mSsid = ssidValue; 143196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1432b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 143396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 143496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 143596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 143696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 143796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 143896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 143996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 144096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 144196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 144296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 144396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getBssid() { 144496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 144596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getBssid"; 144696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 144796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 144896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 144996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getBssid((SupplicantStatus status, 145096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne byte[/* 6 */] bssidValue) -> { 145196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 145296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 145366e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne this.mBssid = bssidValue; 145496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1455b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 145696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 145796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 145896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 145996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 146096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 146196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 146296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 146396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 146496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 146596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 146696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getScanSsid() { 146796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 146896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getScanSsid"; 146996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 147096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 147196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 147296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getScanSsid((SupplicantStatus status, 147396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne boolean enabledValue) -> { 147496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 147596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 147696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mScanSsid = enabledValue; 147796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1478b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 147996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 148096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 148196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 148296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 148396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 148496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 148596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 148696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 148796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 148896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 148996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getKeyMgmt() { 149096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 149196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getKeyMgmt"; 149296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 149396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 149496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 149596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getKeyMgmt((SupplicantStatus status, 149696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int keyMgmtMaskValue) -> { 149796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 149896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 149996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mKeyMgmtMask = keyMgmtMaskValue; 150096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1501b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 150296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 150396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 150496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 150596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 150696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 150796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 150896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 150996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 151096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 151196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 151296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getProto() { 151396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 151496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getProto"; 151596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 151696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 151796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 151896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getProto((SupplicantStatus status, int protoMaskValue) -> { 151996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 152096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 152196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mProtoMask = protoMaskValue; 152296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1523b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 152496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 152596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 152696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 152796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 152896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 152996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 153096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 153196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 153296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 153396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 153496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getAuthAlg() { 153596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 153696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getAuthAlg"; 153796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 153896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 153996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 154096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getAuthAlg((SupplicantStatus status, 154196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int authAlgMaskValue) -> { 154296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 154396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 154496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mAuthAlgMask = authAlgMaskValue; 154596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1546b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 154796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 154896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 154996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 155096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 155196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 155296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 155396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 155496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 155596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 155696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 155796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getGroupCipher() { 155896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 155996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getGroupCipher"; 156096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 156196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 156296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 156396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getGroupCipher((SupplicantStatus status, 156496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int groupCipherMaskValue) -> { 156596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 156696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 156796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mGroupCipherMask = groupCipherMaskValue; 156896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1569b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 157096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 157196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 157296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 157396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 157496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 157596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 157696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 157796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 157896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 157996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 158096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getPairwiseCipher() { 158196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 158296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getPairwiseCipher"; 158396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 158496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 158596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 158696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getPairwiseCipher((SupplicantStatus status, 158796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int pairwiseCipherMaskValue) -> { 158896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 158996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 159096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mPairwiseCipherMask = pairwiseCipherMaskValue; 159196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1592b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 159396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 159496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 159596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 159696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 159796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 159896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 159996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 160096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 160196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 160296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 160396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getPskPassphrase() { 160496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 160596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getPskPassphrase"; 160696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 160796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 160896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 160996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getPskPassphrase((SupplicantStatus status, 161096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne String pskValue) -> { 161196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 161296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 161396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mPskPassphrase = pskValue; 161496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1615b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 161696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 161796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 161896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 161996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 1620f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius handleRemoteException(e, methodStr); 1621f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius return false; 1622f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1623f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1624f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1625f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius /** See ISupplicantStaNetwork.hal for documentation */ 1626f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius private boolean getPsk() { 1627f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius synchronized (mLock) { 1628f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius final String methodStr = "getPsk"; 1629f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 1630f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius try { 1631f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius MutableBoolean statusOk = new MutableBoolean(false); 1632f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius mISupplicantStaNetwork.getPsk((SupplicantStatus status, byte[] pskValue) -> { 1633f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 1634f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius if (statusOk.value) { 1635f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius this.mPsk = pskValue; 1636f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } else { 1637f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius checkStatusAndLogFailure(status, methodStr); 1638f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } 1639f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius }); 1640f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius return statusOk.value; 1641f50550926a7bddc24adf822876f35812d7d8c7beRoshan Pius } catch (RemoteException e) { 164296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 164396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 164496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 164596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 164696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 164796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 164866e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne private boolean getWepKey(int keyIdx) { 164996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 165096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "keyIdx"; 165196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 165296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 165396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 165496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getWepKey(keyIdx, (SupplicantStatus status, 165596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne java.util.ArrayList<Byte> wepKeyValue) -> { 165696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 165796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 165896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mWepKey = wepKeyValue; 165996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 166096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne Log.e(TAG, methodStr + ", failed: " + status.debugMessage); 166196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 166296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 166396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 166496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 166596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 166696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 166796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 166896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 166996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 167096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 167196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getWepTxKeyIdx() { 167296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 167396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getWepTxKeyIdx"; 167496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 167596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 167696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 167796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getWepTxKeyIdx((SupplicantStatus status, 167896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int keyIdxValue) -> { 167996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 168096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 168196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mWepTxKeyIdx = keyIdxValue; 168296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1683b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 168496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 168596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 168696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 168796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 168896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 168996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 169096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 169196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 169296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 169396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 169496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getRequirePmf() { 169596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 169696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getRequirePmf"; 169796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 169896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 169996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 170096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getRequirePmf((SupplicantStatus status, 170196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne boolean enabledValue) -> { 170296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 170396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 170496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mRequirePmf = enabledValue; 170596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1706b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 170796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 170896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 170996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 171096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 171196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 171296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 171396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 171496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 171596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 171696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 171796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapMethod() { 171896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 171996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapMethod"; 172096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 172196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 172296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 172396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapMethod((SupplicantStatus status, 172496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int methodValue) -> { 172596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 172696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 172796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapMethod = methodValue; 172896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1729b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 173096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 173196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 173296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 173396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 173496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 173596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 173696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 173796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 173896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 173996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 174096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapPhase2Method() { 174196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 174296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapPhase2Method"; 174396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 174496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 174596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 174696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapPhase2Method((SupplicantStatus status, 174796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne int methodValue) -> { 174896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 174996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 175096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapPhase2Method = methodValue; 175196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1752b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 175396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 175496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 175596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 175696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 175796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 175896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 175996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 176096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 176196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 176296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 176396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapIdentity() { 176496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 176596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapIdentity"; 176696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 176796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 176896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 176996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapIdentity((SupplicantStatus status, 177096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne ArrayList<Byte> identityValue) -> { 177196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 177296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 177396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapIdentity = identityValue; 177496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1775b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 177696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 177796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 177896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 177996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 178096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 178196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 178296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 178396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 178496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 178596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 178696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapAnonymousIdentity() { 178796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 178896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapAnonymousIdentity"; 178996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 179096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 179196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 179296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapAnonymousIdentity((SupplicantStatus status, 179396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne ArrayList<Byte> identityValue) -> { 179496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 179596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 179696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapAnonymousIdentity = identityValue; 179796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1798b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 179996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 180096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 180196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 180296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 180396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 180496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 180596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 180696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 180796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 1808a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang 1809a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang /** 1810a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang * A wrapping method for getEapAnonymousIdentity(). 1811a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang * This get anonymous identity from supplicant and returns it as a string. 1812a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang * 1813a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang * @return anonymous identity string if succeeds, null otherwise. 1814a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang */ 1815a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang public String fetchEapAnonymousIdentity() { 1816c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 1817c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!getEapAnonymousIdentity()) { 1818c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return null; 1819c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 1820c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return NativeUtil.stringFromByteArrayList(mEapAnonymousIdentity); 1821a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang } 1822a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang } 1823a1da73ea4926ce8a5689594ff3685b0fe033d99fNingyuan Wang 182496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 182596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapPassword() { 182696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 182796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapPassword"; 182896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 182996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 183096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 183196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapPassword((SupplicantStatus status, 183296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne ArrayList<Byte> passwordValue) -> { 183396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 183496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 183596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapPassword = passwordValue; 183696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1837b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 183896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 183996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 184096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 184196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 184296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 184396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 184496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 184596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 184696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 184796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 184896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapCACert() { 184996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 185096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapCACert"; 185196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 185296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 185396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 185496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapCACert((SupplicantStatus status, String pathValue) -> { 185596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 185696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 185796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapCACert = pathValue; 185896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1859b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 186096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 186196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 186296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 186396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 186496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 186596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 186696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 186796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 186896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 186996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 187096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapCAPath() { 187196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 187296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapCAPath"; 187396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 187496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 187596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 187696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapCAPath((SupplicantStatus status, String pathValue) -> { 187796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 187896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 187996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapCAPath = pathValue; 188096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1881b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 188296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 188396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 188496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 188596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 188696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 188796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 188896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 188996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 189096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 189196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 189296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapClientCert() { 189396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 189496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapClientCert"; 189596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 189696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 189796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 189896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapClientCert((SupplicantStatus status, 189996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne String pathValue) -> { 190096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 190196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 190296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapClientCert = pathValue; 190396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1904b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 190596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 190696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 190796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 190896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 190996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 191096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 191196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 191296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 191396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 191496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 19151f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius private boolean getEapPrivateKeyId() { 191696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 19171f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius final String methodStr = "getEapPrivateKeyId"; 191896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 191996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 192096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 19211f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius mISupplicantStaNetwork.getEapPrivateKeyId((SupplicantStatus status, 19221f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius String idValue) -> { 192396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 192496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 19251f5dee32716a2709ca2e1e491cbc2f09ca35a2faRoshan Pius this.mEapPrivateKeyId = idValue; 192696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1927b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 192896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 192996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 193096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 193196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 193296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 193396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 193496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 193596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 193696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 193796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 193896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapSubjectMatch() { 193996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 194096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapSubjectMatch"; 194196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 194296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 194396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 194496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapSubjectMatch((SupplicantStatus status, 194596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne String matchValue) -> { 194696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 194796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 194896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapSubjectMatch = matchValue; 194996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1950b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 195196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 195296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 195396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 195496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 195596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 195696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 195796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 195896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 195996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 196096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 196196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapAltSubjectMatch() { 196296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 196396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapAltSubjectMatch"; 196496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 196596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 196696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 196796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapAltSubjectMatch((SupplicantStatus status, 196896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne String matchValue) -> { 196996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 197096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 197196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapAltSubjectMatch = matchValue; 197296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1973b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 197496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 197596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 197696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 197796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 197896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 197996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 198096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 198196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 198296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 198396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 198496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapEngine() { 198596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 198696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapEngine"; 198796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 198896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 198996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 199096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapEngine((SupplicantStatus status, 199196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne boolean enabledValue) -> { 199296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 199396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 199496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapEngine = enabledValue; 199596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 1996b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 199796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 199896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 199996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 200096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 200196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 200296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 200396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 200496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 200596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 200696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 200796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapEngineID() { 200896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 200996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapEngineID"; 201096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 201196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 201296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 201396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapEngineID((SupplicantStatus status, String idValue) -> { 201496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 201596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 201696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapEngineID = idValue; 201796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 2018b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 201996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 202096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 202196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 202296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 202396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 202496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 202596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 202696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 202796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 202896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 202996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getEapDomainSuffixMatch() { 203096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 203196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getEapDomainSuffixMatch"; 203296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 203396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 203496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 203596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getEapDomainSuffixMatch((SupplicantStatus status, 203696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne String matchValue) -> { 203796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 203896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 203996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mEapDomainSuffixMatch = matchValue; 204096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 2041b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 204296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 204396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 204496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 204596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 204696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 204796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 204896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 204996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 205096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 205196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 205296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean getIdStr() { 205396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 205496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "getIdStr"; 205596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 205696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 205796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne MutableBoolean statusOk = new MutableBoolean(false); 205896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.getIdStr((SupplicantStatus status, String idString) -> { 205996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne statusOk.value = status.code == SupplicantStatusCode.SUCCESS; 206096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (statusOk.value) { 206196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne this.mIdStr = idString; 206296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } else { 2063b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius checkStatusAndLogFailure(status, methodStr); 206496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 206596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne }); 206696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return statusOk.value; 206796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 206896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 206996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 207096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 207196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 207296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 207396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 207496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean enable(boolean noConnect) { 207596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 207696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "enable"; 207796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 207896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 207996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.enable(noConnect); 208096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 208196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 208296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 208396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 208496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 208596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 208696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 208796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 208896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean disable() { 208996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 209096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "disable"; 209196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 209296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 209396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.disable(); 209496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 209596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 209696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 209796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 209896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 209996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 210096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 2101d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius 2102d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius /** 2103d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius * Trigger a connection to this network. 2104d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius * 2105d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius * @return true if it succeeds, false otherwise. 2106d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius */ 210766e9f4ab597136cbf4accadb8e009fc68ff071a7Glen Kuhne public boolean select() { 210896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 210996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "select"; 211096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 211196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 211296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.select(); 211396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 211496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 211596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 211696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 211796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 211896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 211996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 2120d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius 2121445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 2122445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Send GSM auth response. 2123445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * 2124445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @param paramsStr Response params as a string. 2125445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @return true if succeeds, false otherwise. 2126445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 2127445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius public boolean sendNetworkEapSimGsmAuthResponse(String paramsStr) { 2128c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2129c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius try { 2130c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Matcher match = GSM_AUTH_RESPONSE_PARAMS_PATTERN.matcher(paramsStr); 2131c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius ArrayList<ISupplicantStaNetwork.NetworkResponseEapSimGsmAuthParams> params = 2132c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius new ArrayList<>(); 2133c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius while (match.find()) { 2134c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (match.groupCount() != 2) { 2135c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Malformed gsm auth response params: " + paramsStr); 2136c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2137c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2138c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius ISupplicantStaNetwork.NetworkResponseEapSimGsmAuthParams param = 2139c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius new ISupplicantStaNetwork.NetworkResponseEapSimGsmAuthParams(); 2140c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] kc = NativeUtil.hexStringToByteArray(match.group(1)); 2141c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (kc == null || kc.length != param.kc.length) { 2142c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Invalid kc value: " + match.group(1)); 2143c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2144c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2145c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] sres = NativeUtil.hexStringToByteArray(match.group(2)); 2146c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (sres == null || sres.length != param.sres.length) { 2147c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Invalid sres value: " + match.group(2)); 2148c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2149c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2150c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius System.arraycopy(kc, 0, param.kc, 0, param.kc.length); 2151c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius System.arraycopy(sres, 0, param.sres, 0, param.sres.length); 2152c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius params.add(param); 215345a984619e338090981499e4823e0177649e3c28Roshan Pius } 2154c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius // The number of kc/sres pairs can either be 2 or 3 depending on the request. 2155c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (params.size() > 3 || params.size() < 2) { 2156c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Malformed gsm auth response params: " + paramsStr); 215745a984619e338090981499e4823e0177649e3c28Roshan Pius return false; 215845a984619e338090981499e4823e0177649e3c28Roshan Pius } 2159c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return sendNetworkEapSimGsmAuthResponse(params); 2160c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } catch (IllegalArgumentException e) { 2161c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Illegal argument " + paramsStr, e); 2162445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius return false; 2163445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 2164445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 2165445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 2166d95fa596d07855b70ff18a50a48e773155a919f5Roshan Pius 216796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 216896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean sendNetworkEapSimGsmAuthResponse( 216996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne ArrayList<ISupplicantStaNetwork.NetworkResponseEapSimGsmAuthParams> params) { 217096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 217196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "sendNetworkEapSimGsmAuthResponse"; 217296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 217396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 217496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = 217596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.sendNetworkEapSimGsmAuthResponse(params); 217696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 217796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 217896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 217996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 218096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 218196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 218296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 218396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 2184445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius public boolean sendNetworkEapSimGsmAuthFailure() { 218596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 218696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "sendNetworkEapSimGsmAuthFailure"; 218796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 218896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 218996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.sendNetworkEapSimGsmAuthFailure(); 219096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 219196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 219296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 219396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 219496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 219596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 219696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 2197445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 2198445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Send UMTS auth response. 2199445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * 2200445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @param paramsStr Response params as a string. 2201445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @return true if succeeds, false otherwise. 2202445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 2203445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius public boolean sendNetworkEapSimUmtsAuthResponse(String paramsStr) { 2204c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2205c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius try { 2206c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Matcher match = UMTS_AUTH_RESPONSE_PARAMS_PATTERN.matcher(paramsStr); 2207c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!match.find() || match.groupCount() != 3) { 2208c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Malformed umts auth response params: " + paramsStr); 2209c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2210c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2211c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius ISupplicantStaNetwork.NetworkResponseEapSimUmtsAuthParams params = 2212c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius new ISupplicantStaNetwork.NetworkResponseEapSimUmtsAuthParams(); 2213c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] ik = NativeUtil.hexStringToByteArray(match.group(1)); 2214c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (ik == null || ik.length != params.ik.length) { 2215c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Invalid ik value: " + match.group(1)); 2216c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2217c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2218c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] ck = NativeUtil.hexStringToByteArray(match.group(2)); 2219c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (ck == null || ck.length != params.ck.length) { 2220c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Invalid ck value: " + match.group(2)); 2221c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2222c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2223c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] res = NativeUtil.hexStringToByteArray(match.group(3)); 2224c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (res == null || res.length == 0) { 2225c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Invalid res value: " + match.group(3)); 2226c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2227c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2228c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius System.arraycopy(ik, 0, params.ik, 0, params.ik.length); 2229c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius System.arraycopy(ck, 0, params.ck, 0, params.ck.length); 2230c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius for (byte b : res) { 2231c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius params.res.add(b); 2232c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2233c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return sendNetworkEapSimUmtsAuthResponse(params); 2234c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } catch (IllegalArgumentException e) { 2235c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Illegal argument " + paramsStr, e); 223645a984619e338090981499e4823e0177649e3c28Roshan Pius return false; 223745a984619e338090981499e4823e0177649e3c28Roshan Pius } 2238445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 2239445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 224045a984619e338090981499e4823e0177649e3c28Roshan Pius 224196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 224296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean sendNetworkEapSimUmtsAuthResponse( 224396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne ISupplicantStaNetwork.NetworkResponseEapSimUmtsAuthParams params) { 224496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 224596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "sendNetworkEapSimUmtsAuthResponse"; 224696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 224796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 224896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = 224996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.sendNetworkEapSimUmtsAuthResponse(params); 225096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 225196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 225296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 225396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 225496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 225596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 225696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 2257445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 2258445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Send UMTS auts response. 2259445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * 2260445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @param paramsStr Response params as a string. 2261445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @return true if succeeds, false otherwise. 2262445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 2263445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius public boolean sendNetworkEapSimUmtsAutsResponse(String paramsStr) { 2264c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2265c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius try { 2266c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Matcher match = UMTS_AUTS_RESPONSE_PARAMS_PATTERN.matcher(paramsStr); 2267c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!match.find() || match.groupCount() != 1) { 2268c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Malformed umts auts response params: " + paramsStr); 2269c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2270c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2271c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius byte[] auts = NativeUtil.hexStringToByteArray(match.group(1)); 2272c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (auts == null || auts.length != 14) { 2273c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Invalid auts value: " + match.group(1)); 2274c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2275c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2276c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return sendNetworkEapSimUmtsAutsResponse(auts); 2277c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } catch (IllegalArgumentException e) { 2278c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Illegal argument " + paramsStr, e); 227945a984619e338090981499e4823e0177649e3c28Roshan Pius return false; 228045a984619e338090981499e4823e0177649e3c28Roshan Pius } 2281445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 2282445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 228396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 228496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean sendNetworkEapSimUmtsAutsResponse(byte[/* 14 */] auts) { 228596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 228696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "sendNetworkEapSimUmtsAutsResponse"; 228796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 228896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 228996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = 229096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.sendNetworkEapSimUmtsAutsResponse(auts); 229196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 229296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 229396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 229496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 229596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 229696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 229796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 229896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 2299445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius public boolean sendNetworkEapSimUmtsAuthFailure() { 230096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 230196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "sendNetworkEapSimUmtsAuthFailure"; 230296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 230396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 230496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = mISupplicantStaNetwork.sendNetworkEapSimUmtsAuthFailure(); 230596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 230696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 230796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 230896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 230996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 231096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 231196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 2312445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius /** 2313445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * Send eap identity response. 2314445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * 2315445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @param identityStr Identity as a string. 2316445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius * @return true if succeeds, false otherwise. 2317445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius */ 2318445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius public boolean sendNetworkEapIdentityResponse(String identityStr) { 2319c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2320c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius try { 2321c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius ArrayList<Byte> identity = NativeUtil.stringToByteArrayList(identityStr); 2322c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return sendNetworkEapIdentityResponse(identity); 2323c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } catch (IllegalArgumentException e) { 2324c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Illegal argument " + identityStr, e); 2325c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2326c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 232745a984619e338090981499e4823e0177649e3c28Roshan Pius } 2328445b5f46264af0a2e9c043c9badb2b4f38044f11Roshan Pius } 232996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** See ISupplicantStaNetwork.hal for documentation */ 233096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean sendNetworkEapIdentityResponse(ArrayList<Byte> identity) { 233196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne synchronized (mLock) { 233296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne final String methodStr = "sendNetworkEapIdentityResponse"; 233396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return false; 233496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne try { 233596013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne SupplicantStatus status = 233696013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne mISupplicantStaNetwork.sendNetworkEapIdentityResponse(identity); 233796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return checkStatusAndLogFailure(status, methodStr); 233896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } catch (RemoteException e) { 233996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne handleRemoteException(e, methodStr); 234096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne return false; 234196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 234296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 234396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 234496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 23450a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius /** 23460a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius * Retrieve the NFC token for this network. 23470a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius * 23480a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius * @return Hex string corresponding to the NFC token or null for failure. 23490a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius */ 23500a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius public String getWpsNfcConfigurationToken() { 2351c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2352c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius ArrayList<Byte> token = getWpsNfcConfigurationTokenInternal(); 2353c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (token == null) { 2354c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return null; 2355c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2356c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return NativeUtil.hexStringFromByteArray(NativeUtil.byteArrayFromArrayList(token)); 23570a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius } 23580a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius } 23590a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius 23607651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius /** See ISupplicantStaNetwork.hal for documentation */ 23610a3dcd72290481cb1fcbaaec268cccf343e4ff48Roshan Pius private ArrayList<Byte> getWpsNfcConfigurationTokenInternal() { 23627651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius synchronized (mLock) { 23637651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius final String methodStr = "getWpsNfcConfigurationToken"; 23647651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius if (!checkISupplicantStaNetworkAndLogFailure(methodStr)) return null; 23657651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius final Mutable<ArrayList<Byte>> gotToken = new Mutable<>(); 23667651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius try { 23677651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius mISupplicantStaNetwork.getWpsNfcConfigurationToken( 23687651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius (SupplicantStatus status, ArrayList<Byte> token) -> { 23697651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius if (checkStatusAndLogFailure(status, methodStr)) { 23707651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius gotToken.value = token; 23717651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 23727651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius }); 23737651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } catch (RemoteException e) { 23747651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius handleRemoteException(e, methodStr); 23757651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 23767651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius return gotToken.value; 23777651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 23787651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 23797651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius 238096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** 238196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Returns true if provided status code is SUCCESS, logs debug message and returns false 238296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * otherwise 238396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne */ 238496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean checkStatusAndLogFailure(SupplicantStatus status, final String methodStr) { 2385c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2386c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (status.code != SupplicantStatusCode.SUCCESS) { 2387c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "ISupplicantStaNetwork." + methodStr + " failed: " 2388c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius + SupplicantStaIfaceHal.supplicantStatusCodeToString(status.code) + ", " 2389c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius + status.debugMessage); 2390c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2391c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } else { 2392c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (mVerboseLoggingEnabled) { 2393c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.d(TAG, "ISupplicantStaNetwork." + methodStr + " succeeded"); 2394c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2395c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return true; 2396511c6a204fefd7d295cb3728e6d4665106a29ae7Roshan Pius } 239796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 239896013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 239996013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 240096013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne /** 2401b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius * Helper function to log callbacks. 2402b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius */ 2403b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius private void logCallback(final String methodStr) { 2404c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2405c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (mVerboseLoggingEnabled) { 2406c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.d(TAG, "ISupplicantStaNetworkCallback." + methodStr + " received"); 2407c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2408b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius } 2409b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius } 2410b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius 2411b70d1e046a5eb7e87c6b96beec30bcb985ee9c3cRoshan Pius /** 241296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne * Returns false if ISupplicantStaNetwork is null, and logs failure of methodStr 241396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne */ 241496013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne private boolean checkISupplicantStaNetworkAndLogFailure(final String methodStr) { 2415c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2416c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (mISupplicantStaNetwork == null) { 2417c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "Can't call " + methodStr + ", ISupplicantStaNetwork is null"); 2418c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return false; 2419c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2420c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return true; 242196013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 242296013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne } 242396013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne 2424b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius private void handleRemoteException(RemoteException e, String methodStr) { 2425c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2426c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius mISupplicantStaNetwork = null; 2427c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius Log.e(TAG, "ISupplicantStaNetwork." + methodStr + " failed with exception", e); 2428c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2429b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius } 2430b850a6ae6fe8470fd9338bbc9978caadc7ca2c4bRoshan Pius 2431c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius /** 2432c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius * Adds FT flags for networks if the device supports it. 2433c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius */ 2434c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius private BitSet addFastTransitionFlags(BitSet keyManagementFlags) { 2435c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2436c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (!mSystemSupportsFastBssTransition) { 2437c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return keyManagementFlags; 2438c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2439c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius BitSet modifiedFlags = (BitSet) keyManagementFlags.clone(); 2440c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (keyManagementFlags.get(WifiConfiguration.KeyMgmt.WPA_PSK)) { 2441c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius modifiedFlags.set(WifiConfiguration.KeyMgmt.FT_PSK); 2442c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2443c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius if (keyManagementFlags.get(WifiConfiguration.KeyMgmt.WPA_EAP)) { 2444c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius modifiedFlags.set(WifiConfiguration.KeyMgmt.FT_EAP); 2445c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2446c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return modifiedFlags; 2447c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius } 2448c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius } 2449c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius 2450c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius /** 2451c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius * Removes FT flags for networks if the device supports it. 2452c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius */ 2453c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius private BitSet removeFastTransitionFlags(BitSet keyManagementFlags) { 2454c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius synchronized (mLock) { 2455c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius BitSet modifiedFlags = (BitSet) keyManagementFlags.clone(); 2456c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius modifiedFlags.clear(WifiConfiguration.KeyMgmt.FT_PSK); 2457c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius modifiedFlags.clear(WifiConfiguration.KeyMgmt.FT_EAP); 2458c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius return modifiedFlags; 2459c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius } 2460c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius } 2461c7a4b6706fa09042bb36a64036d86d88eb6e4126Roshan Pius 2462b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius /** 2463b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius * Creates the JSON encoded network extra using the map of string key, value pairs. 2464b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius */ 2465b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius public static String createNetworkExtra(Map<String, String> values) { 2466b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius final String encoded; 2467b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius try { 2468b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius encoded = URLEncoder.encode(new JSONObject(values).toString(), "UTF-8"); 2469b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } catch (NullPointerException e) { 2470b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius Log.e(TAG, "Unable to serialize networkExtra: " + e.toString()); 2471b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return null; 2472b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } catch (UnsupportedEncodingException e) { 2473b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius Log.e(TAG, "Unable to serialize networkExtra: " + e.toString()); 2474b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return null; 2475b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2476b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return encoded; 2477b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2478b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius 2479b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius /** 2480b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius * Parse the network extra JSON encoded string to a map of string key, value pairs. 2481b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius */ 2482b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius public static Map<String, String> parseNetworkExtra(String encoded) { 2483b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius if (TextUtils.isEmpty(encoded)) { 2484b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return null; 2485b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2486b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius try { 2487b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // This method reads a JSON dictionary that was written by setNetworkExtra(). However, 2488b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // on devices that upgraded from Marshmallow, it may encounter a legacy value instead - 2489b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // an FQDN stored as a plain string. If such a value is encountered, the JSONObject 2490b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // constructor will thrown a JSONException and the method will return null. 2491b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius final JSONObject json = new JSONObject(URLDecoder.decode(encoded, "UTF-8")); 2492b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius final Map<String, String> values = new HashMap<>(); 2493b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius final Iterator<?> it = json.keys(); 2494b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius while (it.hasNext()) { 2495b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius final String key = (String) it.next(); 2496b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius final Object value = json.get(key); 2497b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius if (value instanceof String) { 2498b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius values.put(key, (String) value); 2499b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2500b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2501b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return values; 2502b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } catch (UnsupportedEncodingException e) { 2503b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius Log.e(TAG, "Unable to deserialize networkExtra: " + e.toString()); 2504b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return null; 2505b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } catch (JSONException e) { 2506b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // This is not necessarily an error. This exception will also occur if we encounter a 2507b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // legacy FQDN stored as a plain string. We want to return null in this case as no JSON 2508b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius // dictionary of extras was found. 2509b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius return null; 2510b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2511b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius } 2512b8b3fb8228a1f90106bad8c59ce006b81ef7921cRoshan Pius 25137651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius private static class Mutable<E> { 25147651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius public E value; 25157651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius 25167651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius Mutable() { 25177651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius value = null; 25187651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 25197651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius 25207651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius Mutable(E value) { 25217651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius this.value = value; 25227651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 25237651e69b6f5e2b28a4fee7284ac2522faa002c9fRoshan Pius } 2524c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius 2525c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius private class SupplicantStaNetworkHalCallback extends ISupplicantStaNetworkCallback.Stub { 2526c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius /** 2527c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius * Current configured network's framework network id. 2528c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius */ 2529c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius private final int mFramewokNetworkId; 2530c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius /** 2531c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius * Current configured network's ssid. 2532c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius */ 2533c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius private final String mSsid; 2534c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius 2535c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius SupplicantStaNetworkHalCallback(int framewokNetworkId, String ssid) { 2536c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mFramewokNetworkId = framewokNetworkId; 2537c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mSsid = ssid; 2538c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2539c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius 2540c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius @Override 2541c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius public void onNetworkEapSimGsmAuthRequest( 2542c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius ISupplicantStaNetworkCallback.NetworkRequestEapSimGsmAuthParams params) { 2543c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius synchronized (mLock) { 2544c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius logCallback("onNetworkEapSimGsmAuthRequest"); 2545c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius String[] data = new String[params.rands.size()]; 2546c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius int i = 0; 2547c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius for (byte[] rand : params.rands) { 2548c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius data[i++] = NativeUtil.hexStringFromByteArray(rand); 2549c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2550c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mWifiMonitor.broadcastNetworkGsmAuthRequestEvent( 2551c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mIfaceName, mFramewokNetworkId, mSsid, data); 2552c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2553c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2554c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius 2555c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius @Override 2556c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius public void onNetworkEapSimUmtsAuthRequest( 2557c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius ISupplicantStaNetworkCallback.NetworkRequestEapSimUmtsAuthParams params) { 2558c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius synchronized (mLock) { 2559c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius logCallback("onNetworkEapSimUmtsAuthRequest"); 2560c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius String randHex = NativeUtil.hexStringFromByteArray(params.rand); 2561dd685b34596b790c76e2cc03fc825c1249c9174fRoshan Pius String autnHex = NativeUtil.hexStringFromByteArray(params.autn); 2562dd685b34596b790c76e2cc03fc825c1249c9174fRoshan Pius String[] data = {randHex, autnHex}; 2563c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mWifiMonitor.broadcastNetworkUmtsAuthRequestEvent( 2564c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mIfaceName, mFramewokNetworkId, mSsid, data); 2565c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2566c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2567c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius 2568c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius @Override 2569c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius public void onNetworkEapIdentityRequest() { 2570c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius synchronized (mLock) { 2571c0203e2c4ffeae355c88939fb180c2e1913c108dRoshan Pius logCallback("onNetworkEapIdentityRequest"); 2572c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mWifiMonitor.broadcastNetworkIdentityRequestEvent( 2573c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius mIfaceName, mFramewokNetworkId, mSsid); 2574c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2575c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 2576c3d81dbf035c205ca1baf16b84a41b67eda9ae4aRoshan Pius } 257796013ebe01c095e2bac5ff7a490a2f9b69876e3cGlen Kuhne} 2578