diff options
author | Yuhao Zheng <yuhaozheng@google.com> | 2014-05-12 12:37:18 -0700 |
---|---|---|
committer | Vinit Deshapnde <vinitd@google.com> | 2014-05-16 16:06:56 -0700 |
commit | 5d30d5c2e0eec4db2303da3f225f52da748e2060 (patch) | |
tree | d6c3a8f85560ee181300ec3c43253b2919602efd /service/java/com/android/server/wifi/WifiMonitor.java | |
parent | e65cebc4284fd320a155a274cb647f73cecabd11 (diff) | |
download | frameworks_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.java | 48 |
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, * "<code>x</code>" @@ -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); } } |