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