1d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu/*
2d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Copyright (C) 2016 The Android Open Source Project
3d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu *
4d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
5d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * you may not use this file except in compliance with the License.
6d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * You may obtain a copy of the License at
7d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu *
8d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
9d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu *
10d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Unless required by applicable law or agreed to in writing, software
11d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
12d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * See the License for the specific language governing permissions and
14d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * limitations under the License.
15d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */
16d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu
178ca4ac971a9b862fbd69c57af3a3c0029a6b9f4dPeter Qiupackage com.android.server.wifi.hotspot2.anqp.eap;
186a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
19d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport com.android.internal.annotations.VisibleForTesting;
20d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu
21d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport java.nio.BufferUnderflowException;
226a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer;
236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.util.Arrays;
246a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
256a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/**
26d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * The Vendor Specific authentication parameter, IEEE802.11-2012, table 8-188.
27d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu *
28d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Format:
29d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * | Data |
30d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * variable
316a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */
32d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiupublic class VendorSpecificAuth extends AuthParam {
336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    private final byte[] mData;
346a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
35d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    @VisibleForTesting
36d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    public VendorSpecificAuth(byte[] data) {
37d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        super(AuthParam.PARAM_TYPE_VENDOR_SPECIFIC);
38d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        mData = data;
396a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
406a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
41d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    /**
42d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     * Parse a VendorSpecificAuth from the given buffer.
43d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     *
44d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     * @param payload The byte buffer to read from
45d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     * @param length The length of the data
46d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     * @return {@link VendorSpecificAuth}
47d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     * @throws BufferUnderflowException
48d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu     */
49d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    public static VendorSpecificAuth parse(ByteBuffer payload, int length) {
50d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        byte[] data = new byte[length];
51d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        payload.get(data);
52d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        return new VendorSpecificAuth(data);
536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
546a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
55d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    public byte[] getData() {
56d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        return mData;
576a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
586a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
596a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
606a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public boolean equals(Object thatObject) {
616a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        if (thatObject == this) {
626a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return true;
63d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        }
64d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        if (!(thatObject instanceof VendorSpecificAuth)) {
656a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist            return false;
666a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist        }
67d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        VendorSpecificAuth that = (VendorSpecificAuth) thatObject;
68d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        return Arrays.equals(mData, that.mData);
696a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
706a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
71d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    @Override
72d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu    public int hashCode() {
73d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        return Arrays.hashCode(mData);
746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
756a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist
766a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    @Override
776a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    public String toString() {
78d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu        return "VendorSpecificAuth{mData=" + Arrays.toString(mData) + "}";
796a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist    }
806a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist}
81