summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorGlen Kuhne <kuh@google.com>2016-03-07 11:23:41 -0800
committerGlen Kuhne <kuh@google.com>2016-03-07 11:32:05 -0800
commit2b152feb1c574f30557581770d4f8c06c770ba34 (patch)
tree50ea13c3e5b7c2280b857f9e46dcca652b2575ab /service
parentf5cc6a0c7ede374b33de1cf5156bf149e2e76c13 (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.java108
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;