16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp;
26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException;
46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer;
56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Arrays;
66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/**
86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The HS Capability list vendor specific ANQP Element,
96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * section 4.2
116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */
126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class HSCapabilityListElement extends ANQPElement {
136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final Constants.ANQPElementType[] mCapabilities;
146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public HSCapabilityListElement(Constants.ANQPElementType infoID, ByteBuffer payload)
166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            throws ProtocolException {
176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        super(infoID);
186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        mCapabilities = new Constants.ANQPElementType[payload.remaining()];
206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        int index = 0;
226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        while (payload.hasRemaining()) {
236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            int capID = payload.get() & Constants.BYTE_MASK;
24777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist            Constants.ANQPElementType capability = Constants.mapHS20Element(capID);
25777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist            if (capability == null) {
266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                throw new ProtocolException("Unknown capability: " + capID);
27777f4fc037d3ebd555f10041f8acfb41515b2f4bJan Nordqvist            }
286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            mCapabilities[index++] = capability;
296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public Constants.ANQPElementType[] getCapabilities() {
336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mCapabilities;
346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public String toString() {
3877f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return "HSCapabilityList{" +
396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                "mCapabilities=" + Arrays.toString(mCapabilities) +
406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist                '}';
416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist}
43