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