package com.android.server.wifi.anqp; import java.net.ProtocolException; import java.nio.ByteBuffer; /** * The IP Address Type availability ANQP Element, IEEE802.11-2012 section 8.4.4.9 */ public class IPAddressTypeAvailabilityElement extends ANQPElement { public enum IPv4Availability { NotAvailable, Public, PortRestricted, SingleNAT, DoubleNAT, PortRestrictedAndSingleNAT, PortRestrictedAndDoubleNAT, Unknown } public enum IPv6Availability {NotAvailable, Available, Unknown, Reserved} private final IPv4Availability mV4Availability; private final IPv6Availability mV6Availability; public IPAddressTypeAvailabilityElement(Constants.ANQPElementType infoID, ByteBuffer payload) throws ProtocolException { super(infoID); if (payload.remaining() != 1) throw new ProtocolException("Bad IP Address Type Availability length: " + payload.remaining()); int ipField = payload.get(); mV6Availability = IPv6Availability.values()[ipField & 0x3]; ipField = (ipField >> 2) & 0x3f; mV4Availability = ipField <= IPv4Availability.values().length ? IPv4Availability.values()[ipField] : IPv4Availability.Unknown; } public IPv4Availability getV4Availability() { return mV4Availability; } public IPv6Availability getV6Availability() { return mV6Availability; } @Override public String toString() { return "IPAddressTypeAvailability{" + "mV4Availability=" + mV4Availability + ", mV6Availability=" + mV6Availability + '}'; } }