[go: nahoru, domu]

1ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpackage com.android.anqp;
2ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
3ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.net.ProtocolException;
4ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.ByteBuffer;
5ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport java.nio.charset.StandardCharsets;
6ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
7ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.anqp.Constants.BYTE_MASK;
8ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistimport static com.android.anqp.Constants.SHORT_MASK;
9ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
10ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist/**
11ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * The Icon Binary File vendor specific ANQP Element,
12ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
13ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist * section 4.11
14ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist */
15ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvistpublic class HSIconFileElement extends ANQPElement {
16ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
17ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public enum StatusCode {Success, FileNotFound, Unspecified}
18ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
19ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final StatusCode mStatusCode;
20ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final String mType;
21ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    private final byte[] mIconData;
22ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
23ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public HSIconFileElement(Constants.ANQPElementType infoID, ByteBuffer payload)
24ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            throws ProtocolException {
25ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        super(infoID);
26ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
27ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        if (payload.remaining() < 4) {
28ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist            throw new ProtocolException("Truncated icon file: " + payload.remaining());
29ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        }
30ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
31ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        int statusID = payload.get() & BYTE_MASK;
32ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mStatusCode = statusID < StatusCode.values().length ? StatusCode.values()[statusID] : null;
33ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mType = Constants.getPrefixedString(payload, 1, StandardCharsets.US_ASCII);
34ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
35ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        int dataLength = payload.getShort() & SHORT_MASK;
36ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        mIconData = new byte[dataLength];
37ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        payload.get(mIconData);
38ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
39ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
40ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public StatusCode getStatusCode() {
41ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return mStatusCode;
42ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
43ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
44ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public String getType() {
45ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return mType;
46ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
47ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
48ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public byte[] getIconData() {
49ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return mIconData;
50ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
51ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist
52ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    @Override
53ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    public String toString() {
54ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist        return "HSIconFile{" +
55ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                "statusCode=" + mStatusCode +
56ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                ", type='" + mType + '\'' +
57ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist                ", iconData=" + mIconData.length + " bytes }";
58ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist    }
59ee699a61a5687d7c8518b639a940c8e9d1b384ddJan Nordqvist}
60