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