| package com.android.server.wifi.anqp; |
| |
| import java.net.ProtocolException; |
| import java.nio.ByteBuffer; |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * The Connection Capability vendor specific ANQP Element, |
| * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00, |
| * section 4.5 |
| */ |
| public class HSConnectionCapabilityElement extends ANQPElement { |
| |
| public enum ProtoStatus {Closed, Open, Unknown} |
| |
| private final List<ProtocolTuple> mStatusList; |
| |
| public static class ProtocolTuple { |
| private final int mProtocol; |
| private final int mPort; |
| private final ProtoStatus mStatus; |
| |
| private ProtocolTuple(ByteBuffer payload) throws ProtocolException { |
| if (payload.remaining() < 4) { |
| throw new ProtocolException("Runt protocol tuple: " + payload.remaining()); |
| } |
| mProtocol = payload.get() & Constants.BYTE_MASK; |
| mPort = payload.getShort() & Constants.SHORT_MASK; |
| int statusNumber = payload.get() & Constants.BYTE_MASK; |
| mStatus = statusNumber < ProtoStatus.values().length ? |
| ProtoStatus.values()[statusNumber] : |
| null; |
| } |
| |
| public int getProtocol() { |
| return mProtocol; |
| } |
| |
| public int getPort() { |
| return mPort; |
| } |
| |
| public ProtoStatus getStatus() { |
| return mStatus; |
| } |
| |
| @Override |
| public String toString() { |
| return "ProtocolTuple{" + |
| "mProtocol=" + mProtocol + |
| ", mPort=" + mPort + |
| ", mStatus=" + mStatus + |
| '}'; |
| } |
| } |
| |
| public HSConnectionCapabilityElement(Constants.ANQPElementType infoID, ByteBuffer payload) |
| throws ProtocolException { |
| super(infoID); |
| |
| mStatusList = new ArrayList<>(); |
| while (payload.hasRemaining()) { |
| mStatusList.add(new ProtocolTuple(payload)); |
| } |
| } |
| |
| public List<ProtocolTuple> getStatusList() { |
| return Collections.unmodifiableList(mStatusList); |
| } |
| |
| @Override |
| public String toString() { |
| return "HSConnectionCapability{" + |
| "mStatusList=" + mStatusList + |
| '}'; |
| } |
| } |