11dc52f076977039a6bf112885feca6638c05cd29Peter Qiu/* 21dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Copyright (C) 2016 The Android Open Source Project 31dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 41dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License"); 51dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * you may not use this file except in compliance with the License. 61dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * You may obtain a copy of the License at 71dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 81dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * http://www.apache.org/licenses/LICENSE-2.0 91dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 101dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Unless required by applicable law or agreed to in writing, software 111dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS, 121dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * See the License for the specific language governing permissions and 141dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * limitations under the License. 151dc52f076977039a6bf112885feca6638c05cd29Peter Qiu */ 161dc52f076977039a6bf112885feca6638c05cd29Peter Qiu 178ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiupackage com.android.server.wifi.hotspot2.anqp; 186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 191dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport com.android.internal.annotations.VisibleForTesting; 201dc52f076977039a6bf112885feca6638c05cd29Peter Qiu 211dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport java.nio.BufferUnderflowException; 226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer; 236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.ArrayList; 246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Collections; 256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.List; 266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/** 286a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * The Connection Capability vendor specific ANQP Element, 296a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00, 306a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist * section 4.5 311dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 321dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Format: 331dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * | ProtoPort Tuple #1 (optiional) | .... 341dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 4 356a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */ 366a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistpublic class HSConnectionCapabilityElement extends ANQPElement { 371dc52f076977039a6bf112885feca6638c05cd29Peter Qiu private final List<ProtocolPortTuple> mStatusList; 386a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 391dc52f076977039a6bf112885feca6638c05cd29Peter Qiu @VisibleForTesting 401dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public HSConnectionCapabilityElement(List<ProtocolPortTuple> statusList) { 411dc52f076977039a6bf112885feca6638c05cd29Peter Qiu super(Constants.ANQPElementType.HSConnCapability); 421dc52f076977039a6bf112885feca6638c05cd29Peter Qiu mStatusList = statusList; 431dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 446a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 451dc52f076977039a6bf112885feca6638c05cd29Peter Qiu /** 461dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Parse a HSConnectionCapabilityElement from the given buffer. 471dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 481dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * @param payload The byte buffer to read from 491dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * @return {@link HSConnectionCapabilityElement} 501dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * @throws BufferUnderflowException 511dc52f076977039a6bf112885feca6638c05cd29Peter Qiu */ 521dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public static HSConnectionCapabilityElement parse(ByteBuffer payload) { 531dc52f076977039a6bf112885feca6638c05cd29Peter Qiu List<ProtocolPortTuple> statusList = new ArrayList<>(); 541dc52f076977039a6bf112885feca6638c05cd29Peter Qiu while (payload.hasRemaining()) { 551dc52f076977039a6bf112885feca6638c05cd29Peter Qiu statusList.add(ProtocolPortTuple.parse(payload)); 566a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 571dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return new HSConnectionCapabilityElement(statusList); 586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 601dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public List<ProtocolPortTuple> getStatusList() { 611dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return Collections.unmodifiableList(mStatusList); 621dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 636a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 641dc52f076977039a6bf112885feca6638c05cd29Peter Qiu @Override 651dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public boolean equals(Object thatObject) { 661dc52f076977039a6bf112885feca6638c05cd29Peter Qiu if (this == thatObject) { 671dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return true; 681dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 691dc52f076977039a6bf112885feca6638c05cd29Peter Qiu if (!(thatObject instanceof HSConnectionCapabilityElement)) { 701dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return false; 716a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 721dc52f076977039a6bf112885feca6638c05cd29Peter Qiu HSConnectionCapabilityElement that = (HSConnectionCapabilityElement) thatObject; 731dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return mStatusList.equals(that.mStatusList); 746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 761dc52f076977039a6bf112885feca6638c05cd29Peter Qiu @Override 771dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public int hashCode() { 781dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return mStatusList.hashCode(); 796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 816a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 826a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String toString() { 8377f2b82a2e80af8da52c22d69a76def6d4209757Jan Nordqvist return "HSConnectionCapability{" + 846a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist "mStatusList=" + mStatusList + 856a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist '}'; 866a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 876a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 88