package com.android.anqp.eap; import java.net.ProtocolException; import java.nio.ByteBuffer; import java.util.EnumMap; import java.util.HashMap; import java.util.Map; import static com.android.anqp.Constants.BYTE_MASK; /** * An EAP authentication parameter, IEEE802.11-2012, table 8-188 */ public class NonEAPInnerAuth implements AuthParam { public enum NonEAPType {Reserved, PAP, CHAP, MSCHAP, MSCHAPv2} private static final Map sOmaMap = new EnumMap<>(NonEAPType.class); private static final Map sRevOmaMap = new HashMap<>(); private final NonEAPType mType; static { sOmaMap.put(NonEAPType.PAP, "PAP"); sOmaMap.put(NonEAPType.CHAP, "CHAP"); sOmaMap.put(NonEAPType.MSCHAP, "MS-CHAP"); sOmaMap.put(NonEAPType.MSCHAPv2, "MS-CHAP-V2"); for (Map.Entry entry : sOmaMap.entrySet()) { sRevOmaMap.put(entry.getValue(), entry.getKey()); } } public NonEAPInnerAuth(int length, ByteBuffer payload) throws ProtocolException { if (length != 1) { throw new ProtocolException("Bad length: " + payload.remaining()); } int typeID = payload.get() & BYTE_MASK; mType = typeID < NonEAPType.values().length ? NonEAPType.values()[typeID] : NonEAPType.Reserved; } public NonEAPInnerAuth(NonEAPType type) { mType = type; } /** * Construct from the OMA-DM PPS data * @param eapType as defined in the HS2.0 spec. */ public NonEAPInnerAuth(String eapType) { mType = sRevOmaMap.get(eapType); } @Override public EAP.AuthInfoID getAuthInfoID() { return EAP.AuthInfoID.NonEAPInnerAuthType; } public NonEAPType getType() { return mType; } public String getOMAtype() { return sOmaMap.get(mType); } public static String mapInnerType(NonEAPType type) { return sOmaMap.get(type); } @Override public int hashCode() { return mType.hashCode(); } @Override public boolean equals(Object thatObject) { if (thatObject == this) { return true; } else if (thatObject == null || thatObject.getClass() != NonEAPInnerAuth.class) { return false; } else { return ((NonEAPInnerAuth) thatObject).getType() == getType(); } } @Override public String toString() { return "Auth method NonEAPInnerAuthEAP, inner = " + mType + '\n'; } }