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