RoamingConsortiumElement.java revision 74339de52d7066f22771d914e698da503232c107
1package com.android.server.wifi.hotspot2.anqp; 2 3import com.android.internal.annotations.VisibleForTesting; 4import com.android.server.wifi.ByteBufferReader; 5import com.android.server.wifi.hotspot2.Utils; 6 7import java.net.ProtocolException; 8import java.nio.BufferUnderflowException; 9import java.nio.ByteBuffer; 10import java.nio.ByteOrder; 11import java.util.ArrayList; 12import java.util.Collections; 13import java.util.List; 14 15/** 16 * The Roaming Consortium ANQP Element, IEEE802.11-2012 section 8.4.4.7 17 * 18 ** Format: 19 * 20 * | OI Duple #1 (optional) | ... 21 * variable 22 * 23 * | OI Length | OI | 24 * 1 variable 25 * 26 */ 27public class RoamingConsortiumElement extends ANQPElement { 28 @VisibleForTesting 29 public static final int MINIMUM_OI_LENGTH = Byte.BYTES; 30 31 @VisibleForTesting 32 public static final int MAXIMUM_OI_LENGTH = Long.BYTES; 33 34 private final List<Long> mOIs; 35 36 @VisibleForTesting 37 public RoamingConsortiumElement(List<Long> ois) { 38 super(Constants.ANQPElementType.ANQPRoamingConsortium); 39 mOIs = ois; 40 } 41 42 /** 43 * Parse a VenueNameElement from the given payload. 44 * 45 * @param payload The byte buffer to read from 46 * @return {@link RoamingConsortiumElement} 47 * @throws BufferUnderflowException 48 * @throws ProtocolException 49 */ 50 public static RoamingConsortiumElement parse(ByteBuffer payload) 51 throws ProtocolException { 52 List<Long> OIs = new ArrayList<Long>(); 53 while (payload.hasRemaining()) { 54 int length = payload.get() & 0xFF; 55 if (length < MINIMUM_OI_LENGTH || length > MAXIMUM_OI_LENGTH) { 56 throw new ProtocolException("Bad OI length: " + length); 57 } 58 OIs.add(ByteBufferReader.readInteger(payload, ByteOrder.BIG_ENDIAN, length)); 59 } 60 return new RoamingConsortiumElement(OIs); 61 } 62 63 public List<Long> getOIs() { 64 return Collections.unmodifiableList(mOIs); 65 } 66 67 @Override 68 public boolean equals(Object thatObject) { 69 if (this == thatObject) { 70 return true; 71 } 72 if (!(thatObject instanceof RoamingConsortiumElement)) { 73 return false; 74 } 75 RoamingConsortiumElement that = (RoamingConsortiumElement) thatObject; 76 return mOIs.equals(that.mOIs); 77 } 78 79 @Override 80 public int hashCode() { 81 return mOIs.hashCode(); 82 } 83 84 @Override 85 public String toString() { 86 return "RoamingConsortium{mOis=[" + Utils.roamingConsortiumsToString(mOIs) + "]}"; 87 } 88} 89