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; 182e814680f4dd27a5f825afab189843582235cedcJan Nordqvist 191dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport com.android.internal.annotations.VisibleForTesting; 201dc52f076977039a6bf112885feca6638c05cd29Peter Qiu 212e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport java.nio.ByteBuffer; 221dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport java.util.Arrays; 232e814680f4dd27a5f825afab189843582235cedcJan Nordqvist 242e814680f4dd27a5f825afab189843582235cedcJan Nordqvist/** 252e814680f4dd27a5f825afab189843582235cedcJan Nordqvist * An object holding the raw octets of an ANQP element as provided by the wpa_supplicant. 262e814680f4dd27a5f825afab189843582235cedcJan Nordqvist */ 272e814680f4dd27a5f825afab189843582235cedcJan Nordqvistpublic class RawByteElement extends ANQPElement { 282e814680f4dd27a5f825afab189843582235cedcJan Nordqvist private final byte[] mPayload; 292e814680f4dd27a5f825afab189843582235cedcJan Nordqvist 301dc52f076977039a6bf112885feca6638c05cd29Peter Qiu @VisibleForTesting 311dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public RawByteElement(Constants.ANQPElementType infoID, byte[] payload) { 322e814680f4dd27a5f825afab189843582235cedcJan Nordqvist super(infoID); 331dc52f076977039a6bf112885feca6638c05cd29Peter Qiu mPayload = payload; 341dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 351dc52f076977039a6bf112885feca6638c05cd29Peter Qiu 361dc52f076977039a6bf112885feca6638c05cd29Peter Qiu /** 371dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Parse a RawByteElement from the given buffer. 381dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * 391dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * @param payload The byte buffer to read from 401dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * @return {@link HSConnectionCapabilityElement} 411dc52f076977039a6bf112885feca6638c05cd29Peter Qiu */ 421dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public static RawByteElement parse(Constants.ANQPElementType infoID, ByteBuffer payload) { 431dc52f076977039a6bf112885feca6638c05cd29Peter Qiu byte[] rawBytes = new byte[payload.remaining()]; 441dc52f076977039a6bf112885feca6638c05cd29Peter Qiu if (payload.hasRemaining()) { 451dc52f076977039a6bf112885feca6638c05cd29Peter Qiu payload.get(rawBytes); 461dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 471dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return new RawByteElement(infoID, rawBytes); 482e814680f4dd27a5f825afab189843582235cedcJan Nordqvist } 492e814680f4dd27a5f825afab189843582235cedcJan Nordqvist 502e814680f4dd27a5f825afab189843582235cedcJan Nordqvist public byte[] getPayload() { 512e814680f4dd27a5f825afab189843582235cedcJan Nordqvist return mPayload; 522e814680f4dd27a5f825afab189843582235cedcJan Nordqvist } 531dc52f076977039a6bf112885feca6638c05cd29Peter Qiu 541dc52f076977039a6bf112885feca6638c05cd29Peter Qiu @Override 551dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public boolean equals(Object thatObject) { 561dc52f076977039a6bf112885feca6638c05cd29Peter Qiu if (this == thatObject) { 571dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return true; 581dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 591dc52f076977039a6bf112885feca6638c05cd29Peter Qiu if (!(thatObject instanceof RawByteElement)) { 601dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return false; 611dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 621dc52f076977039a6bf112885feca6638c05cd29Peter Qiu RawByteElement that = (RawByteElement) thatObject; 631dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return getID() == that.getID() && Arrays.equals(mPayload, that.mPayload); 641dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 651dc52f076977039a6bf112885feca6638c05cd29Peter Qiu 661dc52f076977039a6bf112885feca6638c05cd29Peter Qiu @Override 671dc52f076977039a6bf112885feca6638c05cd29Peter Qiu public int hashCode() { 681dc52f076977039a6bf112885feca6638c05cd29Peter Qiu return Arrays.hashCode(mPayload); 691dc52f076977039a6bf112885feca6638c05cd29Peter Qiu } 702e814680f4dd27a5f825afab189843582235cedcJan Nordqvist} 71