| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.server.wifi.hotspot2; |
| |
| import android.annotation.IntDef; |
| |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| |
| /** |
| * This class carries the payload of a Hotspot 2.0 Wireless Network Management (WNM) frame, |
| * described in the Hotspot 2.0 spec, section 3.2. |
| */ |
| public class WnmData { |
| public static final int ESS = 1; // HS2.0 spec section 3.2.1.2, table 4 |
| @Retention(RetentionPolicy.SOURCE) |
| @IntDef(value = { |
| HS20_REMEDIATION_EVENT, |
| HS20_DEAUTH_IMMINENT_EVENT, |
| HS20_TERMS_AND_CONDITIONS_ACCEPTANCE_REQUIRED_EVENT}) |
| public @interface WmnEventType {} |
| public static final int HS20_REMEDIATION_EVENT = 0; |
| public static final int HS20_DEAUTH_IMMINENT_EVENT = 1; |
| public static final int HS20_TERMS_AND_CONDITIONS_ACCEPTANCE_REQUIRED_EVENT = 2; |
| public static final int UNDEFINED = -1; |
| |
| @Retention(RetentionPolicy.SOURCE) |
| @IntDef(value = { |
| OMA_DM, |
| SOAP_XML_SPP}) |
| public @interface OsuMethod {} |
| public static final int OMA_DM = 0; |
| public static final int SOAP_XML_SPP = 1; |
| |
| private final long mBssid; |
| private final String mUrl; |
| private final @WmnEventType int mEventType; |
| private final int mMethod; |
| private final boolean mEss; |
| private final int mDelay; |
| |
| private WnmData(@WmnEventType int eventType, long bssid, String url, @OsuMethod int method, |
| boolean ess, int delay) { |
| mBssid = bssid; |
| mUrl = url; |
| mMethod = method; |
| mEss = ess; |
| mDelay = delay; |
| mEventType = eventType; |
| } |
| |
| /** |
| * Create a Passpoint Remediation WNM-Notification |
| * |
| * @param bssid BSSID of the source AP |
| * @param url URL of the remediation server |
| * @param method OSU method. Refer to section 4.8.1.3 of the Passpoint spec |
| * |
| * @return a WnmData object |
| */ |
| public static WnmData createRemediationEvent(long bssid, String url, @OsuMethod int method) { |
| return new WnmData(HS20_REMEDIATION_EVENT, bssid, url, method, false, UNDEFINED); |
| } |
| |
| /** |
| * Create a Passpoint Deauth-Imminent WNM-Notification |
| * |
| * @param bssid BSSID of the source AP |
| * @param url URL of the remediation server |
| * @param ess A flag to indicate if the event applies to the ESS or only to the BSS |
| * |
| * @return a WnmData object |
| */ |
| public static WnmData createDeauthImminentEvent(long bssid, String url, boolean ess, |
| int delay) { |
| return new WnmData(HS20_DEAUTH_IMMINENT_EVENT, bssid, url, UNDEFINED, ess, delay); |
| } |
| |
| /** |
| * Create a Passpoint Terms & Conditions acceptance required WNM-Notification |
| * |
| * @param bssid BSSID of the source AP |
| * @param url URL of the remediation server |
| * |
| * @return a WnmData object |
| */ |
| public static WnmData createTermsAndConditionsAccetanceRequiredEvent(long bssid, String url) { |
| return new WnmData(HS20_TERMS_AND_CONDITIONS_ACCEPTANCE_REQUIRED_EVENT, bssid, url, |
| UNDEFINED, false, UNDEFINED); |
| } |
| |
| /** |
| * Get the BSSID of the source AP |
| * |
| * @return The BSSID of the source AP |
| */ |
| public long getBssid() { |
| return mBssid; |
| } |
| |
| /** |
| * Get the URL associated to the WNM-Notification |
| * |
| * @return The URL associated to the WNM-Notification |
| */ |
| public String getUrl() { |
| return mUrl; |
| } |
| |
| /** |
| * Get event type |
| * |
| * @return The WNM-Notification event type |
| */ |
| @WmnEventType |
| public int getEventType() { |
| return mEventType; |
| } |
| |
| /** |
| * Get the OSU method associated to the Remediation WNM-Notification |
| * |
| * @return The OSU method supported by the server |
| */ |
| @OsuMethod |
| public int getMethod() { |
| return mMethod; |
| } |
| |
| /** |
| * Get the ESS flag associated to the Deauth-Imminent WNM-Notification |
| * |
| * @return true if notification is for the entire ESS, false for the BSS only |
| */ |
| public boolean isEss() { |
| return mEss; |
| } |
| |
| /** |
| * Get the delay in seconds associated to the Deauth-Imminent WNM-Notification |
| * |
| * @return The delay in seconds that a mobile device shall wait before attempting reassociation |
| */ |
| public int getDelay() { |
| return mDelay; |
| } |
| } |