package com.android.server.wifi.anqp; import java.net.ProtocolException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static com.android.server.wifi.anqp.Constants.BYTE_MASK; /** * The Network Authentication Type ANQP Element, IEEE802.11-2012 section 8.4.4.6 */ public class NetworkAuthenticationTypeElement extends ANQPElement { private final List m_authenticationTypes; public enum NwkAuthTypeEnum { TermsAndConditions, OnLineEnrollment, HTTPRedirection, DNSRedirection, Reserved } public static class NetworkAuthentication { private final NwkAuthTypeEnum m_type; private final String m_url; private NetworkAuthentication(NwkAuthTypeEnum type, String url) { m_type = type; m_url = url; } public NwkAuthTypeEnum getType() { return m_type; } public String getURL() { return m_url; } @Override public String toString() { return "NetworkAuthentication{" + "m_type=" + m_type + ", m_url='" + m_url + '\'' + '}'; } } public NetworkAuthenticationTypeElement(Constants.ANQPElementType infoID, ByteBuffer payload) throws ProtocolException { super(infoID); m_authenticationTypes = new ArrayList(); while (payload.hasRemaining()) { int typeNumber = payload.get() & BYTE_MASK; NwkAuthTypeEnum type; type = typeNumber >= NwkAuthTypeEnum.values().length ? NwkAuthTypeEnum.Reserved : NwkAuthTypeEnum.values()[typeNumber]; m_authenticationTypes.add(new NetworkAuthentication(type, Constants.getPrefixedString(payload, 2, StandardCharsets.UTF_8))); } } public List getAuthenticationTypes() { return Collections.unmodifiableList(m_authenticationTypes); } @Override public String toString() { return "NetworkAuthenticationType{" + "m_authenticationTypes=" + m_authenticationTypes + '}'; } }