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 216a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.net.ProtocolException; 22d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport java.nio.BufferUnderflowException; 236a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvistimport java.nio.ByteBuffer; 2487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.HashMap; 2587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.Map; 266a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 276a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist/** 28d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * The Non-EAP Inner Authentication Type authentication parameter, IEEE802.11-2012, table 8-188. 29d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 30d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Format: 31d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * | Type | 32d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 1 336a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist */ 34d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiupublic class NonEAPInnerAuth extends AuthParam { 3587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public static final int AUTH_TYPE_UNKNOWN = 0; 36d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public static final int AUTH_TYPE_PAP = 1; 37d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public static final int AUTH_TYPE_CHAP = 2; 38d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public static final int AUTH_TYPE_MSCHAP = 3; 39d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public static final int AUTH_TYPE_MSCHAPV2 = 4; 40a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist 4187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu private static final Map<String, Integer> AUTH_TYPE_MAP = new HashMap<>(); 4287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu static { 4387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu AUTH_TYPE_MAP.put("PAP", AUTH_TYPE_PAP); 4487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu AUTH_TYPE_MAP.put("CHAP", AUTH_TYPE_CHAP); 4587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu AUTH_TYPE_MAP.put("MS-CHAP", AUTH_TYPE_MSCHAP); 4687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu AUTH_TYPE_MAP.put("MS-CHAP-V2", AUTH_TYPE_MSCHAPV2); 4787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 4887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 49d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu @VisibleForTesting 50d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public static final int EXPECTED_LENGTH_VALUE = 1; 513be1b3fc037bef7fb4448dec89aea3f2e1318853Jan Nordqvist 52d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu private final int mAuthType; 536a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 54d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public NonEAPInnerAuth(int authType) { 55d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu super(AuthParam.PARAM_TYPE_NON_EAP_INNER_AUTH_TYPE); 56d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu mAuthType = authType; 57a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist } 58a7ead3d4be45cb69bb5851f1a6f9673e93607fc2Jan Nordqvist 5971a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist /** 60d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Parse a NonEAPInnerAuth from the given buffer. 61d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 62d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @param payload The byte buffer to read from 63d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @param length The length of the data 64d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @return {@link NonEAPInnerAuth} 65d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @throws BufferUnderflowException 6671a988c8e9859244b83cd55bb6b6ee913fcaf95cJan Nordqvist */ 67d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public static NonEAPInnerAuth parse(ByteBuffer payload, int length) throws ProtocolException { 68d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu if (length != EXPECTED_LENGTH_VALUE) { 69d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu throw new ProtocolException("Invalid length: " + length); 70d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 71d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu int authType = payload.get() & 0xFF; 72d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu return new NonEAPInnerAuth(authType); 736a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 746a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 7587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 7687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Convert an authentication type string to an integer representation. 7787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 7887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param typeStr The string of authentication type 7987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @return int 8087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 8187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public static int getAuthTypeID(String typeStr) { 8287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu if (AUTH_TYPE_MAP.containsKey(typeStr)) { 8387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu return AUTH_TYPE_MAP.get(typeStr).intValue(); 8487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 8587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu return AUTH_TYPE_UNKNOWN; 8687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 8787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 886a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 896a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public boolean equals(Object thatObject) { 906a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist if (thatObject == this) { 916a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return true; 92d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 93d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu if (!(thatObject instanceof NonEAPInnerAuth)) { 946a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist return false; 956a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 96d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu NonEAPInnerAuth that = (NonEAPInnerAuth) thatObject; 97d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu return mAuthType == that.mAuthType; 98d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 99d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 100d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu @Override 101d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public int hashCode() { 102d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu return mAuthType; 1036a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1046a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist 1056a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist @Override 1066a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist public String toString() { 107d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu return "NonEAPInnerAuth{mAuthType=" + mAuthType + "}"; 1086a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist } 1096a3903fed590e369b576bddbe1ae2d788768ddfeJan Nordqvist} 110