1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.anqp;
2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.net.ProtocolException;
4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.ByteBuffer;
5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.charset.StandardCharsets;
6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.ArrayList;
7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.Collections;
8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.util.List;
9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist/**
11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * The OSU Providers List vendor specific ANQP Element,
12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * section 4.8
14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist */
15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class HSOsuProvidersElement extends ANQPElement {
16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final String mSSID;
17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final List<OSUProvider> mProviders;
18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public HSOsuProvidersElement(Constants.ANQPElementType infoID, ByteBuffer payload)
20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            throws ProtocolException {
21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        super(infoID);
22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mSSID = Constants.getPrefixedString(payload, 1, StandardCharsets.UTF_8);
24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        int providerCount = payload.get() & Constants.BYTE_MASK;
25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mProviders = new ArrayList<>(providerCount);
27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        while (providerCount > 0) {
29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            mProviders.add(new OSUProvider(mSSID, payload));
30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            providerCount--;
31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        }
32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public String getSSID() {
35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return mSSID;
36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public List<OSUProvider> getProviders() {
39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return Collections.unmodifiableList(mProviders);
40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    @Override
43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public String toString() {
44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return "HSOsuProviders{" +
45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                "SSID='" + mSSID + '\'' +
46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                ", providers=" + mProviders +
47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                '}';
48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist}
50