summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiMonitor.java
diff options
context:
space:
mode:
authorYuhao Zheng <yuhaozheng@google.com>2014-05-12 12:37:18 -0700
committerVinit Deshapnde <vinitd@google.com>2014-05-16 16:06:56 -0700
commit5d30d5c2e0eec4db2303da3f225f52da748e2060 (patch)
treed6c3a8f85560ee181300ec3c43253b2919602efd /service/java/com/android/server/wifi/WifiMonitor.java
parente65cebc4284fd320a155a274cb647f73cecabd11 (diff)
downloadframeworks_opt_net_wifi-5d30d5c2e0eec4db2303da3f225f52da748e2060.tar.gz
frameworks_opt_net_wifi-5d30d5c2e0eec4db2303da3f225f52da748e2060.tar.bz2
frameworks_opt_net_wifi-5d30d5c2e0eec4db2303da3f225f52da748e2060.zip
Hotspot 2.0 framework support -- more functionalities
- WifiMonitor handles more HS20 events - Passpoint stack parses ANQP results Bug: 5485670 Change-Id: I5f8e7c80f8024379fe7a6c4394f1faae2040cfba
Diffstat (limited to 'service/java/com/android/server/wifi/WifiMonitor.java')
-rw-r--r--service/java/com/android/server/wifi/WifiMonitor.java48
1 files changed, 45 insertions, 3 deletions
diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java
index c38df4e..13d1951 100644
--- a/service/java/com/android/server/wifi/WifiMonitor.java
+++ b/service/java/com/android/server/wifi/WifiMonitor.java
@@ -100,6 +100,11 @@ public class WifiMonitor {
private static final String RX_HS20_ANQP_ICON_STR = "RX-HS20-ANQP-ICON";
private static final int RX_HS20_ANQP_ICON_STR_LEN = RX_HS20_ANQP_ICON_STR.length();
+ /* Hotspot 2.0 events */
+ private static final String HS20_PREFIX_STR = "HS20-";
+ private static final String HS20_SUB_REM_STR = "HS20-SUBSCRIPTION-REMEDIATION";
+ private static final String HS20_DEAUTH_STR = "HS20-DEAUTH-IMMINENT-NOTICE";
+
/**
* Names of events from wpa_supplicant (minus the prefix). In the
* format descriptions, * &quot;<code>x</code>&quot;
@@ -370,6 +375,10 @@ public class WifiMonitor {
public static final int GAS_QUERY_DONE_EVENT = BASE + 52;
public static final int RX_HS20_ANQP_ICON_EVENT = BASE + 53;
+ /* hotspot 2.0 events */
+ public static final int HS20_REMEDIATION_EVENT = BASE + 61;
+ public static final int HS20_DEAUTH_EVENT = BASE + 62;
+
/**
* This indicates a read error on the monitor socket conenction
*/
@@ -636,8 +645,9 @@ public class WifiMonitor {
if (mStateMachine2 != null)
mStateMachine2.sendMessage(RX_HS20_ANQP_ICON_EVENT,
eventStr.substring(RX_HS20_ANQP_ICON_STR_LEN + 1));
- }
- else {
+ } else if (eventStr.startsWith(HS20_PREFIX_STR)) {
+ handleHs20Events(eventStr);
+ } else {
if (DBG) Log.w(TAG, "couldn't identify event type - " + eventStr);
}
return false;
@@ -947,7 +957,39 @@ public class WifiMonitor {
}
mStateMachine2.sendMessage(GAS_QUERY_DONE_EVENT, success, 0, bssid);
} else {
- if (DBG) Log.d(TAG, "Unknown handled GAS query event");
+ if (DBG) Log.d(TAG, "Unknown GAS query event: " + dataString);
+ }
+ }
+
+ /**
+ * Handle HS20 events
+ */
+ private void handleHs20Events(String dataString) {
+ if (mStateMachine2 == null) return;
+ if (dataString.startsWith(HS20_SUB_REM_STR)) {
+ // format: HS20-SUBSCRIPTION-REMEDIATION osu_method, url
+ String[] dataTokens = dataString.split(" ");
+ int method = -1;
+ String url = null;
+ if (dataTokens.length >= 3) {
+ method = Integer.parseInt(dataTokens[1]);
+ url = dataTokens[2];
+ }
+ mStateMachine2.sendMessage(HS20_REMEDIATION_EVENT, method, 0, url);
+ } else if (dataString.startsWith(HS20_DEAUTH_STR)) {
+ // format: HS20-DEAUTH-IMMINENT-NOTICE code, delay, url
+ int code = -1;
+ int delay = -1;
+ String url = null;
+ String[] dataTokens = dataString.split(" ");
+ if (dataTokens.length >= 4) {
+ code = Integer.parseInt(dataTokens[1]);
+ delay = Integer.parseInt(dataTokens[2]);
+ url = dataTokens[3];
+ }
+ mStateMachine2.sendMessage(HS20_DEAUTH_EVENT, code, delay, url);
+ } else {
+ if (DBG) Log.d(TAG, "Unknown HS20 event: " + dataString);
}
}