diff options
4 files changed, 29 insertions, 6 deletions
diff --git a/service/java/com/android/server/wifi/ScanResultMatchInfo.java b/service/java/com/android/server/wifi/ScanResultMatchInfo.java index 5eb9d4d64..b3d10cc38 100644 --- a/service/java/com/android/server/wifi/ScanResultMatchInfo.java +++ b/service/java/com/android/server/wifi/ScanResultMatchInfo.java @@ -38,6 +38,10 @@ public class ScanResultMatchInfo { * Special flag for PSK-SAE in transition mode */ public boolean pskSaeInTransitionMode; + /** + * Special flag for OWE in transition mode + */ + public boolean oweInTransitionMode; /** * Fetch network type from network configuration. @@ -105,12 +109,16 @@ public class ScanResultMatchInfo { // either have a hex string or quoted ASCII string SSID. info.networkSsid = ScanResultUtil.createQuotedSSID(scanResult.SSID); info.networkType = getNetworkType(scanResult); + info.oweInTransitionMode = false; + info.pskSaeInTransitionMode = false; if (info.networkType == WifiConfiguration.SECURITY_TYPE_SAE) { // Note that scan result util will always choose the highest security protocol. info.pskSaeInTransitionMode = ScanResultUtil.isScanResultForPskSaeTransitionNetwork(scanResult); - } else { - info.pskSaeInTransitionMode = false; + } else if (info.networkType == WifiConfiguration.SECURITY_TYPE_OWE) { + // Note that scan result util will always choose OWE. + info.oweInTransitionMode = + ScanResultUtil.isScanResultForOweTransitionNetwork(scanResult); } return info; } @@ -133,6 +141,12 @@ public class ScanResultMatchInfo { || (pskSaeInTransitionMode && other.networkType == WifiConfiguration.SECURITY_TYPE_PSK)) { networkTypeEquals = true; + } else if ((networkType == WifiConfiguration.SECURITY_TYPE_OPEN + && other.oweInTransitionMode) || (oweInTransitionMode + && other.networkType == WifiConfiguration.SECURITY_TYPE_OPEN)) { + // Special case we treat Enhanced Open and Open as equals. This is done to support the + // case where a saved network is Open but we found an OWE in transition network. + networkTypeEquals = true; } else { networkTypeEquals = networkType == other.networkType; } diff --git a/service/java/com/android/server/wifi/util/InformationElementUtil.java b/service/java/com/android/server/wifi/util/InformationElementUtil.java index 994cd2d65..03a3c18f0 100644 --- a/service/java/com/android/server/wifi/util/InformationElementUtil.java +++ b/service/java/com/android/server/wifi/util/InformationElementUtil.java @@ -713,7 +713,7 @@ public class InformationElementUtil { owePairwiseCipher.add(ScanResult.CIPHER_CCMP); pairwiseCipher.add(owePairwiseCipher); ArrayList<Integer> oweKeyManagement = new ArrayList<>(); - oweKeyManagement.add(ScanResult.KEY_MGMT_OWE); + oweKeyManagement.add(ScanResult.KEY_MGMT_OWE_TRANSITION); keyManagement.add(oweKeyManagement); } } @@ -731,7 +731,6 @@ public class InformationElementUtil { } } - private String protocolToString(int protocol) { switch (protocol) { case ScanResult.PROTOCOL_NONE: @@ -763,6 +762,8 @@ public class InformationElementUtil { return "PSK-SHA256"; case ScanResult.KEY_MGMT_OWE: return "OWE"; + case ScanResult.KEY_MGMT_OWE_TRANSITION: + return "OWE_TRANSITION"; case ScanResult.KEY_MGMT_SAE: return "SAE"; case ScanResult.KEY_MGMT_FT_SAE: diff --git a/service/java/com/android/server/wifi/util/ScanResultUtil.java b/service/java/com/android/server/wifi/util/ScanResultUtil.java index a9da3e454..39e9d2c40 100644 --- a/service/java/com/android/server/wifi/util/ScanResultUtil.java +++ b/service/java/com/android/server/wifi/util/ScanResultUtil.java @@ -87,6 +87,14 @@ public class ScanResultUtil { } /** + * Helper method to check if the provided |scanResult| corresponds to OWE transition network. + * This checks if the provided capabilities string contains OWE_TRANSITION or not. + */ + public static boolean isScanResultForOweTransitionNetwork(ScanResult scanResult) { + return scanResult.capabilities.contains("OWE_TRANSITION"); + } + + /** * Helper method to check if the provided |scanResult| corresponds to SAE network. * This checks if the provided capabilities string contains SAE or not. */ @@ -96,7 +104,7 @@ public class ScanResultUtil { /** * Helper method to check if the provided |scanResult| corresponds to PSK-SAE transition - * network. This checks if the provided capabilities string contains SAE or not. + * network. This checks if the provided capabilities string contains PSK+SAE or not. */ public static boolean isScanResultForPskSaeTransitionNetwork(ScanResult scanResult) { return scanResult.capabilities.contains("PSK+SAE"); diff --git a/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java b/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java index 46830f3f5..854458316 100644 --- a/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java +++ b/tests/wifitests/src/com/android/server/wifi/util/InformationElementUtilTest.java @@ -526,7 +526,7 @@ public class InformationElementUtilTest { capabilities.from(ies, beaconCap, true); String result = capabilities.generateCapabilitiesString(); - assertEquals("[RSN-OWE-CCMP][ESS]", result); + assertEquals("[RSN-OWE_TRANSITION-CCMP][ESS]", result); } /** |