16a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpackage com.android.server.wifi.anqp;
26a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
36a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException;
46a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer;
56a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.charset.StandardCharsets;
66a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
76a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.BYTE_MASK;
86a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport static com.android.server.wifi.anqp.Constants.SHORT_MASK;
96a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
106a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/**
116a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Icon Binary File vendor specific ANQP Element,
126a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
136a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * section 4.11
146a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */
156a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class HSIconFileElement extends ANQPElement {
166a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
176a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public enum StatusCode {Success, FileNotFound, Unspecified}
186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
196a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final StatusCode mStatusCode;
206a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final String mType;
216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final byte[] mIconData;
226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public HSIconFileElement(Constants.ANQPElementType infoID, ByteBuffer payload)
246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            throws ProtocolException {
256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        super(infoID);
266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        if (payload.remaining() < 4) {
286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            throw new ProtocolException("Truncated icon file: " + payload.remaining());
296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        int statusID = payload.get() & BYTE_MASK;
326a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        mStatusCode = statusID < StatusCode.values().length ? StatusCode.values()[statusID] : null;
337b2caa25fb57f2d95e0d0421704c49d3af4b8e6fJan Nordqvist        mType = Constants.getPrefixedString(payload, 1, StandardCharsets.US_ASCII);
346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        int dataLength = payload.getShort() & SHORT_MASK;
366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        mIconData = new byte[dataLength];
376a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        payload.get(mIconData);
386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public StatusCode getStatusCode() {
416a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mStatusCode;
426a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
436a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public String getType() {
456a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mType;
466a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
476a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
486a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public byte[] getIconData() {
496a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        return mIconData;
506a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
516a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
526a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public String toString() {
5477f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist        return "HSIconFile{" +
551d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                "statusCode=" + mStatusCode +
561d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", type='" + mType + '\'' +
571d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", iconData=" + mIconData.length + " bytes }";
586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist}
60