diff options
author | Glen Kuhne <kuh@google.com> | 2016-03-07 11:23:41 -0800 |
---|---|---|
committer | Glen Kuhne <kuh@google.com> | 2016-03-07 11:32:05 -0800 |
commit | 2b152feb1c574f30557581770d4f8c06c770ba34 (patch) | |
tree | 50ea13c3e5b7c2280b857f9e46dcca652b2575ab /service | |
parent | f5cc6a0c7ede374b33de1cf5156bf149e2e76c13 (diff) |
Fix WifiMetrics connection auth type
Use ScanResult instead of WifiConfiguration to get the Auth type, as
WifiConfiguration's allowedAuthAlgorithms is not valid at the beginning
of a connection attempt.
Also refactored metric getting from ScanResults and NetworkDetails into
their own helper functions.
BUG=25691077
Change-Id: I528a1c76204b5197815ad3836d743513f89bc9ca
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/WifiMetrics.java | 108 |
1 files changed, 61 insertions, 47 deletions
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java index 554719161..b4a861802 100644 --- a/service/java/com/android/server/wifi/WifiMetrics.java +++ b/service/java/com/android/server/wifi/WifiMetrics.java @@ -92,20 +92,8 @@ public class WifiMetrics { if (config != null) { /*<TODO> mRouterFingerPrintProto.roamType - mRouterFingerPrintProto.routerTechnology mRouterFingerPrintProto.supportsIpv6 */ - if (config.allowedAuthAlgorithms != null - && config.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.OPEN)) { - mRouterFingerPrintProto.authentication = - WifiMetricsProto.RouterFingerPrint.AUTH_OPEN; - } else if (config.isEnterprise()) { - mRouterFingerPrintProto.authentication = - WifiMetricsProto.RouterFingerPrint.AUTH_ENTERPRISE; - } else { - mRouterFingerPrintProto.authentication = - WifiMetricsProto.RouterFingerPrint.AUTH_PERSONAL; - } mRouterFingerPrintProto.hidden = config.hiddenSSID; mRouterFingerPrintProto.channelInfo = config.apChannel; // Config may not have a valid dtimInterval set yet, in which case dtim will be zero @@ -281,11 +269,9 @@ public class WifiMetrics { mCurrentConnectionEvent.mConnectionEvent.roamType = roamType; mCurrentConnectionEvent.mRouterFingerPrint.updateFromWifiConfiguration(config); if (config != null) { - //RSSI ScanResult candidate = config.getNetworkSelectionStatus().getCandidate(); if (candidate != null) { - mCurrentConnectionEvent.mConnectionEvent.signalStrength = - candidate.level; + updateMetricsFromScanResult(candidate); } mCurrentConnectionEvent.mConfigSsid = config.SSID; mCurrentConnectionEvent.mConfigBssid = config.BSSID; @@ -317,38 +303,8 @@ public class WifiMetrics { && mCurrentConnectionEvent.mConfigSsid != null && mCurrentConnectionEvent.mConfigSsid .equals("\"" + networkDetail.getSSID() + "\"")) { - int dtimInterval = networkDetail.getDtimInterval(); - if (dtimInterval > 0) { - mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.dtim = - dtimInterval; - } - int connectionWifiMode; - switch (networkDetail.getWifiMode()) { - case InformationElementUtil.WifiMode.MODE_UNDEFINED: - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_UNKNOWN; - break; - case InformationElementUtil.WifiMode.MODE_11A: - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_A; - break; - case InformationElementUtil.WifiMode.MODE_11B: - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_B; - break; - case InformationElementUtil.WifiMode.MODE_11G: - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_G; - break; - case InformationElementUtil.WifiMode.MODE_11N: - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_N; - break; - case InformationElementUtil.WifiMode.MODE_11AC : - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_AC; - break; - default: - connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_OTHER; - break; - } - mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto - .routerTechnology = connectionWifiMode; - mCurrentConnectionEvent.mConnectionEvent.signalStrength = scanResult.level; + updateMetricsFromNetworkDetail(networkDetail); + updateMetricsFromScanResult(scanResult); } } } @@ -380,6 +336,64 @@ public class WifiMetrics { } } + /** + * Set ConnectionEvent DTIM Interval (if set), and 802.11 Connection mode, from NetworkDetail + */ + private void updateMetricsFromNetworkDetail(NetworkDetail networkDetail) { + int dtimInterval = networkDetail.getDtimInterval(); + if (dtimInterval > 0) { + mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.dtim = + dtimInterval; + } + int connectionWifiMode; + switch (networkDetail.getWifiMode()) { + case InformationElementUtil.WifiMode.MODE_UNDEFINED: + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_UNKNOWN; + break; + case InformationElementUtil.WifiMode.MODE_11A: + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_A; + break; + case InformationElementUtil.WifiMode.MODE_11B: + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_B; + break; + case InformationElementUtil.WifiMode.MODE_11G: + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_G; + break; + case InformationElementUtil.WifiMode.MODE_11N: + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_N; + break; + case InformationElementUtil.WifiMode.MODE_11AC : + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_AC; + break; + default: + connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_OTHER; + break; + } + mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto + .routerTechnology = connectionWifiMode; + } + + /** + * Set ConnectionEvent RSSI and authentication type from ScanResult + */ + private void updateMetricsFromScanResult(ScanResult scanResult) { + mCurrentConnectionEvent.mConnectionEvent.signalStrength = scanResult.level; + mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = + WifiMetricsProto.RouterFingerPrint.AUTH_OPEN; + if (scanResult.capabilities != null) { + if (scanResult.capabilities.contains("WEP")) { + mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = + WifiMetricsProto.RouterFingerPrint.AUTH_PERSONAL; + } else if (scanResult.capabilities.contains("PSK")) { + mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = + WifiMetricsProto.RouterFingerPrint.AUTH_PERSONAL; + } else if (scanResult.capabilities.contains("EAP")) { + mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = + WifiMetricsProto.RouterFingerPrint.AUTH_ENTERPRISE; + } + } + } + void setNumSavedNetworks(int num) { synchronized (mLock) { mWifiLogProto.numSavedNetworks = num; |